2014-12-02 54 views
-1

实际上我想制作一个本地控制器来启用锁存器。 正如你可以在我的代码下面看到的,信号en将从w AND x的输出中启用锁存器。之后,w和x将取得en。例如,最初,假设w和x值从1开始,en将变为1,并使锁存器从data_in中将数据提取到data_out。之后,en将成为w和x的输入并导致锁存器禁用。但是,当我使用大学波形程序对其进行测试时,电路不工作。 data_out没有取data_in的值。我无法弄清楚在VHDL中我还是个新问题。希望你能协助/建议我:)对不起,我的英语不好。如何控制本地控制器的输入引脚

  library ieee; 
      use ieee.std_logic_1164.all; 
      entity gasp_ctrl is 
      port(
       w,x : inout std_logic; --! bidirectional wire 
       data_in : in std_logic; --! Data In when latch is enable 
       data_out: out std_logic -- 
      ); 
      end gasp_ctrl; 

      architecture ctrl of gasp_ctrl is 
       signal en, ww, xx : std_logic; 

      begin 
       en <= w and x; ------ 
       ww <= en; 
       xx <= not en; 
       w <= ww; 
       x <= xx; 


       -------- Latch ------ 
       process(en) 
       begin 
        if(en = '1') then 
         data_out <= data_in; 
        end if; 
       end process; 
      end gasp_ctrl; 
+0

您的VHDL代码不会分析。结构体的结束状态应该是'end ctrl;'或'end architecture;'或'end architecture ctrl;'而不是'end gasp_ctrl;'。输入端口信号模式的值应该是输出值和输入端设置值之间的分辨率值。如果没有时间控制哪个'结束'驱动器在什么时候你看起来没有尝试这个值,那么你试图归属于这两个信号'x'和'w'的函数并不可行。它也不可能是合成的资格。 – user1155120 2014-12-02 09:07:15

回答

1

你的代码行形成一个组合循环:

en <= w and x; 
ww <= en; 
xx <= not en; 
w <= ww; 
x <= xx; 

如果你wan't描述异步门和延迟,那么你必须实例手工元,否则合成编译器将优化线路和抱怨信号循环。