HDL과 검증
위 기술에서 래치가 만들어지는 이유와 대책의 조합으로 올바른 것은?
always @(*) begin
case (sel)
2'b00: y = a;
2'b01: y = b;
2'b10: y = c;
endcase
end
- Acase 안에서 3개의 입력을 사용하기 때문. 입력을 2개로 줄인다
- Bsel=2'b11일 때 y에 대한 대입이 없기 때문. default 절을 추가하여 모든 경우의 값을 정한다
- 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. 플립플롭이 되어 다른 회로가 되어 버립니다.