0

我正在尝试使用 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;

我不确定我哪里出错了,但触发器的输出没有改变。

谢谢

4

1 回答 1

0

process (D,SUM)不应该依赖于 DIe 你只希望 D 在 sum 改变时改变。由于它们的长度相同,因此可以简单地通过以下方式完成:

D <= SUM;

然后你说触发器的输出没有改变。可能是因为RST'1'在你的测试台上吗?(我们都犯了那个错误;))

我可以问你为什么不使用std_logicand std_logic_vector

于 2017-03-15T20:12:47.887 回答