#7. 연속할당문(assign문)/절차형할당문
Verilog/Verilog HDL강의정리(KOCW) 2023. 7. 20. 00:191. 할당문
할당문에는 두가지 방법이 존재한다. 하나는 연속할당문, 나머지 한가지는 절차형 할당문이라고 한다.
하나씩 알아보도록 하자
1-1. 연속할당문(Concurrent assignment)
net형(wire) 객체에 값을 할당하는 방식으로, assign문을 활용한다. 할당 구문을 살펴보면
[delay] : 앞서 봤듯이 #3 ,#5 이렇게 ns 단위로 delay를 설정할 수 있다.(생략가능)
연속할당문의 경우 우변의 값의 변화가 발생했을 때, 좌변의 객체에 값의 할당이 일어난다, 단순한 논리 표현으로 구성되는 조합회로 모델링에 사용하게 된다. 예시를 보면
wire mynet; //wire 선언
assign mynet = enable & data; //my net에 enable & data를 할당
//즉, input이 enable, data 이고, output이 mynet인 and 게이트가 형성된다.
위 예시를 살펴보면 좀 더 이해가 갈 것이다.
앞서 배운 gate primitive로 생성도 가능하다.
연속할당문을 활용하여 한가지 예시를 더 살펴보도록 하겠다.
module adder (sum_out, carry_out, carry_in, ina, inb);
input [3:0] ina, inb; //4bit input 과 1비트 carry 선언
input carry_in;
output [3:0] sum_out; //4bit ouput 과 1비트 carry 선언
output carry_out;
assign {carry_out, sum_out} = ina + inb + carry_in;// assign 문을 활용하여, 5비트의 출력을 할당
endmodule
위 코드는 4비트 가산기를 작성한 것이다. ina, inb 가 각각 4비트로 입력되며, carry in 을 통해 입력 총합이 sum out과 carry out의 합산으로 출력이 발생하게 된다.(assign 옆의 중괄호 결합 연산자에 유의하자)
추가적으로 delay 에 관해 이야기 하자면, 만약 assign #10 a= b&c 라는 구문이 있다고 하자.
그렇다면 b&c가 연산된 이후 10ns 이후에 a에 값이 할당된다는 것을 의미한다. 이 역시 시뮬레이션 상에서만 반영되고, 합성시에 회로에 반영되는 것은 아니다.
또한, assign 문의 경우 순서에 회로가 상관없이 동일하게 그려진다.(하드웨어적인특성)
1-2. 절차형할당문(Procedural Assignment)
variable 형 객체(reg, integer, real, realtime등)에 값을 할당하는 방식으로, always, initial, task, function 내부에서 사용하는 할당문이다.
assign문과 달리 순서가 바뀌면 회로가 바뀔 수 있으며, 문장이 실행이 되어야 좌변에 값이 할당되게 된다.(소프트웨어적인 특성) 예시를 하나 살펴보자.
module proc_assignment(clk, a, b, out);
input clk, a, b;// input, output reg 선언
output out;
reg out, c; //always 안에서 쓰이므로 reg 선언
always@(posedge clk) begin
c=a&b; //blocking assignment
out<=c; //non-blocking assignment
//순서가 중요하다, C에 먼저 a&b가 할당되고, 이후 다음문장인
//out에 C가 할당된다.
end
endmodule
여기서는 blocking과 non-blocking 할당문으로 나뉘게 되는데, blocking의 경우 = 을, non- blocking의 경우 =>를 활용하여 값을 할당하게 된다.
always 구문에서는 현재 clk가 상승엣지 일때(0->1) 아래 문장들을 실행하게 되는데, 현재 상황에서는 상승엣지가 발생했을 경우, c=a&b가 할당되고, 할당된 c 값이 out에 바로 할당되게 된다.
만약 이 두 문자의 순서를 바꿔 out <=c 가 먼저 실행된다고 생각해보자, 그렇다면 상승엣지가 발생했을 때, out에 c가 넘어가지만, 이 c는 앞선 상승엣지에서 c=a&b에 의해 할당된 c값이 out에 할당되는 것이다.
앞의 상황과는 달리, 이전상황이 c값이 회로에 반영된다는 것이다. 이를 회로로 나타내면
================추후 클럭그림과 회로 그림삽입예정=====================
1-3. 절차형 연속 할당문(Procedural Continuous Assignment)
예외적인 케이스로 볼 수 있으며, assign-deassign문, force-relase문이 존재한다.
이번 글에서는 조합회로를 구성하는 연속할당문 위주로 설명한 것으로, 절차형 할당문에 대해서는 추후 행위수준모델링 글에서 좀 더 자세히 다루도록 하겠다.
#8-1. 동기식 vs 비동기식, blocking vs non-blocking(수정중) (0) | 2023.07.21 |
---|---|
#8. 행위수준모델링(Behavioral modeling)-always문 (0) | 2023.07.21 |
#6. Gate-level modeling(게이트수준 모델링) (0) | 2023.07.18 |
#5. Verilog HDL의 연산자 (0) | 2023.07.17 |
#4. Verilog HDL 자료형 (0) | 2023.07.16 |