Kim Seon Deok
[Verilog] Structural modeling - module instance 본문
- 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비트 전가산기는 반가산기 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 |