VHDL如何生成多个触发器实体以使用BIT_VECTOR作为D输入

时间:2017-03-15 11:23:40

标签: entity vhdl quartus flip-flop

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

我不知道我哪里出错了,但触发器的输出没有变化。

由于

1 个答案:

答案 0 :(得分:0)

process (D,SUM)不应该依赖于D. I.e.你总是希望D在总和变化时改变。因为它们具有相同的长度,所以可以简单地完成:

D <= SUM;

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

我可以问你为什么不使用std_logicstd_logic_vector