강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của alswnsworkout6072
alswnsworkout6072

câu hỏi đã được viết

Verilog Master Season 1 của 설계독학 (Tự học thiết kế) (Bước nhảy vọt trong sự nghiệp kỹ sư thiết kế kỹ thuật số hoàn thiện thông qua các bài toán kiểm tra lập trình thực tế)

[L0-P12] Viết Testbench - Kiểm chứng DUT bộ đếm 4-bit

Level0_P12_verification_testbench

Viết

·

56

1

안녕하세요 🙂

[1. 질문 챕터] : testbench.v line 39 ~ 40

[2. 질문 내용] : 안녕하세요 ETA님 바쁘신데 고생 많으십니다. 해당 Code에서 enable을 blocking이 아닌 non-blocking을 설정한 이유로,
blocking 설정 시 @(posedge clk)와 같은 Active region(IEEE::event region)에 속하게 되어 tool에 따라 동작의 순서 여부가 달라진다고 말씀한게 맞는지 질문 드리고 싶습니다.

감사합니다. 좋은 하루 되세요.

 

verilog-hdlsystem-verilog

Câu trả lời 2

0

ETA님의 프로필 이미지
ETA
Người chia sẻ kiến thức

안녕하세요 항상 감사하면 살기 님.

네 맞습니다. @(posedge clk) 과 blocking이 둘다 Active region 에서 발생하며 Active region 에서의 스케쥴링(순서)는 툴마다 다른것으로 알고있습니다.

그래서

@(posedge clk);

enable = 1;

이 경우는 툴에 따라

  • Pre-clock 인식: TB assign → DUT read (DUT가 enable=0 읽음)

  • Post-clock 인식: DUT read → TB assign (DUT가 enable=1 읽음)

위와 같이 될 수 있습니다.

그래서 의도에 맞게 입력을 주기 위해선 non-blocking을 이용해 NBA region 으로 지연시킵니다.

 

참고로, TMI이긴하지만 제가 첫 회사에 다닐때(약 10년전 2015~2016) 라이센스 비용이슈로 ncsim 에서 vcs로 옮기면서 testbench에서 이 이슈로 인해서 시뮬레이션이 정상 동작이 안되어서 툴에 따른 디펜던시를 없에기위해서 blocking 위주로 돌던 환경을 전부 non-blocking 환경으로 변경했던 기억이 있네요.

 

설계독학 열혈 수강생이신 항상 감사하면 살기 님, 좋은 질문 감사합니다.

또 궁금하신 점이 있으면 질문 부탁드려요

 

감사합니다. 새해 복 많이 받으세요.

 

 

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에 동료 학생들이 더 많은 정보를 제공할 수 있습니다. 언제든지 이어서 질문하세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của alswnsworkout6072
alswnsworkout6072

câu hỏi đã được viết

Đặt câu hỏi