HDL과 검증

위 기술에서 래치가 만들어지는 이유와 대책의 조합으로 올바른 것은?

always @(*) begin
    case (sel)
        2'b00: y = a;
        2'b01: y = b;
        2'b10: y = c;
    endcase
end
  1. Acase 안에서 3개의 입력을 사용하기 때문. 입력을 2개로 줄인다
  2. Bsel=2'b11일 때 y에 대한 대입이 없기 때문. default 절을 추가하여 모든 경우의 값을 정한다
  3. Calways @(*)를 사용하기 때문. always @(posedge clk)로 바꾼다
정답과 해설 보기

정답: B. sel=2'b11일 때 y에 대한 대입이 없기 때문. default 절을 추가하여 모든 경우의 값을 정한다

sel은 2비트로 4가지 값을 가지지만 2'b11인 경우가 기술되어 있지 않으므로, 그때 y는 이전 값을 유지해야 하여 래치가 만들어집니다. "default: y = 0;"처럼 나머지 모든 경우의 값을 정하거나, case 앞에서 y에 기본값을 대입해 두면 조합 회로가 됩니다. 조건 누락으로 인한 래치는 HDL 초보자가 자주 겪는 오류입니다.

  • A. 입력의 수는 원인이 아닙니다.
  • B. 올바릅니다. 모든 경우를 망라해야 합니다.
  • C. 플립플롭이 되어 다른 회로가 되어 버립니다.
이 분야 연습하기 분야로 돌아가기

HDL과 검증의 다른 문제

  1. 조합 회로의 always 블록에서 의도하지 않은 래치를 막기 위해 자주 쓰는 방법은?
  2. 다음 Verilog 기술 중 논리 합성에서 회로가 되지 않고 무시되는 것(시뮬레이션용 기술)은?
  3. 위와 같이 8비트 d 안의 1의 개수를 세는 기술을 논리 합성하면 어떤 회로가 되는가?
  4. 위 기술의 리셋 종류와 동작으로 올바른 것은?
  5. 동기 리셋과 비동기 리셋의 차이로 올바른 것은?

이 분야의 비교