Multiplexer는 여러개의 input들(신호) 중에서 select값에 따라서 input의 값 중 몇개를 골라서(select)를 해서 output으로 출력하게 하는 장치입니다. 이를 MUX로 부르기도 합니다. MUX와 역할이 반대인 demultiplexer, DEMUX도 존재합니다.
verilog HDL로 코딩을 할 예정입니다.
Verilog HDL(베릴로그)는 회로와 시스템에 사용되는 하드웨어 언어로, 회로설계, 검증, 구 현 등 다양한 용도로 사용가능하다고 합니다.. 베릴로그는 다른 High level 언어보다는 디자인이나 시뮬레이션이 느리지만, 이해하기 쉽게 섬세하다는 장점이있어, 디자인과 관리하기 보다 친숙합니다. instance라는 표현을 주석에 자주 사용할 예정인데, instance는 함수를 호출하는것이라고 생각하면 될것 같습니다.
위의 회로도를 보면 and게이트2개, or게이트1개, not게이트가 1개가 필요한것을 볼 수 있습니다.
하지만 이렇게 사용하는것 보다 n-mos, p-mos구조까지 간다면 not게이트1개에 nand게이트 3개를 사용해서 구현할 수 있습니다. 기존에 사용하는 2input and, or게이트는 트랜지스터의 갯수가 6개가 들어갑니다.(2 input nand, nor(트랜지스터의 갯수가 4개)에서 not gate(트랜지스터의 갯수가 2개)를 붙임)그래서 nand gate만 사용한다면 위의 회로도와 비교했을때 트랜지스터의 갯수가 줄어드는것을 계산으로 알 수 있습니다.
어떻게 줄일것이냐?
(not gate를 인버터라고 부르겠습니다.)
인버터 앞에 있는 버블을 보면 버퍼에 버블이 붙은거랑 똑같은것을 확인할 수 있습니다.
그러한 버블을 pushing을 해주는 이론이 있는데, 그것은 아래 사이트의 그림을 확인을 해서, 조금의 트랜지스터의 갯수를 더 아낄 수 있습니다.
https://grace.bluegrass.kctcs.edu/~kdunn0001/files/Simplification/4_Simplification10.html
module mx2(y, d0, d1, s);//2-to-1 mux module
output y;
input d0, d1, s;
wire w0, w1, sb;
_inv iv0(sb, s);//instance inverter into iv0
_nand2 nd20(w0, d0, sb);//instance 2input_nand into nd20
_nand2 nd21(w1, d1, s);//instance 2input_nand into nd21
_nand2 nd22(y, w0, w1);//instance 2input_nand into nd22
endmodule//endmodule
module _nand2(y,a,b);//2input_nand module
input a,b;
output y;
assign y = ~(a & b);//assign 2input_nand
endmodule//endmodule
module _inv(y,a);//inverter module
input a;
output y;
assign y = ~a;//assign inverter
endmodule//endmodule
이렇게 2input nand게이트와 인버터를 설계하고, instance를 해서 완성할 수 있습니다.
D-FlipFlop (0) | 2022.06.22 |
---|---|
ALU(Arithmetic Logic Unit) (0) | 2022.01.17 |
blocking 과 non-blocking assignment의 차이 (0) | 2022.01.06 |
CLA(carry-look-ahead) (0) | 2022.01.05 |
RCA(Ripple Carry Adder) (0) | 2022.01.04 |
댓글 영역