может кто-нибудь объяснить мне, почему у меня есть одна тактовая задержка в моей симуляции следующего и как я могу это исправить, ее не должно быть, потому что я немного пропустил на выходе....
entity outBit is
port( clk1 : in STD_LOGIC;
clk2 : in STD_LOGIC;
-- reset : in STD_LOGIC;
int_in : in INTEGER;
bit_out : out STD_LOGIC); --_VECTOR of 32
end outBit ;
Является ли моя сущность и каждый нарастающий фронт clk 1 принимает целое число. В зависимости от того, какое это целое число (1, 2, 3, 4...), он выбирает соответствующую строку массива. Эта строка имеет 32 бита. Я хочу вывести по одному биту из 32 clk2. Например, если clk1 = 100, тогда clk2 = 100/32.
architecture Behavioral of outBit is
signal temp : array; --the array is fixed
signal output_bits : std_logic_vector(31 downto 0);
signal bit_i : integer := 31; --outputting a single bit out of 32 each time
begin
temp(0) <= "11111111111111111111111111111111";
temp(1) <= "11111111111111111111111111111110";
temp(2) <= "11111111111111111111111111111100";
-- etc
output_bits <= temp(int_in);
process(clk2)
--outputting a single bit out of 32 each time
--variable bit_i : integer := 31;
begin
if rising_edge(clk2) then
bit_out <= output_bits(bit_i);
if bit_i = 0 then
bit_i <= 31;
else
bit_i <= bit_i - 1;
end if;
end if;
end process;
end Behavioral;
Нежелательная задержка показана ниже. Я хотел бы каждые 32 цикла читать новую строку (в соответствии с введенным целым числом) и так далее....
Кстати, первые часы (в коде) (вторые часы на картинке) на самом деле не относятся к вопросу, просто чтобы понять, когда придет целое число.