study/Logic Circuit

게이트 수준 Modeling

jjikky 2020. 10. 10. 19:19
반응형

게이트 및 스위치 프리미티브

predefined 프리미티브

  • 정의나 선언 없이 사용 가능 
  • 단일 출력을 가짐
  • 모듈 내에서만 사용 가능 >>  initial 과 always 구문 내부에서는 사용 불가

Verilog에서 제공되는 게이트 및 스위치 프리미티브

 


 

게이트 프리미티브

인스턴스 구문

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);

bufif0 ar[3:0](out, in, en);

 

 


 

게이트 지연과 net 지연

 

게이트 지연     (위 게이트 프리미티브에서 지연 그려 놓은 것)

  • 게이트의 입력에서부터 출력까지의 신호 전달지연 (propagation delay)
  • 상승지연, 하강지연, 턴-오프 (turn-off) 지연
  • defualt 값은 0

net 지연     

  • net를 구동하는 driver의 값이 변하는 시점부터 net의 값이 갱신되는 시점까지 소요되는 시간
  • 상승지연, 하강지연, 턴-오프 (turn-off) 지연
  • defualt 값은 0

관성지연 ( inertial delay )

  • 지정된 지연 값보다 입력 신호의 변화 폭이 작은 경우에는 입력 신호가 출력에 영향을 미치지 않음                      >> 지연 시간중에 ( 상태변화가 완료되기 전에 ) 입력 신호가 먼저 원래 대로 돌아오면 값이 변하기 전에 다시 원래 값으로 상태를 변화시켜서 출력에 영향을 미치지 않게 되는 것
  • Verilog HDL의 default 지연
반응형