개인 공부/회로
[digital] 게이트수준 모델링
KimuGamJa
2024. 12. 19. 21:52
지난번에 이어, Verilog HDL을 이용한 여러 모델링과 문법을 자세히 살펴보자!
첫 번째는 "게이트 수준" 모델링 이다.
게이트 수준 모델링
- 디지털 회로 설계에서 가장 낮은 수준의 추상화 방식 중 하나로, 논리 게이트를 사용하여 하드웨어 동작을 표현하는 방식
- Verilog에서 제공하는 내장 게이트 프리미티브(Primitive)를 사용하여 회로를 직접 구상한다.
- 실제 하드웨어 구현과 매우 밀접하게 매핑된다.
ex) 전가산기(Full Adder)의 게이트 수준 모델링
module full_adder (
input wire A, // 첫 번째 입력 비트
input wire B, // 두 번째 입력 비트
input wire Cin, // 이전 자리에서 넘어온 Carry
output wire Sum, // 결과 비트
output wire Cout // 다음 자리로 넘어갈 Carry
);
wire xor1_out; // A와 B의 XOR 결과
wire xor2_out; // (A XOR B)와 Cin의 XOR 결과
wire and1_out; // A와 B의 AND 결과
wire and2_out; // (A XOR B)와 Cin의 AND 결과
// A와 B의 XOR
xor (xor1_out, A, B);
// (A XOR B)와 Cin의 XOR
xor (Sum, xor1_out, Cin);
// A와 B의 AND (중간 Carry)
and (and1_out, A, B);
// (A XOR B)와 Cin의 AND
and (and2_out, xor1_out, Cin);
// 최종 Carry 출력
or (Cout, and1_out, and2_out);
endmodule
⇒ 여기서 xor, and, or 과 같은 것은 Verilog에서 제공하는 내장 프리미티브로, 바로 사용 가능하다.
📌 Verilog에서는 게이트 수준 모델링과 스위치 수준 모델링을 위한 논리 게이트와 스위치 프리미티브를 제공한다.
💡프리미티브(Primitive)?
Verilog에서 미리 정의된 디지털 회로의 기본 구성 요소로 추가 정의 없이 바로 사용할 수 있다.
즉, 설계자가 직접 정의하지 않아도 Verilog에서 기본적으로 제공하는 미리 정의된 논리 회로 구성 요소들.
[특징]
- 미리 정의된 요소 : 설계자가 논리 게이트의 동작을 정의할 필요 없이 사용할 수 있다.
- 내장된 동작: 기본 논리 게이트의 동작이 이미 구현되어 있어 바로 사용할 수 있다.
- 단순성: 낮은 수준의 설계에 적합하며, 게이트 수준 모델링에 주로 사용된다.
- 확장 불가: 사용자 정의 프리미티브는 지원되지 않는다.
- 선언 : 사용자 정의 모듈과 달리, 입력/출력을 명시적으로 선언하지 않아도 된다.
- 모듈화 : 프리미티브는 모듈처럼 인스턴스화하여 사용 된다.
내장 프리미티프
특징 | 스위치 수준 | 게이트 수준 |
추상화 수준 | 하드웨어(트랜지스터) 수준 | 논리 게이트 수준 |
주요 프리미티브 | NMOS, PMOS, CMOS, TRAN, TRANIF | and, or, not, nand, nor, xor, xnor, buf |
모델링 대상 | 트랜지스터와 전압/전류 흐름 | 논리적 연산 및 신호의 상태 |
복잡성 | 높은 복잡도 (물리적 동작 모델링) | 낮은 복잡도 (추상적 동작 모델링) |
사용 사례 | 아날로그 회로, 트랜지스터 동작 | 디지털 회로 설계, 논리 동작 모델링 |
물리적 특성 고려 | O (전압, 전류, 저항, 부동 상태 모델링) | X (논리적 상태만 고려) |
유용성 | 트랜지스터 수준의 디테일 설계 | 디지털 회로의 논리적 동작 설계 |
1. 게이트 수준 모델링 논리 게이트
- 추상화된 논리 동작을 모델링
- 기본 논리 게이트(AND, OR, NOT 등)를 사용하여 디지털 회로의 논리적 관계를 설계
- 신호의 논리적 상태(0, 1)만 고려하며, 전류나 전압과 같은 물리적인 값은 고려하지 않는다.
1.1 기본 논리 게이트
게이트 | 설명 | 구문 |
and | AND 게이트 | and (out, in1, in2); |
or | OR 게이트 | or (out, in1, in2); |
xor | XOR 게이트 | xor (out, in1, in2); |
nand | NAND 게이트 | nand (out, in1, in2); |
nor | NOR 게이트 | nor (out, in1, in2); |
xnor | XNOR 게이트 | xnor (out, in1, in2); |
not | NOT 게이트 (인버터) | not (out, in); |
📌 지연 연산자 # 을 이용하여 출력 전달 지연을 지정할 수 있다. ⇒ 논리게이트 #(상승지연, 하강지연)
ex1) and #(2, 4) (out, in1, in2); // 상승 지연 2ns, 하강 지연 4ns 설정
ex2) or #5 (out, in1, in2); // 값을 하나만 작성하면 상승 지연, 하강 지연 시간이 동일하게 적용
1.2 버퍼 및 고임피던스 제어 게이트
게이트 | 설명 | 구문 |
buf | 버퍼 | buf (out, in); |
not | NOT 버퍼 (인버터) | not (out, in); |
bufif0 | 제어 신호가 0일 때 활성화되는 버퍼 | bufif0 (out, in, ctrl); |
bufif1 | 제어 신호가 1일 때 활성화되는 버퍼 | bufif1 (out, in, ctrl); |
notif0 | 제어 신호가 0일 때 활성화되는 NOT 게이트 | notif0 (out, in, ctrl); |
notif1 | 제어 신호가 1일 때 활성화되는 NOT 게이트 | notif1 (out, in, ctrl); |
📌 버퍼는 인버터가 짝수개 연결된 것과 논리적으로 등가이다. (입력 == 출력)
📌 not 게이트 = 인버터와 동일하다.
2. 스위치 수준 모델링 스위치 프리미티브
- 하드웨어 레벨에서 신호의 경로를 정의할 때 사용한다.
- 트랜지스터(NMOS, PMOS)와 스위치 역할에 초점을 맞추어 회로 동작을 모델링한다.
- 전류 흐름, 전압, 및 물리적 연결을 기반으로 동작한다.
2.1 전송 스위치 (Transmission Switches)
스위치 | 설명 | 구문 |
cmos | CMOS 스위치 | cmos (out, in, nctrl, pctrl); |
rcmos | 저항성 CMOS 스위치 | rcmos (out, in, nctrl, pctrl); |
tran | 전송 게이트 | tran (out1, out2); |
rtran | 저항성 전송 게이트 | rtran (out1, out2); |
2.2 트라이 상태 스위치 (Tri-State Switches)
스위치 | 설명 | 구문 |
tranif0 | 제어 신호가 0일 때 활성화되는 전송 게이트 | tranif0 (out1, out2, ctrl); |
tranif1 | 제어 신호가 1일 때 활성화되는 전송 게이트 | tranif1 (out1, out2, ctrl); |
rtranif0 | 제어 신호가 0일 때 활성화되는 저항성 전송 게이트 | rtranif0 (out1, out2, ctrl); |
rtranif1 | 제어 신호가 1일 때 활성화되는 저항성 전송 게이트 | rtranif1 (out1, out2, ctrl); |
2.3 고정 상태 스위치 (Pull Control Switches)
스위치 | 설명 | 구문 |
nmos | NMOS 트랜지스터 | nmos (out, in, ctrl); |
pmos | PMOS 트랜지스터 | pmos (out, in, ctrl); |
rnmos | 저항성 NMOS 트랜지스터 | rnmos (out, in, ctrl); |
rpmos | 저항성 PMOS 트랜지스터 | rpmos (out, in, ctrl); |
2.4 풀업 및 풀다운 저항
스위치 | 설명 | 구문 |
pullup | 신호를 논리 1(Vdd)에 연결하는 저항 | pullup (out); |
pulldown | 신호를 논리 0(Gnd)에 연결하는 저항 | pulldown (out); |