수업을 듣고 필기한 내용입니다.

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가 있기 때문.