Kim Seon Deok

[Verilog] Structural modeling - module instance 본문

Verilog

[Verilog] Structural modeling - module instance

seondeok 2022. 12. 9. 02:54

 

 

 

 

  • gate level modeling
  • concurrent assignment
  • behavioral modeling 
  • structural modeling 

gate level modeling과 concurrent assignment는 조합회로를 구현하는 데 사용된다. 

behavioral moeling과 structural modeling은 대체로 조합회로와 순차회로를 구현하는 데 사용된다.

 

 

 

 

structural modeling

 

이미 만들어져 있는 모듈들을 불러와 더 큰 모듈을 설계하는 데 사용된다.

  • module instance
  • module parameter
  • generate statement

 

기본적인 모듈의 모습

테스트 벤치의 경우 포트목록이 생략될 수 있다.

테스트벤치가 아닌 모듈파일의경우, 포트목록에 포트 선언과 동시를 해주면 선언부에 재선언 하지 않아도 된다.

 

 

module instance

 

  • 모듈 포트 선언
module test (a,b,e,f) ;
	input            [7:0]   a   ;
	input  signed    [7:0]   b   ;  
	output           [7:0]   e   ;  
	output  signed   [7:0]   f   ;  
	reg              [7:0]   e   ;

input으로 포트 선언 했는데, input으로 재선언 하거나 output으로 같은 이름을 사용하면 안된다.

 

 

 

  • 모듈 인스턴스
모듈이름  [#(파라미터)]  인스턴스이름  [n:m]  (port mapping)  ;

다른 모듈의 인스턴스와 포트매핑을 통한 모델링

범위지정을 통해 인스턴스 배열을 생성할 수 있다.

인스턴스 이름은 생략할 수 없지만, gate primitive 인스턴스의 이름은 생략할 수 있다.

 

  • 포트 순서에 의한 포트 매핑
모듈이름  [#(파라미터)]  인스턴스이름  (신호이름,  신호이름,  신호이름)

모듈의 포트목록에 나열된 포트 순서와 1:1로 대응되어 연결된다.

포트에 연결되는 신호가 없을 땐 해당 위치를 빈칸으로 남겨둔다.

원래 모듈

module modb(wa,wb,c,d) ;
	inout   wa, wb     ;
	input 	a,  b      ;
    	
	trainf1       g1(wa, wb, cinvert)  ;
	not  #(2, 6)  n1(cinvert, int)     ;  // 상승엣지 2, 하강엣지 6
	and  #(6,5)   g2(int, c, d)        ;  // 상승엣지 6, 하강엣지 5
endmodule

원래 모듈과 인스턴스 모듈을 순서에 의해 매핑

본 모듈의 wa를 인스턴스의 v[0]과

본 모듈의 wb를 인스턴스의 v[1]과

본 모듈의 a를 인스턴스의 a와

본 모듈의 d를 인스턴스의 d와 연결한다.

module topmod  ;
	wire  [1:0]  v,w  ;
	
	modb  b1 (v[0], v[1], w[0], w[1])  ;   // modb모듈을 인스턴스 b1으로 선언
endmodule

 

 

 

 

 

  • 포트 이름에 의한 포트 매핑 → 권장하는 방식
모듈이름  [#(파라미터)]  인스턴스 이름  ( . 포트이름(신호이름),  . 포트이름(신호이름),  . 포트이름(신호이름)  )

포트 이름과 그 포트에 연결되는 신호 이름을 명시적으로 지정

포트의 비트 선택, 부분 선택, 결합 등을 사용할 수 없다.

. 본모듈 연결단자 (인스턴스 단자)

 

원래 모듈

module modb(wa,wb,c,d) ;
	inout   wa, wb     ;
	input 	a,  b      ;
    	
	trainf1       g1(wa, wb, cinvert)  ;
	not  #(2, 6)  n1(cinvert, int)     ;  // 상승엣지 2, 하강엣지 6
	and  #(6,5)   g2(int, c, d)        ;  // 상승엣지 6, 하강엣지 5
endmodule

본 모듈의 wa를 인스턴스의 v[0]과

본 모듈의 wb를 인스턴스의 v[1]과

본 모듈의 a를 인스턴스의 a와

본 모듈의 d를 인스턴스의 d와 연결한다.

module topmod ;
	wire  [1:0]  v,w  ;
                                                          // modb모듈을 인스턴스 b1으로 선언
	modb  b1(.wb(v[1]),  .wa(v[0]),  .d(w[1]),  .c(w[0])) ;  // 이름에 의한 포트 매핑
endmodule

 

 

 

동일 포트에 대해 중복으로 연결하면 오류가 발행한다.

module test  ;
	a   U0 (.i(a), .i(b), .o(c), .o(d), .e(e), e(f)) ;
endmodule

 

 

1비트 전가산기

 

1비트 전가산기의 모습

 

1비트 전가산기는 반가산기 2개의 or 게이트로 구성된다.

 

반가산기는 다음과 같다.

반가산기

module half_adder(a, b, sum, out)  ;
	input   a, b          ; 
	output  sum, out      ;


	xor   U0 (sum, a, b)      ;
	and   U1 (out, a, b )     ;
endmodule

 

 

반가산기 2개와 or 게이트를 각각 D1, D2,D3 로 인스턴스 이름을 갖게 하여 전가산기를 구성하도록 하면

moduel full_adder(a, b, cin, sum, out)  ;
	input a, b, cin                  ;
	output sum, cout                 ;
	wire temp_sum, temp_c1, temp_c2  ;

	half_adder D1(a, b, temp_sum, temp_c1)                          ;  // D1은 이름에 의한 포트연결
	half_adder D2(.a(temp_sum), .b(cin), .sum(sum), .cout(temp_c2)) ;  // D2는 순서에 의한 포트연결
	or         D3(cout, temp_c1, temp_c2)  ;  // D3는 gate primitive
endmodule

모듈과 포트이름이 같다면 회로에서 선으로 연결되었다는 뜻이다.

 

 

 

 

 

 

 

 

 

'Verilog' 카테고리의 다른 글

[Verilog] Structural modeling - Generate statement  (0) 2022.12.09
[Verilog] Structural modeling - module parameter  (0) 2022.12.09
[Verilog] 반복문  (0) 2022.12.09
[Verilog] if 문, case 문  (0) 2022.12.09
[Verilog] Behavioral modeling  (0) 2022.12.09
Comments