본문 바로가기

FPGA

[FPGA] Combinational Logic과 기초 Verilog 문법 익히기 (3)

반응형

 이번 포스팅에서는 기본적인 Combinational Logic들을 살펴보도록 하겠습니다. 총 5개의 로직들이 있습니다. 함께 알아보시죠!

 

1. Half Adder

Schematic Truth Table

 

 첫 번째로 살펴볼 회로는 "Half Adder(반가산기)"입니다. Half Adder는 1비트 이진수 두 개를 더한 합(Sum, S)과 자리올림 수(Carry, C)를 구하는 회로입니다. Truth Table로 유도한 논리식과, 이에 따른 로직은 왼쪽 그림 Schematic과 같습니다. 

 

 

 

 

 

2. Full Adder

Schematic Truth Table

 

 두 번째로 살펴볼 회로는 "Full Adder(전가산기)"입니다. Full Adder는 자리올림수 입력(Cin), 1비트 이진수 두 개를 입력받아 총 3개의 이진수를 더하여 합(S)과 자리올림수 출력(Cout)을 구하는 회로입니다. Schematic 사진에는 다소 복잡해 보일 수 있지만, 2개의 half adder와 1개의 OR 게이트로 구성된다고 생각하면 구조를 파악하기에 더 쉬울 것이라 생각합니다.

 

2.1. Half Adder vs Full Adder 정리

 

 Half adder와 Full adder의 차이점은, 자리올림수를 입력으로 받는지에 대한 여부입니다. 일반적으로 n-bits adder를 만들 때는, 가장 낮은 비트 연산에만 half adder를 사용하고 나머지 자리에는 full adder를 사용합니다. 물론 이는 n-bits adder의 세부적인 구조에 따라 차이가 날 수 있습니다. 

 

 

 

 

 

3. Decoder

Schematic Truth Table

 

 세 번째로 알아볼 회로는 "Decoder(디코더, 해독기)"입니다. Decoder는 암호화된 입력 신호를 해독하여 출력하는 회로입니다. n개의 신호를 입력받아 2^n개의 출력선 중 하나를 활성화시킵니다. 그림에 나와 있는 회로는, 수많은 Decoder 중 가장 대표적인 Line Decoder를 나타낸 것입니다. 그림에서는 2개의 신호를 입력받아 2^2=4개의 출력선 중 하나를 활성화시켜서 출력하는 동작을 수행하고 있습니다.

 Decoder는 입력선의 n비트 2진 코드를 최대 2^n가지 정보로 바꿔줍니다. 따라서 Decoder는 일반적으로 (n, 2^n)의 입/출력 크기를 갖는다고 생각하시면 됩니다. 그 이유는, 1bit 입력 하나가 bit, bit_b의 두 가지 가짓수를 생성하기 때문입니다. 

 

 

 

 

 

4. Multiplexer

Schematic Truth Table

 

 네 번째로 알아볼 회로는 "Multiplexer(MUX, 멀티플렉서)"입니다. Multiplexer는 Selection bits에 따라 여러 개의 입력 중 하나의 신호를 선택하여 출력하는 회로입니다. 많은 입력 중 하나를 선택하므로 "Data selector(데이터 선택기)"라고도 불립니다. Multiplexer를 사용하면 MUX-DEMUX 연결을 통해 여러 연결선을 하나의 신호 채널로 담을 수 있습니다. 따라서 경제적인 관점에서 유리하다고 볼 수 있습니다. 

 

2.1. Verilog 관점에서의 MUX

if~ else~ 구문 case 구문

 

 여기서 잠깐 Verilog 이야기를 하고 넘어가겠습니다. Verilog에서는 두 가지 방식을 통해 MUX를 생성할 수 있습니다. 바로 if~else~ 구문과 case 구문인데요. 우리가 C언어 프로그래밍을 배울 때, 여러 경우를 구분하는 방법으로 if~else~/case문을 배웠습니다. Verilog에서도 동일하게 적용됩니다.

 다만 회로 합성 결과는 if~else~ 구문과 case 구문이 서로 다릅니다. 일반적으로 case 구문이 더 효율적이기 때문에 더 많이 사용됩니다. 그 이유는, case 구문의 회로 합성 결과가 더 간단하기 때문입니다. 위 그림에서 확인할 수 있듯이, if~else 구문을 합성하면 n-input에 대해 (n-1)개의 stage를 생성합니다. 즉, critical logic path가 매우 길어져 신호 전달 시간이 증가하고, 이는 회로 성능(speed)을 퇴보시킵니다. 반면 case 구문을 합성하면 n-input에 대해 log2(n)개의 stage를 생성합니다. 즉, stage 개수가 감소하여 상대적으로 speed가 더 빠릅니다. 

 결론적으로 MUX 생성 시 case 구문을 사용하는 것이 if~else~ 구문을 사용하는 것보다 더 효율적입니다.

 

 

 

 

 

5. Buffer

Schematic Truth Table

 

 마지막으로 살펴볼 회로는 "Buffer(버퍼)"입니다. Buffer는 입력 신호를 그대로 출력해주는(Input = Output) 회로입니다. 이렇게만 보면 '이걸 왜 사용해....?' 라고 생각하실 수 있습니다. 하지만 Buffer는 매우 중요한 회로 중 하나입니다. 그 이유는 크게 2가지입니다. 함께 살펴보시죠.

 

5.1. Fan-Out 한계 극복

Logic Gate Driving N Number of Loads Logic Gate with a Buffer Driving N Number of Loads

 

 첫 번째 이유는 fan-out(팬아웃) 한계를 극복하기 위해서입니다. "Fan-Out"이란, 한 개의 논리 게이트 출력에 연결할 수 있는 다른 게이트의 입력의 개수입니다. 논리 게이트의 출력은 특정 전압 수준을 유지해야 하는데, 너무 많은 게이트에 연결되면 출력 전압이 약해지거나 왜곡될 수 있습니다. 즉, 출력 전압이 낮아지면 신호가 제대로 전달되지 않을 수 있습니다. 이것이 바로 Fan-Out maximum 개념입니다.

 논리 게이트가 다른 게이트로 신호를 보낼 때, 그 출력은 일정한 전류를 소모합니다. 즉, "게이트가 출력 전류를 얼마나 공급(또는 소모)할 수 있는가"가 fan-out을 결정짓는 요소입니다. 만약 너무 많은 게이트를 연결하면 출력이 과부하가 걸려서 신호의 전압 레벨이 떨어지게 됩니다. 

 이러한 문제를 해결하기 위해 디지털 회로에서 Buffer를 사용합니다. Buffer는 출력 전류를 증폭합니다. 따라서 더 많은 게이트에 신호를 전달할 수 있도록 합니다. 이 동작이 가능한 이유는, Buffer가 트랜지스터로 구성되기 때문입니다. 대부분의 digital buffer는 CMOS(상보형 금속산화반도체) 구조를 사용합니다. CMOS는 P형 트랜지스터(PMOS)와 N형 트랜지스터(NMOS)가 함께 사용되는 회로입니다. 이 때 입력 신호는 전류를 직접 사용하는 것이 아닌, 트랜지스터의 문턱 전압만 넘겨주는 역할을 합니다. 따라서 Buffer는 입력 신호의 전류를 크게 증가시키지 않으면서 출력에 더 많은 전류를 제공할 수 있습니다.

 

5.2. Tri-state Buffer

Symbol Truth Table

 

 두 번째 이유는 "Tri-state Buffer(3상 버퍼)"입니다. Tri-state Buffer는 기본적으로 일반 buffer와 동일하게 입력 신호를 받아 그대로 출력합니다. 하지만 추가적인 제어 입력(Enable)으로 출력 신호를 제어할 수 있습니다. 제어 입력이 활성화되면(En=1), tri-state buffer는 일반 buffer처럼 동작하여 입력 신호를 그대로 출력합니다. 그러나 제어 입력이 비활성화되면(En=0), tri-state buffer는 출력을 Hi-Z(고임피던스) 상태로 전환합니다. 

 High-Z 상태는, 출력이 마치 회로에서 물리적으로 연결되지 않은 상태처럼 동작하는 것을 의미합니다. 즉, 출력이 0 또는 1이 아닌 상태로, 출력 회로에 전기적인 영향을 주지 않는 상태가 됩니다. 이를 통해 버퍼는 출력 신호를 아예 끊어버리는 것처럼 동작합니다. 즉, 출력이 사실상 "꺼져 있는" 상태로 간주할 수 있습니다.

 그렇다면 이와 같은 동작이 왜 필요할까요? 이는 입/출력이 명확하지 않은 회로 구조에서 필요하기 때문입니다. 대표적인 예가 바로 "Bus 구조"입니다. Bus 구조는 컴퓨터, 전자 시스템 등에서 여러 구성 요소들(CPU, Memory, I/O 장치 등)이 데이터를 주고받기 위해 하나의 통신 경로를 사용하는 방식입니다. Bus 구조는 하나의 공용 회로망을 통해 여러 장치들이 정보를 교환할 수 있도록 하는 구조입니다. 여러 장치들이 하나의 bus를 공유하므로, 한 번에 하나의 장치만 bus를 사용할 수 있습니다. 동시에 여러 장치가 bus를 사용하려고 하면 신호 충돌이 발생할 수 있습니다.

 이러한 동작을 위해 Tri-state Buffer가 존재합니다. Tri-state Buffer를 사용하면, 필요한 순간에만 신호를 전송하고 나머지 시간에는 Hi-Z 상태로 만들어 다른 장치들이 해당 라인을 사용할 수 있게 합니다.

반응형