Как задержать сигнал на несколько циклов в vhdl
Как задержать сигнал на заданное количество циклов в VHDL? Количество циклов дано как общее.
Любые другие варианты вместо
process(CLK) is
begin
if rising_edge(CLK) then
a_q <= a;
a_q_q <= a_q;
a_q_q_q <= a_q_q;
-- etc
end if;
end process;
?
1 ответ
Решение
Создать 1-й массив (назовем его a_store
) соответствующего типа сигнала с длиной массива, связанной с количеством циклов. Это может означать, что вам нужно создать новый тип для массива, если нет уже векторного типа, который вы можете использовать: например. std_logic_vector
или же integer_vector
(последний стандарт только в VHDL-2008).
Затем перетасуйте массив по каждому тику:
if rising_edge(clk) then
a_store <= a_store(store'high-1 downto 0) & a;
a_out <= a_store(a_store'high);
end if;