是否可以实现具有多个控制信号的多路复用器?例如,我想要做这样的事情: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