是否可以实现具有多个控制信号的多路复用器?例如,我想做这样的事情:
with (sig1 & sig2) select
output <= A when "00",
B when "01",
C when "10",
D when "11",
'0' when others;
我知道我可以将它们分配给一个新信号并使用它,但这是我想尽可能避免的事情。
是否可以实现具有多个控制信号的多路复用器?例如,我想做这样的事情:
with (sig1 & sig2) select
output <= A when "00",
B when "01",
C when "10",
D when "11",
'0' when others;
我知道我可以将它们分配给一个新信号并使用它,但这是我想尽可能避免的事情。
您需要在编译器上启用 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.
看看这个,也许对你有帮助
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;