HDL과 검증

위 기술에서 클록 상승 직전에 a=0, b=1이었다. 상승 후 a와 b의 값은 어떻게 되는가?

always @(posedge clk) begin
    a <= b;
    b <= a;
end
  1. Aa=1, b=0 (서로 바뀐다)
  2. Ba=1, b=1
  3. Ca=0, b=0
정답과 해설 보기

정답: A. a=1, b=0 (서로 바뀐다)

논블로킹 대입에서는 두 우변(b의 이전 값 1과 a의 이전 값 0)을 먼저 평가한 뒤 a에 1, b에 0을 동시에 쓰므로 값이 서로 바뀝니다. 회로로는 두 플립플롭의 출력을 서로의 입력에 연결한 형태입니다. 블로킹 대입(=)으로 쓰면 첫 번째 행에서 a가 1이 되고, 두 번째 행의 b에는 새로운 a인 1이 들어가 둘 다 1이 되어 버립니다.

  • A. 올바릅니다. 우변은 둘 다 이전 값으로 평가됩니다.
  • B. 이것은 "="로 쓴 경우의 결과입니다.
  • C. 값이 사라지는 일은 없습니다.
이 분야 연습하기 분야로 돌아가기

HDL과 검증의 다른 문제

  1. 2단 시프트 레지스터를 의도하여 위와 같이 블로킹 대입(=)으로 작성했다. 발생하는 문제로 올바른 것은?
  2. Verilog에서 대입 종류를 구분해 사용할 때의 일반적인 가이드라인으로 올바른 것은?
  3. Verilog에서 "always @(*)"라고 쓰는 의미로 올바른 것은?
  4. 조합 회로를 의도하여 위와 같이 작성했다. 발생할 수 있는 문제로 올바른 것은?
  5. 조합 회로를 의도하여 위와 같이 작성하면 논리 합성으로 무엇이 만들어지는가?

이 분야의 비교