我正在尝试使用generate函数使多个触发器用作寄存器。我有一个信号位向量,我希望每个位成为其等效触发器的D输入,但在编译之后,我得到输出Q没有驱动器的警告。
这里我定义了触发器的行为
entity flipflop is
port(
D,CLK,RST: in BIT;
Q: out BIT
);
end entity;
architecture behavioral of flipflop is
begin
P1: process(RST,CLK)
begin
if(RST='1')then
Q <= '0';
elsif(CLK='1' and CLK'EVENT) then
Q <= D;
end if;
end process;
end behavioral;
然后,我生成32个触发器,并尝试将bit_vector信号和的每个位设置为触发器的每个D输入。
SIGNAL Q,D: BIT_VECTOR (31 DOWNTO 0);
SIGNAL SUM: BIT_VECTOR (31 DOWNTO 0);
BEGIN
register_maker : for i in 0 to 31 generate
BEGIN
flipflop_inst : ENTITY work.flipflop port map
(Q => Q(i),
CLK => CLK,
RST => RST,
D => D(i)
);
end generate register_maker;
process (D,SUM)
begin
for i in 0 to 31 loop
D(i) <= SUM(i);
end loop;
end process;
我不知道我哪里出错了,但触发器的输出没有变化。
由于
答案 0 :(得分:0)
process (D,SUM)
不应该依赖于D. I.e.你总是希望D在总和变化时改变。因为它们具有相同的长度,所以可以简单地完成:
D <= SUM;
然后你说触发器的输出没有改变。可能是因为RST
被卡在'1'
的测试平台上了吗? (我们都犯了这个错误;))
我可以问你为什么不使用std_logic
和std_logic_vector
?