Non Blocking Assignment
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 50번째.
이전 레슨에서는 단계별로 실행되는 blocking assignment(=)을 다뤘습니다. 이제 한 번에, 병렬로 실행되는 non-blocking assignment(<=)을 다루겠습니다.
Non-blocking 할당은 <= 연산자를 uses. 다음 문장의 실행을 차단하지 않기 때문에 “non-blocking”이라고 합니다. 블록 내의 All non-blocking 할당은 동시에 실행됩니다.
구문:
variable <= expression;Non-Blocking Assignment를 사용하는 경우
Non-blocking assignment(<=)는 순차 논리에 사용됩니다. 순차 논리란 클록을 사용하고 메모리를 갖는 회로입니다. 출력은 클록 edge(일반적으로 상승 edge)에서만 변경됩니다.
순차 논리의 예:
- 플립플롭
- 레지스터
- 카운터
- 상태 머신
- 시프트 레지스터
Verilog 예시:
initial begin
a <= 5; // 스케줄되었지만 아직 실행되지 않음
b <= a + 2; // 스케줄됨, a의 이전 값을 사용
c <= b * 3; // 스케줄됨, b의 이전 값을 사용
endAll 세 할당은 old values를 사용하여 at the same time 발생합니다. time step의 end에는 모든 업데이트가 함께 발생합니다.
Always 블록에서의 Non-Blocking (순차 논리)
Non-blocking은 순차 논리에 사용됩니다. 순차 논리란 클록을 사용하고 메모리를 가지는 회로(플립플롭, 레지스터, 카운터)입니다.
always @(posedge clk) begin
q <= d; // 클록 에지에서 q가 d를 받음
count <= count + 1; // 클록 에지에서 count가 증가함
end두 할당은 모두 클록 edge 이전의 값을 사용하여 동시에 수행됩니다.
요약
| 규칙 | 설명 |
|---|---|
순차 논리에는 <= 사용 | always @(posedge clk) |
조합 논리에는 = 사용 | always @(*) |
| Non-blocking은 병렬로 실행됨 | 모든 할당이 한 번에 발생함 |
| 값은 시간 단계가 끝날 때 업데이트됨 | 즉시 업데이트되지 않음 |
챌린지
non-Blocking Assign 완료하기
이 2비트 시프트 레지스터가 작동하도록 누락된 non-blocking 할당을 Add하세요.
작동 방식:
- 각 clock edge에서
q1은d를 gets q2는q1의 old 값을 gets
해야 할 작업:
d를q1에 Assign (non-blocking)q1을q2에 Assign (non-blocking)
직접 해보기
module shift_register (
input clk,
input reset,
input d,
output reg q1,
output reg q2
);
always @(posedge clk or posedge reset) begin
if (reset) begin
q1 <= 0;
q2 <= 0;
end else begin
// TODO: 시프트 로직 추가
// 1단계: d를 q1에 할당 (non-blocking)
// 2단계: q1을 q2에 할당 (non-blocking)
end
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic직접 연습해 보세요: 온라인 Verilog 컴파일러