Blocking Assignment와 Non-Blocking Assignment의 차이에 대해 설명하시오.
하드웨어 기술 언어(HDL, 예: Verilog)에서 디지털 논리 회로를 설계할 때는 값을 할당하는 방식에 따라 동작 해석이 달라지며, 대표적으로 블로킹 할당(Blocking Assignment) 과 논블로킹 할당(Non-Blocking Assignment) 이 있다.
블로킹 할당 (Blocking Assignment): 현재 문장이 실행되면 값이 즉시 반영되고, 그 다음 문장이 순차적으로 실행되는 방식이다. 따라서 코드가 작성된 순서대로 동작하며, 앞 문장의 실행이 끝나기 전까지 다음 문장은 기다리게 된다. 이러한 특성 때문에 일반적으로 조합 논리 회로(Combinational Logic) 를 기술할 때 사용된다.
예시)
a = 5;
c = a;
먼저 a = 5가 실행되어 a의 값이 즉시 5가 되고, 그 다음 c = a;가 실행되므로 c도 5가 된다.
논블로킹 할당 (Non-Blocking Assignment): 현재 문장에서 값을 즉시 바꾸는 것이 아니라, 현재 시점의 값을 기준으로 계산한 뒤 갱신을 예약하고, 해당 시점이 끝날 때 한꺼번에 반영하는 방식이다. 따라서 여러 할당문이 동시에 갱신되는 하드웨어의 특성을 잘 모델링할 수 있으며, 일반적으로 순차 논리 회로(Sequential Logic) 를 설계할 때 사용된다.
예시)
a의 초기값이 3이라고 가정하면
a <= 5;
c <= a;
이 경우 a <= 5;는 a를 5로 갱신하도록 예약하고, c <= a;는 변경되기 전의 a 값인 3을 기준으로 예약하므로, 최종적으로 a는 5, c는 3이 된다.
커뮤니티 Q&A
위 이론과 관련된 게시글이에요.
이해가 안 되거나 궁금한 점이 있다면 커뮤니티에 질문해 보세요!
게시글 작성하기