Upload
isaiah
View
156
Download
0
Embed Size (px)
DESCRIPTION
조합논리회로 모델링. Sun, Hye-Seung. 조합논리회로 모델링. 조합논리회로의 형태와 설계에 사용되는 Verilog 구문. 조합논리회로 모델링. 조합논리회로 모델링 시 유의사항 always 구문 감지신호 목록 (sensitivity list) 에 회로 ( 즉 , always 블록으로 모델링되는 회로 ) 의 입력신호들이 빠짐없이 모두 포함되어야 함 그렇지 않은 경우 ; 합성 전과 합성 후의 시뮬레이션 결과가 다를 수 있음 if 조건문과 case 문 - PowerPoint PPT Presentation
Citation preview
한밭대학교 반도체설계실
Hanbat National University Prof. Lee Jaeheung
조합논리회로 모델링조합논리회로 모델링
Sun, Hye-SeungSun, Hye-Seung
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
조합논리회로 모델링
조합논리회로의 형태
∙논리 게이트∙Multiplexer∙Encoder∙Decoder∙Random Logic
∙Adder∙Subtractor∙ALU∙Lookup Table∙Comparator
조합논리회로 설계에사용되는 Verilog 구문
∙게이트 프리미티브∙ 연속 할당문 (assign 문 )∙행위수준 모델링 (if 문 , case 문 , for 문 )∙함수 및 task ( 시간 또는 event 제어를 갖지 못한다 )∙모듈 인스턴스
논리합성이 지원되지 않는 Verilog 구문
∙initial 문∙ 스위치 프리미티브 (cmos, nmos, tran 등 )∙forever, while, repeat 등의 반복문∙wait, event, 지연 등 타이밍 제어 구문∙force-release, fork-join∙시스템 task ($finish, $time 등 )
조합논리회로의 형태와 설계에 사용되는 Verilog 구문
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
조합논리회로 모델링 조합논리회로 모델링 시 유의사항
◆ always 구문 감지신호 목록 (sensitivity list) 에 회로 ( 즉 , always 블록으로 모델링되는
회로 ) 의 입력신호들이 빠짐없이 모두 포함되어야 함
그렇지 않은 경우 ; 합성 전과 합성 후의 시뮬레이션 결과가 다를 수 있음
◆ if 조건문과 case 문 모든 입력 조건들에 대한 출력값이 명시적으로 지정되어야 함
그렇지 않은 경우 ; 래치가 생성되어 순차논리회로가 될 수 있음
◆ 논리 최적화가 용이한 구조와 표현을 사용 최소의 게이트 수와 최소 지연경로를 갖는 회로가 합성되도록 해야 함
◆ 소스코드가 간결해지도록 모델링 소스코드의 가독성 (readability) 을 좋게 하여 오류 발생 가능성을 줄여 주고 ,
디버깅을 용이하게 하여 설계 생산성을 높여 줌
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.1 기본 논리게이트 모델링 4 입력 NAND 게이트
module nand4_op1(a, y); input [3:0] a; output y;
assign y = ~(a[0] & a[1] & a[2] & a[3]); // 비트 연산자// assign y = ~&a; // 축약 연산자// nand U0(y, a[0], a[1], a[2], a[3]); // 게이트 프리미티브
endmodule
a[0]a[1]a[2]a[3]
y
코드 10.1 ~ 10.3
비트 연산자 , 축약연산자 , 게이트 프리미티브
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.1 기본 논리게이트 모델링 4 입력 NAND 게이트
module nand4_if(a, y); input [3:0] a; output y; reg y;
always @(a) begin if(a == 4'b1111) y = 1'b0; else y = 1'b1; endendmodule 코드 10.4
if 조건문
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.1 기본 논리게이트 모델링 4 입력 NAND 게이트 ( 테스트벤치 )
module tb_nand4; reg [3:0] a; wire y; integer i; nand4_op1 U0(a, y);// nand4_op2 U0(a, y);// nand4_gate U0(a, y);// nand4_if U0(a, y); initial begin a = 0; for(i=1; i < 32; i=i+1) #20 a = i; end endmodule 코드 10.5
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.1 기본 논리게이트 모델링
4 입력 NAND 게이트의 시뮬레이션 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.1 기본 논리게이트 모델링
3 입력 NOR 게이트를 아래의 방식으로 모델링하고 ,
테스트벤치를 작성하여 기능을 검증
① 비트단위 연산자를 사용하는 방법
② 축약 연산자를 사용하는 방법
③ 게이트 프리미티브를 사용하는 방법
④ if 조건문을 사용하는 방법
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.2 멀티비트 논리연산의 모델링 4 비트 2 입력 NOR 게이트
module nor_op(a, b, y); input [3:0] a, b; output [3:0] y;
assign y = ~(a | b);
// assign y[0] = ~(a[0] | b[0]); // assign y[1] = ~(a[1] | b[1]);// assign y[2] = ~(a[2] | b[2]);// assign y[3] = ~(a[3] | b[3]);
endmodule 코드 10.6
a[3:0]b[3:0]
y[3] y[2] y[1] y[0]
비트 연산자
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.2 멀티비트 논리연산의 모델링 4 비트 2 입력 NOR 게이트
module nor_gate(a, b, y); input [3:0] a, b; output [3:0] y;
nor U0 [3:0](y, a, b);
endmodule 코드 10.7
module nor_for(a, b, y); input [3:0] a, b; output [3:0] y; reg [3:0] y; integer i;
always @(a or b) begin for(i=0; i < 4; i=i+1) y[i] = ~(a[i] | b[i]); endendmodule 코드 10.8
게이트 프리미티브 배열
for 반복문
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.2 멀티비트 논리연산의 모델링
4 비트 2 입력 XOR 게이트를 아래의 방식으로 모델링하고 ,
테스트벤치를 작성하여 기능을 검증
① 비트단위 연산자를 사용하는 방법
② 게이트 프리미티브를 사용하는 방법
③ for 반복문을 사용하는 방법
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.3 부울함수의 모델링 부울함수의 모델링
edcbay )()(
module comb_gate(a, b, c, d, e, y); input a, b, c, d, e; output y;
assign y = ~((a | b) &(c | d) & e);
endmodule 코드 10.10
비트 연산자
edcbay
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.4 진리표의 모델링 진리표의 모델링
module booth_enc(xin, y, y2, neg); input [2:0] xin; output y, y2, neg; reg [2:0] tmp;
assign y = tmp[2]; assign y2 = tmp[1]; assign neg = tmp[0];
always @(xin) begin case(xin) 0 : tmp = 3'b000; 1,2 : tmp = 3'b100; 3 : tmp = 3'b010; 4 : tmp = 3'b011; 5,6 : tmp = 3'b101; 7 : tmp = 3'b001; endcase endendmodule 코드 10.11
case 문
xin[2:0] y y2 neg
000 0 0 0
001 1 0 0
010 1 0 0
011 0 1 0
100 0 1 1
101 1 0 1
110 1 0 1
111 0 0 1
표 10.2 Booth 인코딩 진리표
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.4 진리표의 모델링 진리표의 모델링
module tb_booth_enc; reg [2:0] xin; wire y, y2, neg; integer i; booth_enc U0(xin, y, y2, neg); initial begin xin = 0; for(i=1; i < 16; i=i+1) #20 xin = i; end endmodule 코드 10.12
테스트벤치
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.4 진리표의 모델링시뮬레이션 결과
그림 10.6 코드 10.11 의 합성 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.4 진리표의 모델링
아래의 진리표를 Verilog HDL 로 모델링하고 , 테스트벤치를 작성하여 기능을 검증
xin[2:0] yz y2 neg add
000 0 1 0 1
001 1 0 0 0
010 1 0 0 0
011 1 1 0 0
100 1 1 1 1
101 1 0 1 1
110 1 0 1 1
111 0 1 1 1
표 10.3 Booth 인코딩 진리표 (2)
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.5 Lookup Table 의 모델링 Lookup Table
◆ 회로 동작에 필요한 많은 양의 고정된 데이터 값을 저장하기 위해
사용되는 조합논리회로 블록
◆ 함수를 이용하여 독립된 파일로 모델링되고 , 소스코드에서 lookup
테이블 함수를 호출하여 저장된 데이터를 읽어내는 방법을 사용
◆ 저장될 데이터들을 case 문으로 표현
lookup 테이블의 주소가 case 문의 조건으로 사용
n- 비트의 주소를 갖는 lookup 테이블은 최대 개의 데이터를 저장n2
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.1.5 Lookup Table 의 모델링 Lookup Table 의 모델링 ( 함수 이용 )
18
function [7:0] data_line1; input [3:0] addr_in;
begin case(addr_in) 0 : data_line1 = 8'b0010_0000; 1 : data_line1 = 8'b0100_0100; 2 : data_line1 = 8'b0110_1001; 3 : data_line1 = 8'b0110_0111; . . . . . . 14 : data_line1 = 8'b0110_1110; 15 : data_line1 = 8'b0010_0000; default : data_line1 = 8'b0000_0000; endcaseendendfunction 코드 10.13
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.2 멀티플렉서 4 비트 4:1 멀티플렉서
◆ 4 개의 4 비트 입력 중에서 하나를 선택하여 출력
◆ if 조건문 , case 문 , 조건연산자 등을 이용하여 모델링
module mux41_if(sel, a, b, c, d, y); input [1:0] sel; input [3:0] a, b, c, d; output [3:0] y; reg [3:0] y;
always @(sel or a or b or c or d) begin if (sel == 2'b00) y = a; else if(sel == 2'b01) y = b; else if(sel == 2'b10) y = c; else if(sel == 2'b11) y = d; else y = 4'bx; endendmodule 코드 10.14
if 조건문
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.2 멀티플렉서 모델링 4 비트 4:1 멀티플렉서
module mux41_case(sel, a, b, c, d, y); input [1:0] sel; input [3:0] a, b, c, d; output [3:0] y; reg [3:0] y;
always @(sel or a or b or c or d) begin case(sel) 0 : y = a; 1 : y = b; 2 : y = c; 3 : y = d; default : y = 4'bx; endcase endendmodule 코드 10.15
case 문
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.2 멀티플렉서 모델링 4 비트 4:1 멀티플렉서
module mux41_conop(sel, a, b, c, d, y); input [1:0] sel; input [3:0] a, b, c, d; output [3:0] y;
assign y =(sel == 0) ? a : (sel == 1) ? b : (sel == 2) ? c : (sel == 3) ? d : 4'bx;endmodule 코드 10.16
조건 연산자
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.2 멀티플렉서 모델링 4 비트 4:1 멀티플렉서
module tb_mux41; reg [3:0] a, b, c, d; reg [1:0] sel; wire [3:0] y;
mux41_if U0(sel, a, b, c, d, y);// mux41_case U0(sel, a, b, c, d, y);// mux41_conop U0(sel, a, b, c, d, y); initial begin a = 4'b0001; b = 4'b0010; c = 4'b0100; d = 4'b1000; #80 a = 4'b1100; b = 4'b0011; c = 4'b0110; d = 4'b1001; end initial sel = 2'b00; always #20 sel = sel + 1; endmodule 코드 10.17
테스트벤치
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.2 멀티플렉서 모델링 4 비트 4:1 멀티플렉서
시뮬레이션 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.2 멀티플렉서 모델링 4 비트 4:1 멀티플렉서
그림 10.8 코드 10.14 ~ 10.16 의 합성 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.2 멀티플렉서 모델링
8 비트 8:1 멀티플렉서
module mux81_case(sel, in_word, out_bit); input [2:0] sel; input [7:0] in_word; output out_bit; reg out_bit;
always @(sel or in_word) begin case(sel) endcase endendmodule 코드 10.18
case 문
코드를 완성한다 .
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.1 2 진 인코더 n:m 2 진 인코더
◆ n- 비트의 입력을 m- 비트의 출력으로 변환 ( 단 , n=2m)
◆ if 조건문 , case 문 , for 반복문 등 여러 가지 방법으로 모델링 반복문 ; 입력의 비트 수가 큰 경우 또는 입 /력 비트 수를 파라미터화하여
모델링하는 경우에 유용
◆ 진리표에 나열된 입력조건 이외의 경우에는 출력에 don’t care 값을
할당하여 최소화된 회로가 합성되도록 함
입력 a[3:0] 출력 y[1:0]
0001 00
0010 01
0100 10
1000 11
표 10.4 4:2 2 진 인코더의 진리표
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.1 2 진 인코더 4:2 2 진 인코더
module enc_4to2_case(a, y); input [3:0] a; output [1:0] y; reg [1:0] y; always @(a) begin casex(a) 4'b0001 : y = 0; 4'b0010 : y = 1; 4'b0100 : y = 2; 4'b1000 : y = 3; default : y = 2'bx; endcase endendmodule 코드 10.19
case 문
module enc_4to2_if(a, y); input [3:0] a; output [1:0] y; reg [1:0] y; always @(a) begin if (a == 4'b0001) y = 0; else if(a == 4'b0010) y = 1; else if(a == 4'b0100) y = 2; else if(a == 4'b1000) y = 3; else y = 2'bx; endendmodule 코드 10.20
if 조건문
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.1 2 진 인코더 4:2 2 진 인코더
module enc_4to2_for(a, y); input [3:0] a; output [1:0] y; reg [1:0] y; reg [3:0] temp; integer n; always @(a) begin temp = 4'b0001; y = 2'bx; for(n = 0; n < 4; n = n + 1) begin if(a == temp) y = n; temp = temp << 1; end endendmodule 코드 10.21
for 반복문
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.1 2 진 인코더 4:2 2 진 인코더
module tb_enc_4to2; reg [3:0] a; wire [1:0] y;
enc_4to2_case U0(a, y);// enc_4to2_if U0(a, y);// enc_4to2_for U0(a, y); always begin a = 4'b0001; #20 a = 4'b0010; #20 a = 4'b0100; #20 a = 4'b1000; #20; end
endmodule 코드 10.22
테스트벤치
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.1 2 진 인코더코드 10.19 의
합성결과
코드 10.20, 코드 10.21 의 합성결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.1 2 진 인코더
enable 신호를 갖는 4 : 2 이진 인코더를 다음의 방법으로
모델링하고 , 시뮬레이션을 통해 검증
① case 문을 사용하는 방법
② if 조건문을 사용하는 방법
③ for 반복문을 사용하는 방법
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.2 우선순위 인코더 4:2 우선순위 인코더
표 10.5 4:2 우선순위 인코더의 진리표
입력 출력
a[3:0] y[1:0] valid
1xxx 11 1
01xx 10 1
001x 01 1
0001 00 1
0000 xx 0
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.2 우선순위 인코더 4:2 우선순위 인코더
module pri_enc_4to2_if(a, valid, y); input [3:0] a; output valid; output [1:0] y; reg valid; reg [1:0] y; always @(a) begin valid = 1; if (a[3]) y = 3; else if(a[2]) y = 2; else if(a[1]) y = 1; else if(a[0]) y = 0; else begin valid = 0; y = 2'bx; end endendmodule 코드 10.23
if 조건문 사용
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.2 우선순위 인코더 4:2 우선순위 인코더
module pri_enc_4to2_case(a, valid, y); input [3:0] a; output valid; output [1:0] y; reg valid; reg [1:0] y; always @(a) begin valid = 1; casex(a) 4'b1xxx : y = 3; 4'b01xx : y = 2; 4'b001x : y = 1; 4'b0001 : y = 0; default : begin valid = 0; y = 2'bx; end endcase endendmodule 코드 10.24
casex 문 사용
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.2 우선순위 인코더 4:2 우선순위 인코더
module pri_enc_4to2_for(a, valid, y); input [3:0] a; output valid; output [1:0] y; reg valid; reg [1:0] y; integer n; always @(a) begin valid = 0; y = 2'bx; for(n = 0; n < 4; n = n+1) if(a[n]) begin valid = 1; y = n; end end endmodule 코드 10.25
for 문 사용
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.2 우선순위 인코더 4:2 우선순위 인코더
module tb_pri_enc; reg [3:0] a; wire valid; wire [1:0] y;
pri_enc_4to2_case U0(a, valid, y);// pri_enc_4to2_if U0(a, valid, y);// pri_enc_4to2_for U0(a, valid, y); always begin a = 4'b0001; #20 a = 4'b0010; #20 a = 4'b0100; #20 a = 4'b1000; #20; endendmodule 코드 10.26
테스트벤치
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.2 우선순위 인코더 4:2 우선순위 인코더
시뮬레이션 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.2 우선순위 인코더 4:2 우선순위 인코더
그림 10.12 코드 10.23 ~ 10.25 의 합성 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.2 우선순위 인코더
enable 신호를 갖는 4:2 우선순위 인코더를 다음의 방법으로 모델링하고 , 시뮬레이션을 통해 검증
① case 문을 사용하는 방법
② if 조건문을 사용하는 방법
③ for 반복문을 사용하는 방법
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.3 디코더 m:n 2 진 디코더
◆ m- 비트의 입력을 n- 비트의 출력으로 변환 ( 단 , n=2m)
◆ n:m 2 진 인코더로 인코딩된 데이터를 복원시킴
◆ if 조건문 , case 문 , for 반복문 등 여러 가지 방법으로 모델링
반복문 ; 입력의 비트 수가 큰 경우 또는 입 /력 비트 수를
파라미터화하여 모델링하는 경우에 유용
입력 a[1:0] 출력 y[3:0]
00 0001
01 0010
10 0100
11 1000
표 10.6 2:4 2 진 디코더의 진리표
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.3 디코더 2:4 이진 디코더
module dec_2to4_if(a, y); input [1:0] a; output [3:0] y; reg [3:0] y; always @(a) begin if(a == 0) y = 4'b0001; else if(a ==1) y = 4'b0010; else if(a ==2) y = 4'b0100; else y = 4'b1000; endendmodule 코드 10.27
if 조건문 사용
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.3 디코더 2:4 이진 디코더
module dec_2to4_case(a, y); input [1:0] a; output [3:0] y; reg [3:0] y; always @(a) begin case(a) 0 : y = 4'b0001; 1 : y = 4'b0010; 2 : y = 4'b0100; 3 : y = 4'b1000; default: y = 4'bx; endcase endendmodule 코드 10.28
case 문 사용
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.3 디코더 2:4 이진 디코더
module dec_2to4_for(a, y); input [1:0] a; output [3:0] y; reg [3:0] y; integer n; always @(a) begin for(n = 0; n <= 3; n = n + 1) if(a == n) y[n] = 1'b1; else y[n] = 1'b0; endendmodule 코드 10.29
for 문 사용
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.3 디코더 2:4 이진 디코더
module tb_dec_2to4; reg [1:0] a; wire [3:0] y;
dec_2to4_case U0(a, y);// dec_2to4_if U0(a, y);// dec_2to4_for U0(a, y); always begin a = 4'b00; #20 a = 4'b01; #20 a = 4'b10; #20 a = 4'b11; #20; endendmodule 코드 10.30
테스트벤치
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.3 디코더 2:4 이진 디코더
시뮬레이션 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.3 디코더 2:4 이진 디코더
그림 10.14 코드 10.27 ~ 10.29 의 합성 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.3 디코더
Active-high enable 신호를 갖는 3 : 6 디코더 ( 표 10.7) 를 다음의 방법으로 모델링하고 , 시뮬레이션을 통해 검증◆ if 조건문을 사용하는 방법◆ enable 신호와 입력 a 를 결합 연산자 { } 로 묶어 case 문의 조건으로 사용하는
방법
enable 입력 a[2:0] 출력 y[5:0]
0 xxx 000000
1
000 000001
001 000010
010 000100
011 001000
100 010000
101 100000
110 000000
111 000000
표 10.7
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.3 디코더 파라미터화된 디코더
module dec_param(en, a, y); parameter in_width = 3, out_width = 8; input en; input [in_width-1:0] a; output [out_width-1:0] y; reg [out_width-1:0] y; integer n; always @(en or a) begin if(!en) y = 0; else if(a > out_width-1) for(n = 0; n <= out_width-1; n = n+1) y[n] = 1'bx; else for(n = 0; n <= out_width-1; n = n+1) if(a == n) y[n] = 1'b1; else y[n] = 1'b0; end endmodule 코드 10.31
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.3.3 디코더 모듈 dec_param 을 이용한 3:6 디코더
module dec_param_inst(en, addr, dec_addr); input en; input [2:0] addr; output [5:0] dec_addr; // 3:6 디코더 구현 dec_param #(3, 6) decoder_3to6(en, addr, dec_addr);
endmodule 코드 10.32
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.4 비교기 비교기
◆ 두 입력의 상대적인 크기를 비교
◆ 관계연산자 , if 조건문 , for 반복문 등 여러 가지 방법으로 모델링
module comp_assign(a, b, agtb, altb, aeqb); input [3:0] a, b; output altb, agtb, aeqb; assign altb =(a < b); assign agtb =(a > b); assign aeqb =(a == b);
endmodule 코드 10.33
4 비트 비교기
관계연산자 사용
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.4 비교기 4 비트 비교기
module comp_if(a, b, agtb, altb, aeqb); input [3:0] a, b; output altb, agtb, aeqb; reg altb, agtb, aeqb; always @(a or b) begin altb = 1'b0; agtb = 1'b0; aeqb = 1'b0; if(a == b) aeqb = 1'b1; else if(a > b) agtb = 1'b1; else altb = 1'b1; endendmodule 코드 10.34
if 조건문 사용
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.4 비교기 4 비트 비교기
module comp_for(a, b, agtb, altb, aeqb); parameter size=4; input [size-1:0] a, b; output altb, agtb, aeqb; reg altb, agtb, aeqb; integer i; always @(a or b) begin altb = 1'b0; agtb = 1'b0; aeqb = 1'b1; for(i = size-1; i > = 0; i=i-1) begin : comp_loop if(a[i] != b[i]) begin agtb = a[i]; altb = ~a[i]; aeqb = 0; disable comp_loop; end end endendmodule 코드 10.35
for 문 사용
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.4 비교기 4 비트 비교기
module tb_comp; reg [3:0] a, b; wire agtb, altb, aeqb;
// comp_assign Uo(a, b, agtb, altb, aeqb);// comp_if Uo(a, b, agtb, altb, aeqb); comp_for Uo(a, b, agtb, altb, aeqb); always begin a = 4'b0001; b = 4'b1001; #20 a = 4'b0010; b = 4'b0000; #20 a = 4'b1100; b = 4'b1101; #20 a = 4'b1001; b = 4'b1001; #20 a = 4'b0111; b = 4'b0100; #20 a = 4'b1111; b = 4'b1111; #20 a = 4'b1101; b = 4'b1001; #20 a = 4'b0000; b = 4'b0000; #20 a = 4'b1010; b = 4'b1010; #20 a = 4'b0001; b = 4'b1011; #20; endendmodule 코드 10.36
테스트벤치
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.4 비교기 4 비트 비교기
시뮬레이션 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.4 비교기 4 비트 비교기
코드 10.33 의 합성 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.4 비교기 4 비트 비교기
코드 10.34 의 합성 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.4 비교기 4 비트 비교기
코드 10.35 의 합성 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.5 Tri-state 버스 3 상태 버스 드라이버
◆ 회로의 여러 부분에서 생성된 신호들을 공통 버스를 통해 회로의 다른
부분으로 전송하기 위해 사용
제어신호는 데이터를 버스에 보내거나 또는 데이터 소스를 버스로부터
격리시켜 high impedance 상태로 만듬
◆ 조건 연산자 또는 게이트 프리미티브를 사용하여 모델링
CircuitBlock-B
enable_b
bus_data
CircuitBlock-A
enable_a
data_b
data_a
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.5 Tri-state 버스 3 상태 버스 드라이버
module tristate_conop(in, oe, out); input in, oe; output out;
assign out =(oe) ? in : 1'bz;endmodule 코드 10.37
조건연산자 사용
module tristate_gate(in, oe, out);input in, oe;output out;
bufif1 b1(out, in, oe); // Active-high oe endmodule 코드 10.38
게이트 프리미티브 사용
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.5 Tri-state 버스 3 상태 버스 드라이버
`define PERIOD 20
module tb_tristate; reg in, oe; // tristate_gate U0_tristate_1(in, oe, out); tristate_conop U0_tristate_2(in, oe, out); initial begin #0 oe = 1'b0; in = 1'b1; #(`PERIOD) in = 1'b0; #(`PERIOD) in = 1'b1; oe = 1'b1; #(`PERIOD) in = 1'b0; #(`PERIOD*2) in = 1'b1; #(`PERIOD*3) in = 1'b0; #(`PERIOD) oe = 1'b0; #(`PERIOD*2) in = 1'b1; #(`PERIOD) in = 1'b1; #(`PERIOD*15) $stop; endendmodule 코드 10.39
테스트벤치
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.5 Tri-state 버스 3 상태 버스 드라이버
시뮬레이션 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.5 Tri-state 버스 양방향 버스 드라이버
◆ 보내기와 받기를 동시에 처리
CircuitBlock
send
bus_data
rcv
received_data
send_data
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.5 Tri-state 버스 양방향 버스 드라이버
module bidir_bus(send, send_data, rcv, received_data, bus_data); input send, rcv; input [7:0] send_data; inout [7:0] bus_data; output [7:0] received_data;
assign received_data =(rcv) ? bus_data : 8'bz; assign bus_data =(send) ? send_data : bus_data;
endmodule 코드 10.40
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.5 Tri-state 버스 양방향 버스 드라이버
‘define PERIOD 20module tb_bidir_bus; reg send, rcv; reg [7:0] send_data; wire [7:0] received_data, bus_data; bidir_bus U0(send, send_data, rcv, received_data, bus_data); initial begin #0 send = 1'b0; rcv = 1'b0; send_data = 8'h00; #(‘PERIOD) send_data = 8'h07; #(‘PERIOD) send_data = 8'h15; send = 1'b1; #(‘PERIOD) send_data = 8'hAB; #(‘PERIOD) send_data = 8'h34; #(‘PERIOD) send_data = 8'h11; send = 1'b0; rcv = 1'b1; #(‘PERIOD*2) send_data = 8'h21; #(‘PERIOD) send_data = 8'h77; #(‘PERIOD*2) send_data = 8'h66; send = 1'b1; rcv = 1'b1; #(‘PERIOD) send_data = 8'h12; #(‘PERIOD) send_data = 8'hCF; send = 1'b0; rcv = 1'b0; #(‘PERIOD) send_data = 8'h89; #(‘PERIOD) send_data = 8'h65; #(‘PERIOD*15) $stop; endendmodule 코드 10.41
테스트벤치
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.5 Tri-state 버스 양방향 버스 드라이버
시뮬레이션 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.5 Tri-state 버스
그림 10.21 의 버스 드라이버를 조건 연산자를 사용하여 모델링하고 ,
시뮬레이션을 통해 검증 ( 단 , 데이터는 8 비트로 설계 )
CircuitBlock-B
enable_a
bus_data
CircuitBlock-A
data_b
data_a
MUX
enable_b
그림 10.21
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.6 원하지 않는 래치의 합성 원하지 않는 래치의 합성
◆ case 문에 모든 가능한 case 항목들이 포함되지 않는 경우
◆ if 조건문에서 else 블록이 생략되는 경우
순수한 조합논리회로의 합성
◆ 모든 가능한 입력 조건들에 대해 출력값을 명시적으로 지정
◆ default 값을 지정
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.6 원하지 않는 래치의 합성 래치로 합성되는 case 문의 예
module case_latch(sel, in1, in2, y_out); input [1:0] sel; input [3:0] in1, in2; output [3:0] y_out; reg [3:0] y_out;
always @(sel or in1 or in2) begin case(sel) 2'b10 : y_out = in1; 2'b01 : y_out = in2; endcase endendmodule 코드 10.42
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.6 원하지 않는 래치의 합성 래치로 합성되는 case 문의 예
코드 10.42 의 시뮬레이션 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.6 원하지 않는 래치의 합성 래치로 합성되는 case 문의 예
코드 10.42 의 합성 결과
래치
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.6 원하지 않는 래치의 합성 래치로 합성되는 if 문의 예
module if_latch(a, b, y_out); input a, b; output [3:0] y_out; reg [3:0] y_out;
always @(a or b) begin if (({a, b}) == 2'b11) y_out = 5; else if(({a, b}) == 2'b10) y_out = 2; else if(({a, b}) == 2'b01) y_out = 3; // No else block endendmodule 코드 10.43
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.6 원하지 않는 래치의 합성 래치로 합성되는 if 문의 예
코드 10.43 의 합성 결과
래치
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.6 원하지 않는 래치의 합성 case 문에 default 문이 포함된 경우
◆ 래치가 합성되지 않음
module case_no_latch1(sel, in1, in2, y_out); input [1:0] sel, in1, in2; output [1:0] y_out; reg [1:0] y_out;
always @(sel or in1 or in2) begin case(sel) 2'b10 : y_out = in1; 2'b01 : y_out = in2; default : y_out = 2'bx; endcase endendmodule 코드 10.44
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.6 원하지 않는 래치의 합성 case 문에 default 문이 포함된 경우
코드 10.44 의 합성 결과
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.6 원하지 않는 래치의 합성 case 문이 초기값을 갖는 경우
◆ 래치가 합성되지 않음
module case_no_latch2(memce0, memce1, cs, en, addr); output memce0, memce1, cs; input en; input [31:30] addr; reg memce0, memce1, cs; always @(addr or en) begin {memce0, memce1, cs} = 3'b0; // 초기값을 할당 casez({addr, en}) 3'b101: memce0 = 1'b1; 3'b111: memce1 = 1'b1; 3'b0?1: cs = 1'b1; endcase endendmodule 코드 10.45
집적 회로 설계 Hanbat National University Prof. Lee Jaeheung
10.6 원하지 않는 래치의 합성 case 문이 초기값을 갖는 경우
코드 10.45 의 합성 결과