2011-04-10 8 views
1

다중 제어 신호를 갖는 멀티플렉서를 구현할 수 있습니까?VHDL 멀티플렉서 구현?

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

난 그냥 새로운 신호에 할당하고 사용할 수 알지만, 그게 내가 가능하면 피하고 싶은 뭔가 예를 들어, 나는 이런 식으로 뭔가를 할 수 있습니다.

+0

당신이 설명 할 수이게 왜 MUX? 그것은 논리 XOR의 동작을 구현 한 것 같습니다. – Philippe

+0

그것은 단지 일반적인 예였습니다. 두 개 이상의 신호가있는 더 복잡한 작업의 경우 논리 방정식으로 진행되는 작업을 파악하기가 더 어려워집니다. –

답변

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

당신은 그것이 작동하도록 컴파일러에 VHDL2008 모드를 활성화해야하는 데 도움이를 참조하십시오.

대안 (도 2008 년) : 당신이 당신의 컴파일러에는 VHDL 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; 

그것이

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. 
+0

안녕하세요, 답장을 보내 주셔서 감사합니다.하지만 "유형 만들기"란 무엇을 의미합니까? 이 오류가 발생합니다 : "중위 식 infix 식; ieee.std_logic_1164.std_ulogic_vector 또는 ieee.std_logic_1164.std_logic_vector. 문자열 형식이 아닌 배열 형식 (오류)이 예상됩니다." 형식화에 대해 죄송합니다. 여기에서 새로 만듭니다. 또한이 작업을 수행하는 순전히 데이터 흐름 방법이 있습니까? –

+0

@Jonathan D : 해당 쿼리에 응답하도록 업데이트되었습니다. 데이터 흐름을 원할 경우 원본 코드를 유지할 수 있어야합니다. 다른 문제처럼 들리는 "삽입 표현식의 모호한 유형"에 대해 새로운 질문 게시 –