VHDL多路复用器实现?
Posted
技术标签:
【中文标题】VHDL多路复用器实现?【英文标题】:VHDL mux implementation? 【发布时间】:2011-04-10 04:13:11 【问题描述】:是否可以实现具有多个控制信号的多路复用器?例如,我想做这样的事情:
with (sig1 & sig2) select
output <= A when "00",
B when "01",
C when "10",
D when "11",
'0' when others;
我知道我可以将它们分配给一个新信号并使用它,但如果可能的话,我想避免这种情况。
【问题讨论】:
你能解释一下为什么这是一个 MUX 吗?看起来已经实现了逻辑异或的行为。 这只是一个一般的例子。对于具有两个以上信号的更复杂的事物,更难弄清楚逻辑方程的含义。 【参考方案1】:您需要在编译器上启用 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。在预期非数组类型(错误)的位置找到字符串文字。”对不起格式,这里是新的。另外,有没有一种纯粹的数据流方式来做到这一点? @Jonathan D:已更新以回答这些问题。如果您想要数据流,您应该能够保留原始代码。对于听起来像另一个问题的“中缀表达式中的歧义类型”,请发布一个新问题【参考方案2】:看看这个,也许对你有帮助
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;
【讨论】:
以上是关于VHDL多路复用器实现?的主要内容,如果未能解决你的问题,请参考以下文章