Мой VHDL-код работает не так, как я ожидал.
Что я хочу: у меня 32-битный поток входных данных и децимированный 32-битный вывод данных в определенном порядке.
Скажем, каждые 32-битные данные разделены на две 16-битные данные.
- первый случай: каждая вторая 16-битная 32-битная информация присутствует на выходе;
- второй случай: каждые четвертые 16-битные 32-битные данные присутствуют на выходе;
- третий случай, четвертый 16-битный 32-битный данные присутствуют на выходе и т. Д.
Как на рисунке: pic1
Здесьэто первый случай реализации:
process (CLK_IN, RST_IN)
begin
if (RST_IN = '1') then
rx_data_half_a <= (others => '0');
elsif rising_edge(CLK_IN) then
rx_data_half_a <= DATA_IN(15 downto 0);
end if;
end process;
process (CLK_IN, RST_IN)
begin
if (RST_IN = '1') then
rx_data_half_a0 <= (others => '0');
rx_data_half_a1 <= (others => '0');
elsif rising_edge(CLK_IN) then
rx_data_half_a0 <= rx_data_half_a;
rx_data_half_a1 <= rx_data_half_a0;
rx_data_half_a2 <= rx_data_half_a1;
DATA_OUT <= rx_data_half_a0 & rx_data_half_a;
end if;
end process;
И тестовый стенд выглядит так: sim
Вместо 00002222 44446666 ...
Я получаю: 00002222 22224444 44446666 ...
Я уже делаю эту работу, используя память (просто считая определенные адреса), но я не хочу ее использовать.Я думаю, что есть гораздо более простой способ реализовать это.
Можно сделать с регистрами, не уменьшая частоту?Можете ли вы дать мне совет?