异步计数器追溯问题 VHDL



我对以下代码有问题,表示通用异步计数器。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity ASYNC_COUNTER is
generic(NBIT:integer);
port(
CLK : in std_logic;
COUNT : out std_logic_vector(NBIT-1 downto 0)
);
end entity ASYNC_COUNTER;
architecture architectural of ASYNC_COUNTER is
component FF is
port(   INPUT, CLK: in std_logic;
OUTPUT, NOUTPUT: out std_logic
);
end component FF;
signal q: std_logic_vector(NBIT-1 downto 0);
signal retroaction: std_logic_vector(NBIT-1 downto 0);
signal first_in: std_logic := '0';
begin
ARCH: for i in 0 to NBIT-1 generate
FIRST:if i=0 generate
F1: FF
port map(first_in, CLK, q(0), retroaction(0));
end generate FIRST;
first_in <= retroaction(0);
OTHER:if i>0 generate
F: FF
port map(retroaction(i), q(i-1), q(i), retroaction(i));
end generate OTHER;
end generate;
COUNT <= q;
end architecture architectural;

当然,问题是追溯,但我不知道如何以其他方式实现它。 有什么建议吗?

在代码的这一部分中:

OTHER:if i>0 generate
F: FF
port map(retroaction(i), q(i-1), q(i), retroaction(i));
end generate OTHER;

您可以使用retroaction(i)作为输入。此信号永远不会设置为已知值。在启动时,这个信号是"U",在每个时钟周期(实际上是q(i-1)个周期(中,它得到(不是"U"(即"U"。

一种解决方案是在声明中将追溯信号初始化为 0:

signal retroaction: std_logic_vector(NBIT-1 downto 0) := (others => '0');

最新更新