누구든지 VHDL 프로세스의 If-Else 구문과 Case 문 구문의 차이점을 합성 툴로 코드가 RTL 회로로 추론하는 방법에 대해 말할 수 있습니까?
if-elsif-else
구조는 네트워크 라우팅 우선 순위를 추론 :
이 회로 시뮬레이션 – CircuitLab을 사용하여 작성된 회로도
이것은
if bool_expr_1 then
sig <= val_expr_1;
elsif bool_expr_2 then
sig <= val_expr_2;
elsif bool_expr_3 then
sig <= val_expr_3;
else
sig <= val_expr_4;
end if;
case
반면에 그 구조는 큰 ol 'mux를 유추합니다.
이것은
case case_expr is
when c0 =>
sig <= val_expr_0;
when c1 =>
sig <= val_expr_1;
when c2 =>
sig <= val_expr_2;
...
when others =>
sig <= val_expr_N;
end case;
분명히 이것들은 단 하나의 값 표현으로 매우 단순화 된 디자인이므로 결과는 하나입니다.
여러 중첩 된 if-else 및 case-statees를 혼합하여 if-else 구문을 프로세스 내부에 사용하는 경우를 고려하십시오.
위의 내용에 따라 중첩 / 혼합 방법을 확인할 수 있습니다.
또한 언제 어떤 구문을 사용해야합니까?
if-else
우선 순위를 유추 하므로 둘 이상의 입력 조건이 발생할 수있을 때 사용해야합니다. 사용 case
입력이 상호 배타적 인 경우 하나를, 다른 손으로, 적절하다.
dec
/jz
명령어를 수행하므로 훨씬 효율적입니다. 아마도 비슷한 최적화가 여기에 적용됩니다.