doom13 0 January 28, 2015 Posted January 28, 2015 · Report post Можете посоветовать литературу по DMA, где толково расписано. Описание на IP-ядра смотрите ну и пример можете какой качнуть. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 January 28, 2015 Posted January 28, 2015 · Report post О каких 60 МГц говорили Вы - Вам виднее. О сферических в вакууме, естественно ;) но лучше разобраться с DMA (SgDMA/mSgDMA). ДМА имеет смысл если ядро чем то еще полезным нагружено, в данном же случае, я так понимаю вся нагрузка на ядро проца - это тосовка данных. Более того подозреваю что ядро проца появилось как раз из-за необходимости доступа к ДДР, через имеющийся в ядре интерфейс. В таком раскладе ДМА - лишнее усложнение и нестабильность В атаче если будет интересно программное фифо, вам надо создать 2 буфера длинной в 1.2 мегобайта, и набивать один из входящего потока, как получите сигнал выдать данные, переходите на другой буффер, а первый отдаете пользователю. какой смысл хранить данных больше чем у вас могут попросить? использовать буферы так uint8_t DataBuf1[1.2*1024*1024+2]; //буфер для хранения его надо в ДДР пихануть uint8_t DataBuf2[1.2*1024*1024+2]; //буфер для хранения его надо в ДДР пихануть FIFOStr Buffer1; FIFOStr Buffer2; InitFIFOStr(Buffer1,DataBuf1, sizeof(DataBuf1)); InitFIFOStr(Buffer2,DataBuf2, sizeof(DataBuf2)); дальше пихаете туда данные через AddFIFOData и забираете через GetFIFOData, буфер чиститься сам при забирании данных, но можно и вызвать функцию очистки вам надо только поправить функцию добавления данных, потому что она не дает перезаписывать буфер, возвращая код ошибки при переполнении. А также надо понять что делать если данные запросили, но их в буфере меньше 1.2 МБ, может вам вообще надо сделать 1 буфер, и выдавать всегда его целиком, а писать его по кругу... Code.zip Quote Share this post Link to post Share on other sites More sharing options...
x66 0 January 28, 2015 Posted January 28, 2015 · Report post В атаче если будет интересно программное фифо, вам надо создать 2 буфера длинной в 1.2 мегобайта, и набивать один из входящего потока, как получите сигнал выдать данные, переходите на другой буффер, а первый отдаете пользователю. какой смысл хранить данных больше чем у вас могут попросить? использовать буферы так uint8_t DataBuf1[1.2*1024*1024+2]; //буфер для хранения его надо в ДДР пихануть uint8_t DataBuf2[1.2*1024*1024+2]; //буфер для хранения его надо в ДДР пихануть FIFOStr Buffer1; FIFOStr Buffer2; InitFIFOStr(Buffer1,DataBuf1, sizeof(DataBuf1)); InitFIFOStr(Buffer2,DataBuf2, sizeof(DataBuf2)); Не совсем понял кое что: буффер создается в DDR2 или где? Если в самой плиске, то не совсем понятно, как такого объема создать. Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 January 28, 2015 Posted January 28, 2015 · Report post О сферических в вакууме, естественно ;) Ну пипец эта ваша альтера - это так чтобы doom13'а позлить:).. то хоть убейтесь ничего не выйдет, даже на ксалинксе, не то что на альтере - ну это тоже чтобы дума позлить:) В целом конечно я не прав. Все же вопрос частоты. Я как то не подумал что люди могут ставить DDR3 и работать с ним на 60 МГц... (условно все конечно) смело... Чего то мне говорит что начиная с ддр2, уже не может, но могу и ошибаться... ну пипец ваша альтера:).... этож надо было придумать отдельные инструкции записи мимо кеша. Так за этим еще следить надо чтобы кеш был всегда синхронен с памятью под ним... а вот явно указано что срали они на понятие изменяемый%) и просто оптимизацию отключают и рады) Думаю, скоро можно будет менять Ваш статус на "БОЛТУН" Quote Share this post Link to post Share on other sites More sharing options...
Timmy 1 January 28, 2015 Posted January 28, 2015 · Report post В атаче если будет интересно программное фифо, вам надо создать 2 буфера длинной в 1.2 мегобайта, и набивать один из входящего потока, как получите сигнал выдать данные, переходите на другой буффер, а первый отдаете пользователю. какой смысл хранить данных больше чем у вас могут попросить? Осталось только разобраться, как бы ухитриться набивать из входящего потока 60М при частоте процессора 100М и ничего не потерять:). Хотя, если со стороны АЦП поставить упаковщик и аппаратное ФИФО, то, наверное, успеет. А так SgDMA воткнул и всё путём. Правда, надо ещё научиться правильно его сконфигурировать и запрограммировать. Данные могут попросить не самые последние, а какие-нибудь старые, например, такая возможность есть в правильных цифровых осциллографах. Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 January 28, 2015 Posted January 28, 2015 · Report post Осталось только разобраться, как бы ухитриться набивать из входящего потока 60М при частоте процессора 100М и ничего не потерять:). Хотя, если со стороны АЦП поставить упаковщик и аппаратное ФИФО, то, наверное, успеет. А так SgDMA воткнул и всё путём. Правда, надо ещё научиться правильно его сконфигурировать и запрограммировать. Данные могут попросить не самые последние, а какие-нибудь старые, например, такая возможность есть в правильных цифровых осциллографах. Там - 8bit*60M, а шина проца - 32bit*100M, получим - 32bit*15M. А так SgDMA воткнул и всё путём. Правда, надо ещё научиться правильно его сконфигурировать и запрограммировать. Лучше тогда mSgDMA, оно новее будет, а в управлении им всё просто. Не совсем понял кое что: буффер создается в DDR2 или где? Если в самой плиске, то не совсем понятно, как такого объема создать. В DDR2, а она - память Ниоса (Qsys-системы). Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 January 28, 2015 Posted January 28, 2015 · Report post Кстати а какая частота DDR2? Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 January 28, 2015 Posted January 28, 2015 · Report post Кстати а какая частота DDR2? Это видно из рисунка приведённого выше. Quote Share this post Link to post Share on other sites More sharing options...
x66 0 January 28, 2015 Posted January 28, 2015 · Report post Это видно из рисунка приведённого выше. Проект делается на основе отладочной платы DB4CGX15 Cyclone IV PCIexpress Development Board. Такие параметры взяты из примера для этой платы Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 January 28, 2015 Posted January 28, 2015 · Report post 200 МГц Я ошибаюсь или пропускная способность такой памяти порядка 3.2 МБайта в секунду по одному каналу? И даже если там будет 4 чипа, то 15 МБайт не достичь? Quote Share this post Link to post Share on other sites More sharing options...
x66 0 January 28, 2015 Posted January 28, 2015 (edited) · Report post 200 МГц Я ошибаюсь или пропускная способность такой памяти порядка 3.2 МБайта в секунду по одному каналу? И даже если там будет 4 чипа, то 15 МБайт не достичь? Как вы получили это значение? Не 3200 МБ/с? Edited January 28, 2015 by x66 Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 January 28, 2015 Posted January 28, 2015 · Report post 200 МГц Я ошибаюсь или пропускная способность такой памяти порядка 3.2 МБайта в секунду по одному каналу? И даже если там будет 4 чипа, то 15 МБайт не достичь? Как вы получили это значение? Не 3200 МБ/с? Вот и я думаю, что товарищ ткнул пальцем в небо. Для Вашего случая максимальная скорость записи/чтения данных будет: 8 (ширина шины) * 200 MHz(частота тактирования памяти) * 2 (память DDR2 - работает по двум фронтам) = 3200 Mbit/s = 400 MB/s Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 January 28, 2015 Posted January 28, 2015 · Report post а... 3.2 Гигабита... А с учетом необходимой задержки между выставлением адреса колонки и столбца при выборе адреса? А когда ДМА и ниос будут по разным адресам щемится? Quote Share this post Link to post Share on other sites More sharing options...
x66 0 January 28, 2015 Posted January 28, 2015 (edited) · Report post В DDR2, а она - память Ниоса (Qsys-системы). Не совсем понятно как делается Edited January 28, 2015 by x66 Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 January 28, 2015 Posted January 28, 2015 · Report post нет. Надо просто линкеру указать что у него есть такая память. Quote Share this post Link to post Share on other sites More sharing options...