
오늘은 verilog를 하면 가장 먼저 배우게 되는 blocking과 non blocking의 차이에 대해 알아보려 합니다.
Verilog에서 Blocking 과 Non Blocking가 중요한 이유
1. 동기식 vs. 비동기식 동작: Blocking은 동기식 동작을 모델링하며, 모든 작업이 순차적으로 수행됩니다. Non-blocking은 비동기식 동작을 모델링하며, 여러 작업이 동시에 진행될 수 있습니다.
2. 시뮬레이션 정확성: Blocking assignment을 잘못 사용하면 시뮬레이션 결과가 실제 하드웨어와 일치하지 않을 수 있습니다. Non-blocking assignment를 사용하면 시뮬레이션 결과가 더 정확하게 표현됩니다.
3. 병렬 처리와 성능 최적화: Non-blocking assignment를 사용하면 병렬 처리를 활용하고 성능을 최적화하는 데 도움이 됩니다. 특히 대규모 디지턈 회로를 설계할 때 중요합니다.
Blocking Assignment
Blocking assignment는 순차적으로 실행되며, 하나의 레지스터나 와이어에 값을 할당하고 해당 작업이 완료될 때까지 다음 명령어가 실행되지 않습니다. 이것은 순차적이며 작업이 한 번에 하나씩 처리되므로 동기식 동작을 모델링하는 데 사용됩니다.
module BlockingExample;
reg a, b;
initial begin
a = 1; // 값을 1로 변경
b = a; // a의 현재 값인 1을 b에 할당
$display("a = %d, b = %d", a, b);
end
endmodule
Blocking Assignment의 결과는 "a = 1, b = 1"입니다.
Non-Blocking Assignment
Non-blocking assignment는 병렬로 실행되며, 여러 레지스터나 와이어에 값을 할당하고 다음 명령어가 즉시 실행됩니다. Non-blocking assignment를 사용하면 여러 레지스터 또는 와이어에 대한 병렬 동작을 모델링할 수 있습니다. 주로 조합 논리 블록을 모델링하는 데 사용됩니다.
module NonBlockingExample;
reg a, b;
always @(posedge clock) begin
a <= 1; // 값을 1로 변경
b <= a; // a의 이전 상태인 0을 b에 할당
$display("a = %d, b = %d", a, b);
end
Non-Blocking Assignment의 결과는 "a = 1, b = 0"입니다. (b 값 초기화가 되지 않았다는 점은 양해 부탁 드립니다)
COUPANG
쿠팡에서 추천합니다!
www.coupang.com
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'정보 > 코딩' 카테고리의 다른 글
구글 컨솔 의미 장점 SEO를 위한 필수 도구 (0) | 2023.10.31 |
---|---|
리다이렉트의 의미 사용 예시 및 설정방법 알아보기 (0) | 2023.10.30 |
바드 빙과 챗지피티 특징 장단점 분석 (0) | 2023.10.30 |
크롤링이란? 의미와 방법 예시 알아보기 (0) | 2023.10.29 |
RSS, XML 의미와 예시로 이해하기 (0) | 2023.10.28 |