[19] Verilog HDL 조합회로 설계과제1 (NAND, NOR, BOOL, TRUTH TABLE, MUX)UVM & RTL/Verilog HDL2022. 3. 5. 18:55
Table of Contents
★ 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
module tb_nor_test;
reg [2:0] a;
wire y;
integer i;
nor_test u0(a,y);
always begin
a=0;
for(i=1;i<9;i=i+1)begin
#20 a = i;
end
end
endmodule
★ 4비트 2입력 XOR게이트를 다음과 같은 2가지 방식으로 모델링하고, 테스트벤치를 작성하여 기능을 검증한다.
① 비트 연산자를 사용하는 방법
② for반복문을 사용하는 방법
// 설계과제 10.2
module xor_test(a,b,y);
input [3:0] a,b;
output [3:0] y;
// 1. 비트 연산자 활용
assign y = a^b;
// 2. for반복문
integer i;
reg [3:0] y;
always @(*) begin
for(i=0;i<4;i=i+1)begin
y[i] = a[i]^b[i];
end
end
endmodule
▣ TESTBENCH
module tb_xor_test;
reg [3:0] a,b;
wire [3:0] y;
xor_test u0(a,b,y);
initial begin
a=4'b0000; b=4'b0000;
#10 a=4'b1010; b=4'b0101;
#10 a=4'b1100; b=4'b1100;
#10 a=4'b1111; b=4'b0110;
#10 a=4'b0110; b=4'b1101;
end
endmodule
★ 다음의 부울 식으로 표현되는 회로를 Verilog로 모델링하고, 테스트벤치를 작성하여 기능을 검증한다.
module bool_test(a,b,c,d,e,y);
input a,b,c,d,e;
output y;
assign y = ~((a&b)|c|(d&e));
endmodule
▣ TESTBENCH
module tb_bool_test;
reg a,b,c,d,e;
wire y;
bool_test u0(a,b,c,d,e);
initial begin
a=0;b=1;c=0;d=1;e=0;
#20 a=1;b=0;c=1;d=0;e=1;
#20;
end
endmodule
★ 다음 표는 변형된 Booth인코딩의 진리표이며, 3비트의 입력을 받아 출력 yz, y2, neg, add를 출력한다. 진리표를 Verilog로 모델링하고, 테스트벤치를 작성하여 기능을 검증한다.
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.4
module booth_test(xin,yz,y2,neg,add);
input [2:0] xin;
output yz,y2,neg,add;
reg [3:0] tmp ;
assign add = tmp[0];
assign neg = tmp[1];
assign y2 = tmp[2];
assign yz = tmp[3];
always@(*)begin
case(xin)
0 : tmp = 4'b0101;
1,2 : tmp = 4'b1000;
3 : tmp = 4'b1100;
4 : tmp = 4'b1111;
5,6 : tmp = 4'b1011;
7 : tmp = 4'b0111;
endcase
end
endmodule
▣ TESTBENCH
// 설계과제 10.4 testbench
module tb_bool_test;
reg [2:0] xin;
wire yz,y2,neg,add;
booth_test u0(xin,yz,y2,neg,add);
integer i;
always begin
xin = 0;
for(i=1;i<9;i=i+1)begin
#20 xin = i;
end
end
endmodule
★ 8비트 입력 in_word[7:0] 중 1비트를 선택하여 출력 out_bit로 보내는 8:1 멀티플렉서를 case문으로 모델링하고, 시뮬레이션을 통해 검증한다.
// 설계과제 10.5
module mux_test(sel,in_word,y);
input [2:0] sel;
input [7:0] in_word;
output reg y;
always@(*)begin
case(sel)
0 : y = in_word[0];
1 : y = in_word[1];
2 : y = in_word[2];
3 : y = in_word[3];
4 : y = in_word[4];
5 : y = in_word[5];
6 : y = in_word[6];
7 : y = in_word[7];
default : y=1'bx;
endcase
end
endmodule
▣ TESTBENCH
// 설계과제 10.5 testbench
module tb_mux_test;
reg [2:0] sel;
reg [7:0] in_word;
wire y;
integer i;
mux_test u0(sel,in_word,y);
initial begin
for(i=0;i<8;i=i+1)begin
in_word[i] = i;
end
end
initial
sel = 3'b000;
always
#20 sel = sel+1;
endmodule
'UVM & RTL > Verilog HDL' 카테고리의 다른 글
[21] Verilog HDL 조합회로 설계과제 (Decoder, Encoder) (1) | 2022.03.05 |
---|---|
[20] Verilog HDL 조합회로 구현 (ENCODER, DECODER) (0) | 2022.03.05 |
[18] Verilog HDL 조합회로 구현(NAND, NOR, BOOL, TRUTH TABLE, MUX) (0) | 2022.03.05 |
[17] Verilog HDL Inernal Memory Interface 실습 (0) | 2022.01.22 |
[16] Verilog HDL Inernal Memory Interface (0) | 2022.01.22 |
@Return :: Return
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!