首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VHDL多路复用的实现?

VHDL多路复用的实现?
EN

Stack Overflow用户
提问于 2011-04-10 12:13:12
回答 2查看 3.9K关注 0票数 1

是否有可能实现具有多个控制信号的多路复用器?例如,我想这样做:

代码语言:javascript
复制
with (sig1 & sig2) select  
output <= A when "00",  
B when "01",  
C when "10",  
D when "11",  
'0' when others;  

我知道我可以将它们分配给一个新的信号并使用它,但如果可能的话,这是我想要避免的事情。

EN

回答 2

Stack Overflow用户

发布于 2011-04-11 20:16:57

您需要在编译器上启用VHDL2008模式才能使其工作。

另一种选择(也是2008年):

代码语言:javascript
复制
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模式,它将失败并抱怨

代码语言:javascript
复制
Array type case expression must be of a locally static subtype.

或者类似的。

如果您的编译器不能与VHDL2008兼容,那么您必须创建一个可以用来包围sig1 & sig2的类型来显式地告诉编译器发生了什么,从而解决这个问题:

代码语言:javascript
复制
subtype twobits is bit_vector(0 to 1);

然后:

代码语言:javascript
复制
with twobits'(sig1 & sig2) select  
    output <= '1' when "00",  
    -- etc.

或者:

代码语言:javascript
复制
case twobits'(sig1 & sig2) is
     when "00" =>  -- etc.
票数 3
EN

Stack Overflow用户

发布于 2011-04-10 12:59:50

看看这个,也许它能帮到你

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5609728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档