Kim Seon Deok

[Verilog] Concurrent assignment 본문

Verilog

[Verilog] Concurrent assignment

seondeok 2022. 12. 8. 23:18

 

  • 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