Verilog에서 값을 할당하는 구문은 Continuous Assignment와 Procedural Assignment 두 가지가 있다. 각 할당문과 그 차이에 대해서 알아보자.
1. Continuous Assignment - 연속 할당
" Net형 객체에 값을 할당하는 구문 "
Continuous assignment 연속 할당문은 assign문을 통해 net형 객체에 값을 할당한다. =의 우변에 값의 변화가 생기면, 즉 이벤트가 발생하면 좌변의 객체에 그 값을 할당하게 된다.
모든 continuous assignment는 우선순위가 없이 우변의 이벤트에 따라 수행되기 때문에, 할당문의 기술순서가 시뮬레이션 결과에 영향을 끼치치 않는다.
연속 할당문을 사용하여 조합논리회로인 combinational logic을 구현한다.
(예시1 - 명시적 연속 할당문)
wire net_a;
assign net_a = en & data; // en과 data 값에 변화가 생기면 net_a에 값이 할당된다.
(예시2 - 암시적 연속 할당문)
wire net_a = en & data; // 예시1과 동일한 기능을 한다.
2. Procedural Assignment - 절차형 할당
" 변수에 값을 할당하는 구문 "
Procedural assignment 절차형 할당문은 always/initial block, task, function 등의 procedural block을 통해 벡터나 스칼라 변수에 값을 할당한다. Continuous assignment와 달리 procedural assignment는 데이터 값의 변화가 아닌 해당 구문이 실행됨에 따라 값이 할당된다. 즉, 우변에 이벤트가 발생하여도 해당 구문이 실행되지 않으면 좌변 객체의 값은 변하지 않는다.
Procedural block 내에서 procedural assignment는 순서대로 수행된다. 따라서 할당문의 순서가 중요하다.
Procedural assignment는 blocking assignment와 non-blocking assignment로 나뉜다.
(예시 - initial/always block)
reg a;
initial begin // initial block - 초기값 설정
a = 1'b0;
end
always begin // always block - 주기 신호 생성
# 50 a = ~a;
end
'공부 기록 > 회로설계' 카테고리의 다른 글
[Verilog] reg vs wire - reg와 wire의 차이점 (0) | 2022.05.05 |
---|---|
[Verilog] Blocking Assignment vs Non-Blocking Assignment - 베릴로그 절차형 할당문의 종류 (0) | 2022.04.21 |
[HDL] Behavioral Model vs Structural Model (0) | 2022.04.06 |
조합 논리회로 vs 순차 논리회로 - Combinational vs Sequential Logic Circuit (0) | 2022.04.03 |
플립플롭과 래치의 공통점과 차이점 - FlipFlop vs Latch (0) | 2022.04.03 |