VHDL mux реализация? - PullRequest
       23

VHDL mux реализация?

1 голос
/ 10 апреля 2011

Возможно ли реализовать мультиплексор с несколькими управляющими сигналами?Например, я хочу сделать что-то вроде этого:

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

Я знаю, что мог бы просто назначить их новому сигналу и использовать его, но этого я хочу избежать, если это возможно.

Ответы [ 2 ]

3 голосов
/ 11 апреля 2011

Вам нужно включить режим 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.
1 голос
/ 10 апреля 2011

Видите это, может быть, это поможет вам

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;
...