Level0_P12_verification_testbench
64
작성한 질문수 17
안녕하세요 🙂
[1. 질문 챕터] : testbench.v line 39 ~ 40
[2. 질문 내용] : 안녕하세요 ETA님 바쁘신데 고생 많으십니다. 해당 Code에서 enable을 blocking이 아닌 non-blocking을 설정한 이유로,
blocking 설정 시 @(posedge clk)와 같은 Active region(IEEE::event region)에 속하게 되어 tool에 따라 동작의 순서 여부가 달라진다고 말씀한게 맞는지 질문 드리고 싶습니다.
감사합니다. 좋은 하루 되세요.
답변 2
0
안녕하세요 항상 감사하면 살기 님.
네 맞습니다. @(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에 동료 학생들이 더 많은 정보를 제공할 수 있습니다. 언제든지 이어서 질문하세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
[HDL 32장-2부] 참고 링크 관련
1
35
2
강의 만료일 연장 신청
0
31
2
기초예제 파일 불러오기 문의
0
25
2
Zybo 환경에서 PL RTL UART 보드 검증 방법
0
30
2
혹시 별도의 자료가 있나요?
0
32
2
queue assignment pattern 문의 건
0
31
1
Mission 5 문의 건
0
44
2
Zynq z7 FPGA single-ended 관련
0
38
1
환불 문의
1
87
2
[LV1_P4_REGISTER ] Non-Blocking
1
47
2
조건문에서 if 연속 사용
1
58
2
vivado 설치
2
89
1
LV1-21 Edge Detector 구현 방법 질문
1
68
1
학교에서 사용하는 툴
1
74
2
[L1-P16 clog2 with memory] clog2 function 질문
1
93
4
fsm 설계 방식에 대한 질문
1
71
2
mobaxterm 완전 삭제법
1
224
2
155ns 타이밍 이슈에 관한 궁금증(?)
1
73
2
build 오류
1
84
2
VIVADO 환경
1
90
2
코딩테스트
1
73
2
vscode 환경세팅 방법
2
158
2
L1-P12 인터럽트 제어 질문
2
71
2
L0-P03 design에 예제 코드가 그대로 실려있습니다.
2
69
2





