2015-09-27 48 views
1

我一直在試圖學習如何使用VHDL中的條件信號分配(這是我相信的WHEELSE語句?),並提出了什麼應該是一個簡單的代碼。但ModelSim不會讓它編譯,並一直告訴我,我有一個非法的併發語句。哪裏?爲什麼?我試着做一個IF ELSIF ELSE語句的過程中,但我仍然得到了確切的同樣的錯誤,所以我現在比當我開始更加困惑......VHDL中的非法並行語句?

Library ieee; 
Use ieee.std_logic_1164.all; 

Entity Q59122 is port (
    A, B : IN STD_LOGIC; 
    Y : OUT STD_LOGIC 
); 
End Entity Q59122; 

ARCHITECTURE csa OF Q59122 IS 
BEGIN 
    Y <= '0' WHEN A = '0' 
    ELSE Y <= '0' WHEN B = '0' 
    ELSE Y <= '1'; 
END csa; 

基本上我試圖模仿的與門使用條件信號分配。我知道你可以在VHDL中使用「and」命令,但這會失敗。我在這裏先向您的幫助表示感謝。作爲

回答

2

併發賦值語句應該寫成:

Y <= '0' when A = '0' else 
    '0' when B = '0' else 
    '1'; 

如果你想使用的if-else鏈,你可以這樣寫:

process (A, B) 
begin 
    if A = '0' then 
     Y <= '0'; 
    elsif B = '0' then 
     Y <= '0'; 
    else 
     Y <= '1'; 
    end if; 
end process; 
+0

我嘗試使用只有一個任務,但它仍然當我嘗試編譯時得到以下錯誤。 **錯誤:ModelSim/Q59122.vhd(10):非法併發語句。 **錯誤:ModelSim/Q59122.vhd(16):VHDL編譯器退出 – AKage

+1

您的評論是不明確的。根據Bill的第一個例子(一個適當的併發條件信號賦值語句)轉換您的代碼時,結果分析。你犯了更多的語法錯誤,或者沒有使用比爾的第一個例子。他的第二個例子是併發信號分配的等效順序語句。通過在elsif條件之後加上保留字「then」,它也可以進行分析。參見IEEE 1076-2008 10.5信號分配說明10.5.3有條件的信號分配。 – user1155120