★ 일반적으로, 데이터 버스에는 다수의 신호원들이 연결되므로 버스의 부하 용량이 매우 커지게 되고 따라서 시스템의 동작속도를 저하시키는 주요한 원인 중 하나가 된다. 버스에 대한 부하용량을 감소시키기 위해 다음과 같이 멀티플렉서를 이용하여 신호원을 선택한 후 버스에 연결하는 방식이 사용된다. 그림의 버스 드라이버를 조건 연산자를 사용하여 모델링 하고, 시뮬레이션을 통해 검증한다. enable_a = 1이면 data_a가 버스로 출력되고, enable_b =1이면 data_b가 버스로 출력되며, enable_a와 enable_b가 동시에 1이 되는 경우에는 bus_data를 high-impedance가 된다. 데이터는 8bit으로 설계한다. // 설계과제 10.9 module multiplexed(data..
★ 비교기 비교기는 두 입력의 상대적인 크기를 비교하는 회로이며, 관계연산자, if조건문, for반복문 등을 이용하여 모델링될 수 있다. module comp_assign(a,b,agtb,altb,aeqb); //1. 관계연산자 사용. input [3:0] a,b; output agtb,altb,aeqb; assign agtb = (ab); assign aeqb = (a==b); // 2. if문 사용 input [3:0] a,b; output reg agtb,altb,aeqb; always@(*)begin altb =1'b0; agtb =1'b0; aeqb =1'b0; if(a==b) agtb=1'b1; else if(a>b) altb=1'b1; else agtb=1'b1; end //3. for문 사..
★ Active-low enable신호를 갖는 4 : 2 이진 인코더를 다음의 방법으로 모델링하고 시뮬레이션을 통해 검증한다. enable신호가 0이면 인코더의 출력도 0이 되도록 한다. ① case문을 사용하는 방법 ② if 조건문을 사용하는 방법 ③ for 반복문을 사용하는 방법 // 설계과제 10.6 module en_encoder(en, a, y); input en; input [3:0] a; output reg [1:0] y; // 1. case문 사용. always@(*)begin if(!en) y=2'b0; else begin case(a) 4'b0001 : y = 2'b00; 4'b0010 : y = 2'b01; 4'b0100 : y = 2'b10; 4'b1000 : y = 2'b11; d..
★ 인코더 n : m 2진 인코더는 n-비트의 입력을 m비트의 출력으로 변환 시키는 회로이다. (n=2**m) 4:2 이진 인코더의 진리표는 다음과 같으며, 입력에는 단지 하나의 1만 포함되어야 한다. 인코더회로는 if조건문, case문, for 반복문 등 여러 가지 방법으로 모델링될 수 있다. case문을 사용한 모델링은 if조건문보다 논리적인 이해가 명확하다. for 반복문은 입력의 비트 수가 큰 경우 또는 입출력 비트 수를 파라미터화하여 모델링하는 경우에 사용될 수 있다. module enc_4to2(a,y); // 1. case문 사용. input [3:0] a; output reg [1:0] y; always @(*) begin case(a) 4'b0001 : y=2'b00; 4'b0010 : ..
★ 3입력 NOR 게이트를 다음과 같은 3가지 방식으로 모델링하고, 테스트벤치를 작성하여 기능을 검증한다. ① 비트 연산자를 사용하는 방법 ② 축약 연산자를 사용하는 방법 ③ if 조건문을 사용하는 방법 // 설계과제 10.1 module nor_test (a,y); input [2:0] a; output y; // 1. 비트 연산자 활용 assign y = ~(a[0]|a[1]|a[2]); // 2. 축약연산자 활용 assign y = ~|a; // 3. if 조건문 활용 reg y; always @ ( * ) begin if(a = 3'b111) y = 0; else y =1; end endmodule // nor_testa,y ▣ TESTBENCH // 설계과제 10.1 testbench modul..
조합회로 조합논리회로는 현재 인가되고 있는 입력에 의해서만 출력이 결정되는 회로이며, 과거의 입력이나 출력, 현재 상태 등을 저장하는 소자(래치, 플립플롭)를 포함하지 않는 회로이다. 디지털 시스템 설계에는 기본 논리 게이트부터 멀티플렉서, 인코더/디코더, 가산기/감산기, 등의 기능블록, lookup테이블 및 랜덤 로직 등 매우 다양한 조합논리회로들이 사용된다. ★ 조합논리회로의 올바른 HDL 모델링을 위한 유의사항 ① always구문을 이용한 행위수준 모델링에서 always블록의 감지신호 목록에 회로의 입력신호들이 빠짐없이 들어가야한다. ② if 조건문과 case문에서 모든 입력 조건들에 대한 출력값이 명시적으로 지정되어야 한다. 만약 그렇지 안은 경우에는 논리합성 과정에서 래치가 생성되어 조합논리회로..