Цитата(Timmy @ Oct 19 2013, 19:30)

Рекомендую опубликовать код, который управляет хранением, выборкой и сдвигом данных. И сообщить, какая скорость потока данных. На первый взгляд, тут требуется LUTов совсем чуть-чуть.
Код, к сожалению, сейчас на только на работе. Входные данные поступают с частотой 1.23 МГц, clk = 120 МГц. Хранение и выборка данных - два массива блочной памяти (из одного считываются данные для обработки, в другую в это время пишутся отсчеты, затем они меняются местами), адресация по счетчикам. Проблемное место именно в сдвиге.
-- вектор-указатель, изначально заполнен единичками, на каждой итерации сдвиг:
Код
pointer(521) <= '0';
pointer(520 downto 0) <= pointer(521 downto 1)
-- цикл выборки
for i in 0 to 511 loop
if(pointer(i) = '1') then
I_a(i) <= douta0_I(curr_num) xor PRS_I(i); -- douta0_I - выход памяти, PRS_I - выход ROM, где хранится PRS, curr_num = (i+it_num) mod 512;
-- it_num - номер итерации сдвига, меняется от 0 до 511.
else
I_a(i) <= out_buff_I(curr_num) xor PRS_I(i); -- out_buff_I - тот самый регистр, хранящий предыдущее считанное значение.
end if;
end loop;
аналогично формируются еще 3 компоненты, т.к. при перемножении 2-х квадратурных сигналов получаются 4 компоненты.
Сообщение отредактировал des00 - Oct 20 2013, 11:44