是否可以實現具有多個控制信號的多路複用器?例如,我想要做這樣的事情:VHDL mux實現?
with (sig1 & sig2) select
output <= A when "00",
B when "01",
C when "10",
D when "11",
'0' when others;
我知道我可以將它們分配到一個新的信號和使用,但是這件事情我想盡可能避免。
是否可以實現具有多個控制信號的多路複用器?例如,我想要做這樣的事情:VHDL mux實現?
with (sig1 & sig2) select
output <= A when "00",
B when "01",
C when "10",
D when "11",
'0' when others;
我知道我可以將它們分配到一個新的信號和使用,但是這件事情我想盡可能避免。
看到這,也許它可以幫助你
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;
您需要啓用你的編譯器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.
嗨,感謝您的回覆,但您的意思是「創建類型」?我得到這個錯誤:「中綴表達式中的不明確類型; ieee.std_logic_1164.std_ulogic_vector或ieee.std_logic_1164.std_logic_vector。字符串文字在預期非數組類型(錯誤)的地方找到。」對不起格式化,這裏是新的。另外,是否有純粹的數據流方式呢? – 2011-04-14 09:06:57
@Jonathan D:更新回答這些查詢。如果您需要數據流,您應該能夠保留原始代碼。對於聽起來像另一個問題的「中綴表達式中的模糊類型」,請發佈一個新問題 – 2011-04-14 14:29:56
你能解釋一下爲什麼這是一個MUX?它看起來像已經實現了邏輯XOR的行爲。 – Philippe 2011-04-12 15:09:03
這只是一個普遍的例子。對於具有兩個以上信號的更復雜的事物,更難以弄清楚邏輯方程式會發生什麼。 – 2011-04-14 08:52:02