为什么我的代码不能产生输出?

时间:2014-01-27 04:20:35

标签: vhdl

我是VHDL的新手,我刚刚使用Quartus II 9.0,并决定制作一个寄存器类型组件。我认为我的逻辑是正确的,但是当我运行模拟时,我没有得到任何输出。我创建了一个波形来测试可能的情况(使用节点查找器列出所有输入和输出,生成功能模拟网表)但我没有获得Q的任何输出。甚至在clr = 1且所有Q都应该是的简单情况下设为0.

library ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;

ENTITY Register32 IS PORT ( 
    d     : IN STD_LOGIC_VECTOR(31 DOWNTO 0); -- input.
    ld    : IN STD_LOGIC; -- load/enable.
    clr   : IN STD_LOGIC; -- async. clear.
    clk   : IN STD_LOGIC; -- clock.
    Q     : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)); -- output.
END Register32;

ARCHITECTURE description OF Register32 IS
BEGIN

    process (clk) begin
        if (clr = '1') then
            Q <= (others => '0');
        else
            if (rising_edge(clk)) then
                if (ld = '1') then
                    Q <= d;
                end if;
            end if;
        end if; 
    end process;

END description;

1 个答案:

答案 0 :(得分:3)

clr是异步的时,它必须包含在进程中 敏感性列表,因为Q的更新应立即对更改做出反应 clr。如果你潜水,Quartus II可能会给你一个警告 进入警告。

如果clrclk,则灵敏度列表中缺少的clr不可见 正在运行,但如果您当前的测试平台仅尝试Q到目前为止,它可能是。{ 因为您没有看到{{1}}的任何更改。