본문 바로가기

정보/코딩

Verilog Non Blocking 과 Blocking 의 차이

반응형

 
오늘은 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

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."