|
|
  |
NIOS II, программирование ниос2 на СИ |
|
|
|
Jan 28 2015, 11:12
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата О каких 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 ( 2.04 килобайт )
Кол-во скачиваний: 9
|
|
|
|
|
Jan 28 2015, 11:34
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122

|
Цитата(Golikov A. @ Jan 28 2015, 14:12)  В атаче если будет интересно программное фифо, вам надо создать 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 или где? Если в самой плиске, то не совсем понятно, как такого объема создать.
|
|
|
|
|
Jan 28 2015, 11:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Golikov A. @ Jan 28 2015, 14:12)  О сферических в вакууме, естественно  Цитата(Golikov A. @ Jan 28 2015, 11:59)  Ну пипец эта ваша альтера - это так чтобы doom13'а позлить  .. то хоть убейтесь ничего не выйдет, даже на ксалинксе, не то что на альтере - ну это тоже чтобы дума позлить  Цитата(Golikov A. @ Jan 26 2015, 12:26)  В целом конечно я не прав. Все же вопрос частоты. Я как то не подумал что люди могут ставить DDR3 и работать с ним на 60 МГц... (условно все конечно) Цитата(Golikov A. @ Jan 24 2015, 00:48)  смело... Цитата(Golikov A. @ Jan 23 2015, 20:44)  Чего то мне говорит что начиная с ддр2, уже не может, но могу и ошибаться... Цитата(Golikov A. @ Jan 20 2015, 15:28)  ну пипец ваша альтера  .... этож надо было придумать отдельные инструкции записи мимо кеша. Так за этим еще следить надо чтобы кеш был всегда синхронен с памятью под ним... а вот явно указано что срали они на понятие изменяемый%) и просто оптимизацию отключают и рады) Думаю, скоро можно будет менять Ваш статус на "БОЛТУН"
|
|
|
|
|
Jan 28 2015, 11:50
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(Golikov A. @ Jan 28 2015, 14:12)  В атаче если будет интересно программное фифо, вам надо создать 2 буфера длинной в 1.2 мегобайта, и набивать один из входящего потока, как получите сигнал выдать данные, переходите на другой буффер, а первый отдаете пользователю.
какой смысл хранить данных больше чем у вас могут попросить? Осталось только разобраться, как бы ухитриться набивать из входящего потока 60М при частоте процессора 100М и ничего не потерять  . Хотя, если со стороны АЦП поставить упаковщик и аппаратное ФИФО, то, наверное, успеет. А так SgDMA воткнул и всё путём. Правда, надо ещё научиться правильно его сконфигурировать и запрограммировать. Данные могут попросить не самые последние, а какие-нибудь старые, например, такая возможность есть в правильных цифровых осциллографах.
|
|
|
|
|
Jan 28 2015, 12:02
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Timmy @ Jan 28 2015, 14:50)  Осталось только разобраться, как бы ухитриться набивать из входящего потока 60М при частоте процессора 100М и ничего не потерять  . Хотя, если со стороны АЦП поставить упаковщик и аппаратное ФИФО, то, наверное, успеет. А так SgDMA воткнул и всё путём. Правда, надо ещё научиться правильно его сконфигурировать и запрограммировать. Данные могут попросить не самые последние, а какие-нибудь старые, например, такая возможность есть в правильных цифровых осциллографах. Там - 8bit*60M, а шина проца - 32bit*100M, получим - 32bit*15M. Цитата(Timmy @ Jan 28 2015, 14:50)  А так SgDMA воткнул и всё путём. Правда, надо ещё научиться правильно его сконфигурировать и запрограммировать. Лучше тогда mSgDMA, оно новее будет, а в управлении им всё просто. Цитата(x66 @ Jan 28 2015, 14:34)  Не совсем понял кое что: буффер создается в DDR2 или где? Если в самой плиске, то не совсем понятно, как такого объема создать. В DDR2, а она - память Ниоса (Qsys-системы).
|
|
|
|
|
Jan 28 2015, 12:38
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122

|
Цитата(doom13 @ Jan 28 2015, 15:30)  Это видно из рисунка приведённого выше. Проект делается на основе отладочной платы DB4CGX15 Cyclone IV PCIexpress Development Board. Такие параметры взяты из примера для этой платы
|
|
|
|
|
Jan 28 2015, 13:02
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122

|
Цитата(Golikov A. @ Jan 28 2015, 15:39)  200 МГц Я ошибаюсь или пропускная способность такой памяти порядка 3.2 МБайта в секунду по одному каналу? И даже если там будет 4 чипа, то 15 МБайт не достичь? Как вы получили это значение? Не 3200 МБ/с?
Сообщение отредактировал x66 - Jan 28 2015, 13:16
|
|
|
|
|
Jan 28 2015, 13:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(x66 @ Jan 28 2015, 16:02)  Цитата(Golikov A. @ Jan 28 2015, 15:39)  200 МГц Я ошибаюсь или пропускная способность такой памяти порядка 3.2 МБайта в секунду по одному каналу? И даже если там будет 4 чипа, то 15 МБайт не достичь?
Как вы получили это значение? Не 3200 МБ/с? Вот и я думаю, что товарищ ткнул пальцем в небо. Для Вашего случая максимальная скорость записи/чтения данных будет: 8 (ширина шины) * 200 MHz(частота тактирования памяти) * 2 (память DDR2 - работает по двум фронтам) = 3200 Mbit/s = 400 MB/s
|
|
|
|
|
Jan 28 2015, 13:44
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122

|
Цитата(doom13 @ Jan 28 2015, 15:02)  В DDR2, а она - память Ниоса (Qsys-системы). Не совсем понятно как делается
Сообщение отредактировал x66 - Jan 28 2015, 13:54
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|