Menu
Coddy logo textTech

블로킹 할당

Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 49번째.

Verilog에는 두 가지 유형의 절차적 할당이 있습니다: 블로킹(=)과 논블로킹(<=)입니다. 이 레슨에서는 블로킹 할당에 초점을 맞춥니다.

Blocking assignment는 = 연산자를 uses합니다. 현재 assignment가 완료될 때까지 다음 문장의 실행을 차단하기 때문에 “블로킹”이라고 합니다. 코드는 step 단위로 순서대로 실행됩니다.

구문:

variable = expression;

Blocking Assignment를 사용하는 경우

Blocking assignment(=)는 조합 논리에 사용됩니다. 조합 논리란 입력이 변경될 때 출력이 즉시 변경되며, 클록과 메모리가 없는 회로입니다.

조합 논리의 예:

  • AND / OR / XOR 게이트
  • 가산기와 감산기
  • 멀티플렉서
  • 디코더

Verilog 예제:

always @(*) begin
  sum = a + b;      // 블로킹 할당
  carry = a & b;    // 블로킹 할당
end

Always 블록에서의 Blocking (조합 논리)

always @(*) begin
  temp = a & b;    // 1단계
  out = temp | c;  // 2단계 (1단계의 temp 사용)
end

순서가 중요합니다. 조합 논리에서는 문제가 없습니다.

Blocking 대 Non-Blocking

 Blocking (=)Non-Blocking (<=)
실행차례대로동시에
다음 줄이 기다리는가?예아니요
Uses조합 논리순차 논리 (플립플롭)

중요: 플립플롭에는 Blocking을 사용하지 마세요

challenge icon

챌린지

임시 변수를 사용하여 x와 y의 값을 교환하도록 누락된 blocking assignments를 추가하세요.

수행할 작업:

  1. Assign x의 값을 temp에 대입하세요 (x를 temp에 저장)
  2. Assign y의 값을 x에 대입하세요 (y를 x로 이동)
  3. Assign temp의 값을 y에 대입하세요 (saved x를 y로 이동)

직접 해보기

module swap;
  reg x, y;
  reg temp;
  
  initial begin
    x = 1;
    y = 0;
    
    $display("Before swap: x=%d, y=%d", x, y);
    
    // TODO: 1단계 - x를 temp에 할당
    
    // TODO: 2단계 - y를 x에 할당
    
    // TODO: 3단계 - temp를 y에 할당
    
    $display("After swap: x=%d, y=%d", x, y);
    $finish;
  end
endmodule
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨

직접 연습해 보세요: 온라인 Verilog 컴파일러