[HSD]Verilog Latch Inference
by
수업을 듣고 필기한 내용입니다.
Latch Inference
-
Verilog에서
always @
문을 사용해 Combinational Logic을 구현할 때, 의도치 않게 Latch가 생기는 이유. - 발생 원인: 모든 경우에 대한 고려가 없기 때문에 값을 저장하기 위한 latch를 verilog가 자동 생성.
- 해결방법: 모든 경우에 대해 값을 가지도록 만들기.
예시
-
예시 1
input output enable y 0 x 1 data always @ (enable or data) if (enable) y = data;
이 경우 sequential 문이 아니면서 동시에
enable == 0
일 때가 명시되지 않았으므로 latch inference 발생.다음과 같이 수정 가능.
always @ (enable or data) if (enable) y = data; else y = 0;
always @ (enable or data) y = 0; if (enable) y = data;
-
예시 2
always @ (select or data) case (select) 2'b00: y = data[select]; 2'b01: y = data[select]; 2'b10: y = data[select]; endcase
마찬가지로, default 경우를 넣어주면 해결. 2’b11 하나만 넣어서는 안 될 수 있음. z(high impedence)나 x가 있기 때문.
Subscribe via RSS