다중 제어 신호를 갖는 멀티플렉서를 구현할 수 있습니까?VHDL 멀티플렉서 구현?
with (sig1 & sig2) select
output <= A when "00",
B when "01",
C when "10",
D when "11",
'0' when others;
난 그냥 새로운 신호에 할당하고 사용할 수 알지만, 그게 내가 가능하면 피하고 싶은 뭔가 예를 들어, 나는 이런 식으로 뭔가를 할 수 있습니다.
다중 제어 신호를 갖는 멀티플렉서를 구현할 수 있습니까?VHDL 멀티플렉서 구현?
with (sig1 & sig2) select
output <= A when "00",
B when "01",
C when "10",
D when "11",
'0' when others;
난 그냥 새로운 신호에 할당하고 사용할 수 알지만, 그게 내가 가능하면 피하고 싶은 뭔가 예를 들어, 나는 이런 식으로 뭔가를 할 수 있습니다.
어쩌면 당신이
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;
당신은 그것이 작동하도록 컴파일러에 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.
안녕하세요, 답장을 보내 주셔서 감사합니다.하지만 "유형 만들기"란 무엇을 의미합니까? 이 오류가 발생합니다 : "중위 식 infix 식; ieee.std_logic_1164.std_ulogic_vector 또는 ieee.std_logic_1164.std_logic_vector. 문자열 형식이 아닌 배열 형식 (오류)이 예상됩니다." 형식화에 대해 죄송합니다. 여기에서 새로 만듭니다. 또한이 작업을 수행하는 순전히 데이터 흐름 방법이 있습니까? –
@Jonathan D : 해당 쿼리에 응답하도록 업데이트되었습니다. 데이터 흐름을 원할 경우 원본 코드를 유지할 수 있어야합니다. 다른 문제처럼 들리는 "삽입 표현식의 모호한 유형"에 대해 새로운 질문 게시 –
당신이 설명 할 수이게 왜 MUX? 그것은 논리 XOR의 동작을 구현 한 것 같습니다. – Philippe
그것은 단지 일반적인 예였습니다. 두 개 이상의 신호가있는 더 복잡한 작업의 경우 논리 방정식으로 진행되는 작업을 파악하기가 더 어려워집니다. –