1

複数の制御信号を使用してマルチプレクサを実装することは可能ですか? たとえば、次のようなことをしたい:

with (sig1 & sig2) select  
output <= A when "00",  
B when "01",  
C when "10",  
D when "11",  
'0' when others;  

それらを新しい信号に割り当てて使用できることはわかっていますが、それはできれば避けたいことです。

4

2 に答える 2

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.

または類似。

sig1 & sig2コンパイラを VHDL-2008 に準拠させることができない場合は、何が起こっているかをコンパイラに明示的に伝えるために を囲むために使用できる型を作成することで、これを回避する必要があります。

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.
于 2011-04-11T12:16:56.803 に答える
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;
于 2011-04-10T04:59:50.140 に答える