그래서 당신은 질문이 있습니까? 브라이언이 대답을 지적한대로 시뮬레이션이나 분석 및 정교 작업에 문제가 있는지 여부는 명확하지 않습니다.
VHDL 설계 사양은 표준에 맞지 않습니다. VHDL 분석기가 오류를 생성하여 식 (with s select
)이있는 행을 가리키며 선택 사항이 완료되지 않았 음을 알려야합니다.
선택한 할당 문에서 선택한 표현식, 파형 및 선택 사항의 특성은 해당 공정 문에서 case 문이 유효한 문이어야합니다.
선택된 신호 지정 문은 선택된 신호 할당과 동일한 case 문을 가진 동등한 처리 문으로 구체화됩니다. case 문은 표현식의 각 가능한 값에 대해 단일 선택을해야합니다 (예 : s
은 "UU"
, "U0"
, "0U"
, "XX"
등의 가능한 선택을 갖는 std_logic_vector).
선택한 신호 지정 문과 동일한 처리 문에있는 동등한 case 문에는 완전한 선택 적용 범위가 없습니다. 당신은 others
선택이 필요하거나 선택 일치하도록 입력 범위를 좁힐 :
이
signal bs: bit_vector (s'range);
begin
bs <= to_bitvector(s);
with bs select
y <= d0 when "00",
d1 when "01",
d2 when "10",
d3 when "11";
이 예는 선택 범위를 좁힐 to_bitvector
을 사용합니다.
당신은 당신이 meta_value에 대한 'X'를 생성 할 수있는 사용하는 경우 : 함수의 반환 값의 하위 유형이 로컬 아니라고
signal bs: std_logic_vector (s'range);
begin
bs <= to_x01(s);
with bs select
y <= d0 when "00",
d1 when "01",
d2 when "10",
d3 when "11",
'X' when others;
그리고 사용되는 로컬로 선언 된 신호 (bs
) 인 이유를 공전. 함수는 동적으로 정교 해지고 반환 유형은 입력 유형에서 파생됩니다.
두 가지 결과 중 하나를 사용하여 코드를 수정하고 정교하게 수정하십시오. 또한 표준을 준수하지 않고 선택 범위에 대해 불평하지 않는 도구를 찾는 것이 가능합니다.
또한이 경우에 당신이 s
의 모든 이진 값을 포함하고 메타 값 또는 'H'와 'L'커버하지 않음으로써 래치를 추론하지 않는 대신 조건 신호 할당을 사용할 수
architecture foo of mux4v1 is
begin
y <= d0 when s = "00" else
d1 when s = "01" else
d2 when s = "10" else
d3 when s = "11";
end architecture;
을
동시 신호 할당은 동등한 process 문에서 case 문을 사용하지 않고 if-then-else 구문을 사용합니다.