2011-04-10 131 views
1

是否可以實現具有多個控制信號的多路複用器?例如,我想要做這樣的事情:VHDL mux實現?

with (sig1 & sig2) select 
output <= A when "00", 
B when "01", 
C when "10", 
D when "11", 
'0' when others; 

我知道我可以將它們分配到一個新的信號和使用,但是這件事情我想盡可能避免。

+0

你能解釋一下爲什麼這是一個MUX?它看起來像已經實現了邏輯XOR的行爲。 – Philippe 2011-04-12 15:09:03

+0

這只是一個普遍的例子。對於具有兩個以上信號的更復雜的事物,更難以弄清楚邏輯方程式會發生什麼。 – 2011-04-14 08:52:02

回答

1

看到這,也許它可以幫助你

entity MUX is 
    port (a, i0, i1 : in bit; 
     o : out bit); 
end MUX; 

architecture behave of MUX is 
begin 
    process (a, i0, i1) begin 
    if a = '1' then 
     o <= i1; 
    else 
     o <= i0; 
    end if; 
end process; 
end behave; 
3

您需要啓用你的編譯器VHDL2008模式有它的工作。

另一種(也是2008年):

muxing: process (sig1, sig2) is 
begin -- process muxing 
    case sig1 & sig2 is 
     when "00" => output <= '1'; 
     when "01" => output <= '0'; 
     when "10" => output <= '0'; 
     when "11" => output <= '1'; 
     when others => output <= '0'; 
    end case; 
end process muxing; 

如果你有你的編譯器沒有VHDL-2008模式它將失敗的

Array type case expression must be of a locally static subtype. 

或類似的投訴。

如果你的編譯器不能做成VHDL-2008兼容的,你必須創建一個類型,你可以用它來包圍sig1 & sig2明確地告訴編譯器該怎麼解決這個是怎麼回事:

subtype twobits is bit_vector(0 to 1); 

然後:

with twobits'(sig1 & sig2) select 
    output <= '1' when "00", 
    -- etc. 

或:

case twobits'(sig1 & sig2) is 
    when "00" => -- etc. 
+0

嗨,感謝您的回覆,但您的意思是「創建類型」?我得到這個錯誤:「中綴表達式中的不明確類型; ieee.std_logic_1164.std_ulogic_vector或ieee.std_logic_1164.std_logic_vector。字符串文字在預期非數組類型(錯誤)的地方找到。」對不起格式化,這裏是新的。另外,是否有純粹的數據流方式呢? – 2011-04-14 09:06:57

+0

@Jonathan D:更新回答這些查詢。如果您需要數據流,您應該能夠保留原始代碼。對於聽起來像另一個問題的「中綴表達式中的模糊類型」,請發佈一個新問題 – 2011-04-14 14:29:56