인프런 커뮤니티 질문&답변
Level0_P12_verification_testbench
작성
·
7
0
안녕하세요 🙂
[1. 질문 챕터] : testbench.v line 39 ~ 40
[2. 질문 내용] : 안녕하세요 ETA님 바쁘신데 고생 많으십니다. 해당 Code에서 enable을 blocking이 아닌 non-blocking을 설정한 이유로,
blocking 설정 시 @(posedge clk)와 같은 Active region(IEEE::event region)에 속하게 되어 tool에 따라 동작의 순서 여부가 달라진다고 말씀한게 맞는지 질문 드리고 싶습니다.
감사합니다. 좋은 하루 되세요.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 항상 감사하면 살기님
Verilog에서 blocking(=)과 non-blocking(<=) 할당은 신호의 배치를 다르게 처리합니다. 일반적으로, non-blocking 할당은 동시적인 레지스터 업데이트를 구현하는 데 사용됩니다. 이로 인해 모든 관련 신호가 같은 클럭 에지에서 동시에 업데이트되도록 보장할 수 있습니다.
Active region(IEEE::event region)와 관련하여, blocking 할당을 사용할 경우 특정 툴에 의해 신호의 업데이트 순서가 달라질 수 있으며, race condition이 발생할 수 있습니다. 예를 들어, 다음과 같은 상황에서는 차이가 있습니다:
always @(posedge clk) begin
a = b; // blocking
c = a; // blocking
end
위와 같은 코드는 ‘b’의 값이 레지스터 ‘a’에 먼저 할당된 다음, ‘a’의 값이 ‘c’에 할당됩니다. 그러나, non-blocking 할당을 사용하면:
always @(posedge clk) begin
a <= b; // non-blocking
c <= a; // non-blocking
end
이 코드에서는 ‘a’와 ‘c’에 대해 동시 업데이트가 발생하게 됩니다. 따라서 모든 레지스터는 동일한 클럭 에지에서 업데이트되며, race condition을 피할 수 있습니다.
관련된 질문은 설계독학’s Verilog 마스터 Season 1에 동료 학생들이 더 많은 정보를 제공할 수 있습니다. 언제든지 이어서 질문하세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




