2011-04-10 85 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