2014-12-02 82 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描述異步門和延遲,那麼你必須實例手工元,否則合成編譯器將優化線路和抱怨信號循環。