[Verilog] "="(blocking)과 "<="(non-blocking) 할당의 차이Digital Circuit/HDL(Verilog, VHDL)2025. 2. 25. 00:01
Table of Contents
반응형
안녕하세요.
Verilog에서는 값을 할당할 때 =(blocking assignment)과 <=(non-blocking assignment) 두 가지 방법이 있습니다.
이 둘의 차이를 잘 이해하지 못하면 예상치 못한 버그가 발생할 수 있으므로, 개념과 차이점을 확실히 정리해보겠습니다.
※1. = (Blocking Assignment)
🔹 순차적으로 실행됨 (이전 연산이 완료된 후 다음 연산 실행)
🔹 조합 논리 또는 초기화에 사용

< = 사용 예제 (순차 실행) >
always @(posedge clk) begin
a = b; // b의 값을 a에 즉시 할당
c = a; // a의 현재 값을 c에 즉시 할당
end
[ 실행 과정 ]
- b의 값이 a에 복사됨
- a가 변경된 후 c = a;가 실행됨
- 따라서, c는 변경된 a 값을 받음
➡ 즉, =는 한 줄씩 순차적으로 실행되기 때문에 예상한 값과 다를 수 있음
※2. <= (Non-Blocking Assignment)
🔹 동시에 실행됨 (즉, 모든 연산이 끝난 후 값을 업데이트)
🔹 순차 논리(Sequential Logic)에 사용 (플립플롭 동작)

< <= 사용 예제 (병렬 실행) >
always @(posedge clk) begin
a <= b; // 클럭이 올라갈 때 a에 b 값 할당
c <= a; // 클럭이 올라갈 때 c에 a 값 할당
end
[ 실행 과정 ]
- 현재 b의 값을 a에 할당 (즉시 반영되지 않음)
- 현재 a의 값을 c에 할당 (즉시 반영되지 않음)
- 모든 할당이 끝난 후 한 번에 업데이트됨
➡ 즉, <=는 모든 연산이 동시에 수행된 후 최종적으로 업데이트되므로, 예상한 값이 보장됨
※3. = vs <= 차이 정리
내용~
| 비교 항목 | = (Blocking) | <= (Non-Blocking) |
| 실행 방식 | 순차 실행 (하나씩) | 병렬 실행 (한 번에) |
| 사용 위치 | 조합 논리(Combinational) | 순차 논리(Sequential) |
| 실행 예제 | a = b; c =a; | a <= b; c <= a; |
| 값 업데이트 | 즉시 반영 | 모든 연산 후 동시에 반영 |
[핵심 요약]
1) 조합 논리에는 =(Blocking) 사용
2) 순차 논리에는 <=(Non-Blocking) 사용
3) <=를 사용하면 병렬 실행이 되어 예상치 못한 버그를 방지할 수 있음
이상으로 Verilog의 Blocking과 Non-Blocking에 대해 마치겠습니다. 감사합니다.

반응형
'Digital Circuit > HDL(Verilog, VHDL)' 카테고리의 다른 글
| [Verilog] if문과 case문 형태 (0) | 2025.03.01 |
|---|---|
| [Verilog] assign, initial, always문의 차이 (0) | 2025.03.01 |
| [Verilog] 연속할당문(Continuous Assignment) VS 절차할당문(Procedural Assignment)의 차이 (1) | 2025.02.26 |
| [Verilog] wire와 reg 차이점 완벽 정리 (0) | 2025.02.24 |
| Verilog vs VHDL: 차이점과 특징 비교 (2) | 2025.02.24 |
@SEMICIRCUIT :: SEMICIRCUIT
전자공학 블로그에 오신 것을 환영합니다! 최신 기술 동향, 회로 설계, 반도체 및 전자 부품에 대한 유용한 정보와 실습 팁을 제공합니다.