2014-01-27 47 views
0

我是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; 

回答

3

clr是异步的,那么它必须被包括在过程 灵敏度列表中,因为Q更新应于变化立即作出反应 clr。如果您将 潜入警告中,Quartus II可能会向您发出警告。

clr在敏感列表丢失并不是那么明显,如果clk是 运行,但如果你目前的测试平台只是试图clr到目前为止,它可能是 原因,你没有看到的Q任何变化。

相关问题