![[23] Verilog HDL 순차회로 설계과제 (COMPARATOR, TRI-STATE)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzWmUP%2FbtruI8hYeP4%2FJkIpRx00UlUhKTMUwAzP9k%2Fimg.jpg)
★ 일반적으로, 데이터 버스에는 다수의 신호원들이 연결되므로 버스의 부하 용량이 매우 커지게 되고 따라서 시스템의 동작속도를 저하시키는 주요한 원인 중 하나가 된다. 버스에 대한 부하용량을 감소시키기 위해 다음과 같이 멀티플렉서를 이용하여 신호원을 선택한 후 버스에 연결하는 방식이 사용된다. 그림의 버스 드라이버를 조건 연산자를 사용하여 모델링 하고, 시뮬레이션을 통해 검증한다. 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..
![[22] Verilog HDL 조합회로 구현 (COMPARATOR, TRI-STATE)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGT0FU%2FbtruAsnbZIw%2FiirLNxjhMcmx8xSodNAFtk%2Fimg.png)
★ 비교기 비교기는 두 입력의 상대적인 크기를 비교하는 회로이며, 관계연산자, 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문 사..
![[21] Verilog HDL 조합회로 설계과제 (Decoder, Encoder)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7ISVc%2Fbtru8vIRmj8%2FQkK88TSihFepARYtLi509K%2Fimg.png)
★ 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..
![[20] Verilog HDL 조합회로 구현 (ENCODER, DECODER)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF6bFT%2Fbtru2vJjTql%2FruD2IdNEMfU1DNRIe5CJN1%2Fimg.png)
★ 인코더 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 : ..
![[19] Verilog HDL 조합회로 설계과제1 (NAND, NOR, BOOL, TRUTH TABLE, MUX)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDVQ3D%2Fbtru5cJxlLw%2FhOmshvVTlRSYvfjdVfXLR1%2Fimg.png)
★ 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..
![[18] Verilog HDL 조합회로 구현(NAND, NOR, BOOL, TRUTH TABLE, MUX)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvkaG2%2FbtruTEU4zA8%2FRzssMMEawas0SI3Tk0sJt1%2Fimg.png)
조합회로 조합논리회로는 현재 인가되고 있는 입력에 의해서만 출력이 결정되는 회로이며, 과거의 입력이나 출력, 현재 상태 등을 저장하는 소자(래치, 플립플롭)를 포함하지 않는 회로이다. 디지털 시스템 설계에는 기본 논리 게이트부터 멀티플렉서, 인코더/디코더, 가산기/감산기, 등의 기능블록, lookup테이블 및 랜덤 로직 등 매우 다양한 조합논리회로들이 사용된다. ★ 조합논리회로의 올바른 HDL 모델링을 위한 유의사항 ① always구문을 이용한 행위수준 모델링에서 always블록의 감지신호 목록에 회로의 입력신호들이 빠짐없이 들어가야한다. ② if 조건문과 case문에서 모든 입력 조건들에 대한 출력값이 명시적으로 지정되어야 한다. 만약 그렇지 안은 경우에는 논리합성 과정에서 래치가 생성되어 조합논리회로..