Kim Seon Deok
[Verilog] Concurrent assignment 본문
- gate level modeling
- concurrent assignment
- behavioral modeling
- structural modeling
gate level modeling과 concurrent assignment는 조합회로를 구현하는 데 사용된다.
behavioral moeling과 structural modeling은 조합회로와 순차회로를 구현하는 데 사용된다.
assignment
- 연속 할당문(concurrent assignment) → net형 객체에 값을 할당(wire) → assign 문
- 절차형 할당문(procedural assignment) → variable형 객체에 값을 할당(reg, integer) → behavioral modeling 구문 중 initial, always 구문 내부에 있는 문장들을 말함
- blocking 할당문 → = 를 사용
- nonblocking 할당문 → <= 를 사용
- 절차형 연속 할당문(procedural continuous assignment : PCA) → assign-deassign문, force-release문
concurrent assignment (연속 할당문)
continuous = concurrent = 동시에, 병행의 → 여러개의 할당문을 동시에 실행할 수 있다는 뜻이다. 즉 순서의 영향을 받지 않는다.
assign문을 통해 net형 객체(wire)에 값을 할당한다.
우변의 값에 이벤트가 발생하면 좌변 객체의 값에 할당이 일어난다.
단순한 논리 표현을 이용한 조합논리회로 모델링에 이용된다.
assign [driving_strength] [delay] net_assignments ; |
assign은 연속할당문을 나타내는 기호
[driving_strength]는 구동세기를 뜻한다
[delay]는 생략 가능하며 # (정수 지연값)으로 표현한다.
wire mynet = enable & data ; // 자료형 선언과 동시에 할당문 표현
wire mynet ;
assign mynet = enable & data ; // wire 자료형을 갖는 객체만이 값을 할당받음
assign na = ~(in1 & in2) ; // 2 input nand
assign out = (sel==1) ? d1 : d0 ; // 2 to 1 MUX. d1이 sel == 1 이 참이면 d1, 거짓이면 d0
assign sum = a + b ;
tri [1:n] busout = enable ? data : zee ; // 연속 할당을 갖는 net 선언
// 4개의 assign문을 이용한 표현
assign data = (s == 0) ? bus0 : zee;
assign data = (s == 1) ? bus0 : zee;
assign data = (s == 2) ? bus0 : zee;
assign data = (s == 3) ? bus0 : zee;
// 하나의 assign문으로 4개의 연속할당을 표현
assign data = (s == 0) ? bus0 : zee;
data = (s == 0) ? bus0 : zee;
data = (s == 0) ? bus0 : zee;
data = (s == 0) ? bus0 : zee;
여러 개의 assign문을 하나의 assign선언으로 표현 가능하다.
할당지연과 net 지연
- 연속할당문의 지연값 지정
assign 뒤 # (정수값 지연) 을 사용해 지정한다.
우변 피연산자 값의 변화에서부터 그 값이 좌변에 할당되기까지의 시간 간격을 지정한다.
지연값은 simulation 과정에만 반영되고, 회로 합성에는 반영되지 않는다.
assign #10 wirea = a & b ; // a & b가 발생한 시점부터 10ns 이후 wirea에 값 할당
wire #10 wirea = a & b ; // 함축적 연속 할당문의 지연
- net 지연
wire #10 wirea ; // 10ns 가 지난 후 할당 이루어짐
- 관성 지연
지정된 지연값보다 입력신호의 변화 폭이 작은 경우, 입력신호의 변화가 출력에 영향을 미치지 않는다.
module inertial_begin_delay();
reg a,b ;
assign #30 wirea = a & b ; // 할당된 지연
intial begin
a = 1'b0 ;
b = 1'b0 ;
#50 a = 1'b1 ;
b = 1'b1 ;
#50 a = 1'b1 ;
b = 1'b0 ;
#50 a = 1'b1 ;
b = 1'b1 ;
#20 b = 1'b0 ; // 할당된 지연 30ns보다 작아 무시된다.
#50 ;
endmodule
'Verilog' 카테고리의 다른 글
[Verilog] Behavioral modeling (0) | 2022.12.09 |
---|---|
[Verilog] Procedural assignment (2) | 2022.12.08 |
[Verilog] Gate level modeling (0) | 2022.12.08 |
[Verilog] Operator (0) | 2022.12.08 |
[Verilog] Logic status, Data type (0) | 2022.12.08 |
Comments