반응형
게이트 및 스위치 프리미티브
predefined 프리미티브
- 정의나 선언 없이 사용 가능
- 단일 출력을 가짐
- 모듈 내에서만 사용 가능 >> initial 과 always 구문 내부에서는 사용 불가
게이트 프리미티브
인스턴스 구문
primitive_gate_name [#(n1,n2)][instance_name](output, input1, ..); // [ ] 안에 있는건 생략 할 수 있다는 뜻 // instance_name은 내가 지을 게이트의 이름 |
- #(n1,n2) : 게이트 프리미티브의 지연. default 지연값은 0 >>n1 : 상승지연(0에서 1로 변할 때), n2 : 하강지연 (1에서 0으로 변할 때) >>min(n1, n2) : 출력이 x (unknown : 0과 1의 중간으로 표현)로 변할 때의 지연 (turn off 지연 이라고 한다.)
- instance name : instance _ name : 생략 가능
- 포트 연결 : 순서에 의한 매핑만 사용 가능 (이름에 의한 포트 매핑 불가능) 출력 포트가 처음에 오며, 입력 신호들은 임의의 순서로 나열
ex)
and U1(out1, a, b); // 2입력 and 게이트 nand (out2, a, b); // 인스턴스 이름을 생략한 경우 or U3(out3, a, b, c); // 3입력 or 게이트 nor #(2) U4(out4, a, b); // 2입력 nor 게이트 , 상승 하강 turnoff 모두 지연시간 2 xor #(3, 4) U5(out5, c, b, a); // 3입력 xor 게이트 , 상승지연 3, 하강지연 4 xnor U6(out6, a, b); // 2입력 xnor 게이트 nor #2 G5(y5, a0, a1), (y6, a1, a2), (y7, a2, a3) // 지연시간 소괄호 생략하여 사용 가능 , multiple instantiations // 한번에 3개의 nor게이터 선언 , 1개만 인스턴스 name 줬음 |
buf와 not 게이트 프리미티브
- 하나의 입력 , 하나 또는 그 이상의 출력
- 포트매핑 : 출력 포트 먼저 지정 , 그 뒤에 입력 포트 지정
buf 게이트 (buffer) : 논리 값 그대로 , 그럼 왜 써 ? >> 전기적으로 볼때 output에서 나오는 전류의 양을 많게 만든다. 전류의 양을 많게 만드는 목적은 ? >> output에서 나오는 값을 여러군데(여러 gate)에서 쓰려고 할 때 이것들이 정상적으로 작동하기 위한 최소한의 전류가 필요
전류가 필요
not 게이트 : 논리 값 반대로 , not 게이트도 위와 같이 전류 목적으로 쓸 때가 있다.
buf 와 not은 지연을 3개 까지 표시가능 > buf # (d1, d2, d3) 상승,하강,turn off 지연
buf 와 not은 입력이 1개이고 출력은 여러개 일 수 있다. >> buf # (d1,d2,d3) b1(out1, out2, in);
3상태 버퍼 프리미티브
- 포트 연결 : 순서에 의한 매핑만 사용 가능 출력 포트, 데이터 입력 포트, 제어 입력 포트의 순서로 매핑
- 3개의 지연값 지정 : #(n1, n2, n3) n1 : 상승지연, n2 : 하강지연, n3 : z , n3 : z로 변할 때의 지연 min(n1, n2, n3) : 출력이 x로 변할 때의 지연
- 2개의 지연값 지정 : #(, ) n1 n2 n1 : 상승지연, n2 : 하강지연 min(n1, n2) : 출력이 x 또는 z로 변할 때의 지연 >> turn off지연일 때는 n1,n2중 작은 값 쓴다.
bufif 0은 control 입력을 반대로 주는 것 >> 0일때 연결 , 1일때 차단
논리 게이트 인스턴스의 배열
- 게이트 인스턴스의 배열 : 인스턴스의 이름 뒤에 배열의 범위를 지정하여 반복 횟수를 표현
ex )
nand #2 t_nand[ 0:7 ] ( . . . ); nand #2 t_nand[ 0:3 ] ( . . . ), t_nand[ 4:7 ]( . . . ); // syntax error , 동일한 이름으로 이어서 선언 불가능 nand #2 x_nand[ 0:3 ] ( . . . ), y_nand[ 4:7 ]( . . . ); // 서로 다른 이름으로 선언하면 가능 |
bufif0 ar[3:0](out, in, en); // 3상태 버퍼의 배열 // 이것을 풀어서 쓰면 bufif0 ar3(out[3], in[3], en); // 3상태 버퍼의 개별적인 인스턴스 bufif0 ar2(out[2], in[2], en); bufif0 ar1(out[1], in[1], en); bufif0 ar0(out[0], in[0], en); |
게이트 지연과 net 지연
게이트 지연 (위 게이트 프리미티브에서 지연 그려 놓은 것)
- 게이트의 입력에서부터 출력까지의 신호 전달지연 (propagation delay)
- 상승지연, 하강지연, 턴-오프 (turn-off) 지연
- defualt 값은 0
net 지연
- net를 구동하는 driver의 값이 변하는 시점부터 net의 값이 갱신되는 시점까지 소요되는 시간
- 상승지연, 하강지연, 턴-오프 (turn-off) 지연
- defualt 값은 0
관성지연 ( inertial delay )
- 지정된 지연 값보다 입력 신호의 변화 폭이 작은 경우에는 입력 신호가 출력에 영향을 미치지 않음 >> 지연 시간중에 ( 상태변화가 완료되기 전에 ) 입력 신호가 먼저 원래 대로 돌아오면 값이 변하기 전에 다시 원래 값으로 상태를 변화시켜서 출력에 영향을 미치지 않게 되는 것
- Verilog HDL의 default 지연
반응형
'study > Logic Circuit' 카테고리의 다른 글
행위수준 모델링 (0) | 2020.10.26 |
---|---|
할당문 (0) | 2020.10.25 |
Verilog 연산자 (0) | 2020.10.10 |
Verilog 자료형 (0) | 2020.10.08 |
Verilog HDL 개요 , 회로설계 모델링, 어휘 규칙 (0) | 2020.10.07 |