Цитата(Dootch @ Oct 22 2013, 16:07)

Есть ли компонент для быстрой передачи порции данных длиной n слов в процессор?
Не понимаю, что значит передать порцию данных длиной n слов в процессор... Процессор берет данные из памяти загружает в регистры, выполняет операцию, записывает результат в память.
Вместо памяти он может читать из FIFO, к которой вы сделаете avalon slave интерфейс (без brust, это проще чем мастер, если решитесь - я подскажу).
Нажмите для просмотра прикрепленного файлаМожно обойтись одним FIFO, скажем 2048 слов, начинаете читать из него когда в нем больше половины заполнено в этом случаи вы гарантировано можете последовательно прочитать 1024 слова не тратя время на опрос на наличие слова в очереди при каждом чтении.
Т.е. описываете устройство с avalon slave интерфейсом для доступа к регистрам, у которого внутри FIFO куда пишутся данные с АЦП.
Мин. набор регистров:
control - здесь либо ресет, либо разрешение на захвата данный с АЦП, чтобы иметь возможность управлять стартом
status - флаг - число слов в очереди больше половины, флаг - очередь заполнена (в этом случаи пиши пропал, проц. не успевает)
read_data - отсюда читается слово из очереди.
В nios примерно след:
CODE
while (1) {
if ( iord(reg_status) & FIFO_FULL ) {
Panik!!!
}
if ( iord(reg_status) & FIFO_HALF_FULL ) {
for ( int i = 0; i < 1024; i++ ) {
int x = iord(reg_read_data);
int y = ...
y = ( a * x + b * y ) >> ...;
y в память...
}
}
}
Если АЦП знаковое расширение знака лучше сделать в хардваре при чтении из FIFO, что бы проц. сэкономить.
Как писалось выше при 100МГц у вас есть 20 тактов на отсчет, что очень немного. Само собой в цикле никаких вызовов функций, принтфов, арифметика целочисленная, полная оптимизация, на SDRAM включенный кэш. Если процессор справится, то никакие другие задачи он уже не потянет. Какова последующая обработка, после фильтрации?...
Цитата(Dootch @ Oct 22 2013, 16:07)

Могу ли я так рассчитать размер буфера, что времени его заполнения хватит на обработку в софте?
С включенным кэшем при чтении из SDRAM задержка будет только при чтении первого слова, последующие будут в кэше и так каждые 500000. Т.е. длина очереди должна скомпенсировать это время, я думаю что 1024 хватит за глаза.