基于Verilog 的数字电路模拟实验
电子信息学院 10微电子1028402010 陈阵
实验一 3-8译码器Verilog 设计
实验时间:2012-11-16 实验地点:电子信息楼218
指导老师:黄秋萍
一、实验内容
1、在ModelSim 软件中对3-8译码器的设计模块和验证模块进行书写和编译; 2、对编译好的模块进行仿真; 二、3-8译码器真值表
二、源代码
1、3-8译码器的设计代码 module decoder3_8(EN,out,in); input EN;
output[7:0] out; input[2:0] in; reg[7:0] out; always @(in) begin if(EN) case(in)
3'd0: out=8'b11111110;
3'd1: out=8'b11111101; 3'd2: out=8'b11111011; 3'd3: out=8'b11110111; 3'd4: out=8'b11101111; 3'd5: out=8'b11011111; 3'd6: out=8'b10111111; 3'd7: out=8'b01111111; endcase
else out=8'b11111111; end
endmodule
2、3-8译码器仿真程序的设计代码 `timescale 1ns/1ns
module test_decoder3_8; reg EN; reg[2:0]in; wire[7:0]out;
/*decoder3_8(EN,out,in); input EN;
output[7:0] out; input[2:0] in;*/
decoder3_8 M1(EN,out,in); initial begin:AB integer I; EN=0;
#100 EN=1;
for(I=0;I
#100 $display("EN=%b,in=%D,out=%b",EN,in,out); End
三、仿真结果及分析
实验二十进制计数器
实验时间:2012-11-16 实验地点:电子信息楼218
指导老师:黄秋萍
一、实验内容
1、在ModelSim 软件中对十进制计数器的设计模块和验证模块进行书写和编译; 2、对编译好的模块进行仿真. 二、源代码
1、十进制计数器的设计代码
module CNT10 (CLK,RST,EN,LOAD,COUT,DOUT,DATA); input CLK,EN,RST,LOAD; input [3:0] DATA; output [3:0] DOUT; output COUT; reg [3:0] Q1; reg COUT;
assign DOUT = Q1;
always @(posedge CLK or negedge RST) begin if (!RST) Q1
always @(Q1)
if (Q1==4'h9) COUT = 1'b1; else COUT = 1'b0;
endmodule
2、十进制计数器仿真程序的设计代码 `timescale 1ns/1ns module test_cnt10; reg CLK,RST,EN,LOAD; reg[3:0] DATA; wire[3:0] DOUT; wire CIUT;
cnt10 M1(CLK,RST,EN,LOAD,COUT,DOUT,DATA); initial begin CLK=0; RST=0; LOAD=0;
DATA=4'D5; EN=1;
#90 RST=1'b1;LOAD=1'b0; #90 LOAD=1'b1; #1500 $stop; end
always #50 CLK=!CLK; always @(DOUT)
$display("DOUT=%d",DOUT,"COUT=%b",COUT); Endmodule 三、仿真结果及分析
实验三四位加法器及4-7译码器
实验时间:2012-11-23 实验地点:电子信息楼218
指导老师:黄秋萍
一、实验内容
1、在ModelSim 软件中对四位加法器及4-7译码器的设计模块和验证模块进行书写和编译;
2、对编译好的模块进行仿真. 二、实验要求
设计程序使实现如下功能
:
三、源代码
1、一位加法器设计代码
module adder1(a,b,cin,cout,sum); inputa,b,cin; outputsum,cout;
assign {cout,sum}=a+b+cin; endmodule
2、四位加法器设计代码
module adder4 (cout,sum,ina,inb,cin); output[3:0] sum; outputcout;
input[3:0] ina,inb; inputcin;
assign {cout,sum}=ina+inb+cin; endmodule
3、四位加法器仿真程序设计代码 `timescale 1ns/1ns module test_adder4; reg[3:0] ina,inb; regcin; wirecout;
wire[3:0] sum;
wire[6:0] deout;
adder4 M1(cout,sum,ina,inb,cin); initial begin:ABC integer I;
for (I=0;I
{cin,inb,ina}=I;
#50 $monitor ("%d+%d+%d={%b,%d}",ina,inb,cin,cout,sum); end end
endmodule
4、4-7译码器设计代码 4-7译码器真值表
module decoder4_7 (dein,deout); output[6:0] deout; input[3:0] dein; reg[6:0] deout; always@(dein) begin case(dein)
4'd0:deout=7'b1111110; 4'd1:deout=7'b0110000; 4'd2:deout=7'b1101101; 4'd3:deout=7'b1111001; 4'd4:deout=7'b0110011; 4'd5:deout=7'b1011011; 4'd6:deout=7'b1011111; 4'd7:deout=7'b1110000; 4'd8:deout=7'b1111111; 4'd9:deout=7'b1111011; default:deout=7'bx;
endcase
end
endmodule
5、4-7译码器仿真程序设计代码 `timescale 1ns/1ns
module test_decoder4_7; reg[3:0] dein; wire[6:0] deout;
decoder4_7 M1(dein,deout); integer I; initial begin
for (I=0;I
#50 $display ("dein=%b",dein,"deout=%b",deout); end end
endmodule
四、仿真波形及分析
实验四 2-4译码器
实验时间:2012-11-23 实验地点:电子信息楼218
指导老师:黄秋萍
一、实验内容
1、在ModelSim 软件中对2-4译码器的设计模块和验证模块进行书写和编译; 2、对编译好的模块进行仿真. 二、2-4译码器真值表
三、源代码
1、2-4译码器设计代码 module decoder2_4 (in,out); output[3:0] out; input[1:0] in; reg[3:0] out; always@(in) begin case(in)
2'd0:out=4'b0001; 2'd1:out=4'b0010; 2'd2:out=4'b0100; 2'd3:out=4'b1000; endcase end
endmodule
2、2-4译码器仿真程序设计代码 `timescale 1ns/1ns
module test_decoder2_4; reg[1:0] in; wire[3:0] out;
decoder2_4 M1(in,out);
initial begin:A integer I;
for (I=0;I
#50 $display ("in=%d",in,"out=%b",out); end end
endmodule
四、仿真波形及分析
实验五 ALU 组合电路实验
实验时间:2012-12-14 实验地点:电子信息楼218
指导老师:黄秋萍
一、实验内容
1、在ModelSim 软件中对ALU 组合电路的设计模块和验证模块进行书写和编译; 2、对编译好的模块进行仿真. 二、实验要求
设计程序使实现如下电路功能
:
三、源代码
1、算术模块设计代码 module ALU1 (A,B,S0,Y1,Y2); input A,B,S0;
output [1:0]Y1,Y2; wire [1:0]Y1,Y2;
assign Y1=S0?(A-B):(A+B); assign Y2=S0?(A|B):(A&B); endmodule
2、逻辑模块设计代码
module MUX2_1(Y1,Y2,S1,F); input [1:0]Y1,Y2; input S1; output [1:0]F; wire [1:0] F;
assign F=S1?Y2:Y1; endmodule
3、ALU 设计代码
module ALU(A,B,S0,S1,F); input A,B,S0,S1; output [1:0]F; wire[1:0] Y1,Y2;
ALU1 U1(A,B,S0,Y1,Y2); MUX2_1 U2(Y1,Y2,S1,F); endmodule
4、仿真程序设计代码 `timescale 1ns/1ns module TEST_ALU;
reg A,B,S0,S1;
电子信息学院 10微电子 1028402010 陈阵
wire [1:0]F;
ALU M(A,B,S0,S1,F);
initial
begin
A=0;
B=0;
S0=0;
S1=0;
#200 S0=1;
#200 S1=1;
#200 S0=0;
end
always
#100A=~A;
always
#50B=~B;
Endmodule
四、仿真波形及分析
基于Verilog 的数字电路模拟实验
电子信息学院 10微电子1028402010 陈阵
实验一 3-8译码器Verilog 设计
实验时间:2012-11-16 实验地点:电子信息楼218
指导老师:黄秋萍
一、实验内容
1、在ModelSim 软件中对3-8译码器的设计模块和验证模块进行书写和编译; 2、对编译好的模块进行仿真; 二、3-8译码器真值表
二、源代码
1、3-8译码器的设计代码 module decoder3_8(EN,out,in); input EN;
output[7:0] out; input[2:0] in; reg[7:0] out; always @(in) begin if(EN) case(in)
3'd0: out=8'b11111110;
3'd1: out=8'b11111101; 3'd2: out=8'b11111011; 3'd3: out=8'b11110111; 3'd4: out=8'b11101111; 3'd5: out=8'b11011111; 3'd6: out=8'b10111111; 3'd7: out=8'b01111111; endcase
else out=8'b11111111; end
endmodule
2、3-8译码器仿真程序的设计代码 `timescale 1ns/1ns
module test_decoder3_8; reg EN; reg[2:0]in; wire[7:0]out;
/*decoder3_8(EN,out,in); input EN;
output[7:0] out; input[2:0] in;*/
decoder3_8 M1(EN,out,in); initial begin:AB integer I; EN=0;
#100 EN=1;
for(I=0;I
#100 $display("EN=%b,in=%D,out=%b",EN,in,out); End
三、仿真结果及分析
实验二十进制计数器
实验时间:2012-11-16 实验地点:电子信息楼218
指导老师:黄秋萍
一、实验内容
1、在ModelSim 软件中对十进制计数器的设计模块和验证模块进行书写和编译; 2、对编译好的模块进行仿真. 二、源代码
1、十进制计数器的设计代码
module CNT10 (CLK,RST,EN,LOAD,COUT,DOUT,DATA); input CLK,EN,RST,LOAD; input [3:0] DATA; output [3:0] DOUT; output COUT; reg [3:0] Q1; reg COUT;
assign DOUT = Q1;
always @(posedge CLK or negedge RST) begin if (!RST) Q1
always @(Q1)
if (Q1==4'h9) COUT = 1'b1; else COUT = 1'b0;
endmodule
2、十进制计数器仿真程序的设计代码 `timescale 1ns/1ns module test_cnt10; reg CLK,RST,EN,LOAD; reg[3:0] DATA; wire[3:0] DOUT; wire CIUT;
cnt10 M1(CLK,RST,EN,LOAD,COUT,DOUT,DATA); initial begin CLK=0; RST=0; LOAD=0;
DATA=4'D5; EN=1;
#90 RST=1'b1;LOAD=1'b0; #90 LOAD=1'b1; #1500 $stop; end
always #50 CLK=!CLK; always @(DOUT)
$display("DOUT=%d",DOUT,"COUT=%b",COUT); Endmodule 三、仿真结果及分析
实验三四位加法器及4-7译码器
实验时间:2012-11-23 实验地点:电子信息楼218
指导老师:黄秋萍
一、实验内容
1、在ModelSim 软件中对四位加法器及4-7译码器的设计模块和验证模块进行书写和编译;
2、对编译好的模块进行仿真. 二、实验要求
设计程序使实现如下功能
:
三、源代码
1、一位加法器设计代码
module adder1(a,b,cin,cout,sum); inputa,b,cin; outputsum,cout;
assign {cout,sum}=a+b+cin; endmodule
2、四位加法器设计代码
module adder4 (cout,sum,ina,inb,cin); output[3:0] sum; outputcout;
input[3:0] ina,inb; inputcin;
assign {cout,sum}=ina+inb+cin; endmodule
3、四位加法器仿真程序设计代码 `timescale 1ns/1ns module test_adder4; reg[3:0] ina,inb; regcin; wirecout;
wire[3:0] sum;
wire[6:0] deout;
adder4 M1(cout,sum,ina,inb,cin); initial begin:ABC integer I;
for (I=0;I
{cin,inb,ina}=I;
#50 $monitor ("%d+%d+%d={%b,%d}",ina,inb,cin,cout,sum); end end
endmodule
4、4-7译码器设计代码 4-7译码器真值表
module decoder4_7 (dein,deout); output[6:0] deout; input[3:0] dein; reg[6:0] deout; always@(dein) begin case(dein)
4'd0:deout=7'b1111110; 4'd1:deout=7'b0110000; 4'd2:deout=7'b1101101; 4'd3:deout=7'b1111001; 4'd4:deout=7'b0110011; 4'd5:deout=7'b1011011; 4'd6:deout=7'b1011111; 4'd7:deout=7'b1110000; 4'd8:deout=7'b1111111; 4'd9:deout=7'b1111011; default:deout=7'bx;
endcase
end
endmodule
5、4-7译码器仿真程序设计代码 `timescale 1ns/1ns
module test_decoder4_7; reg[3:0] dein; wire[6:0] deout;
decoder4_7 M1(dein,deout); integer I; initial begin
for (I=0;I
#50 $display ("dein=%b",dein,"deout=%b",deout); end end
endmodule
四、仿真波形及分析
实验四 2-4译码器
实验时间:2012-11-23 实验地点:电子信息楼218
指导老师:黄秋萍
一、实验内容
1、在ModelSim 软件中对2-4译码器的设计模块和验证模块进行书写和编译; 2、对编译好的模块进行仿真. 二、2-4译码器真值表
三、源代码
1、2-4译码器设计代码 module decoder2_4 (in,out); output[3:0] out; input[1:0] in; reg[3:0] out; always@(in) begin case(in)
2'd0:out=4'b0001; 2'd1:out=4'b0010; 2'd2:out=4'b0100; 2'd3:out=4'b1000; endcase end
endmodule
2、2-4译码器仿真程序设计代码 `timescale 1ns/1ns
module test_decoder2_4; reg[1:0] in; wire[3:0] out;
decoder2_4 M1(in,out);
initial begin:A integer I;
for (I=0;I
#50 $display ("in=%d",in,"out=%b",out); end end
endmodule
四、仿真波形及分析
实验五 ALU 组合电路实验
实验时间:2012-12-14 实验地点:电子信息楼218
指导老师:黄秋萍
一、实验内容
1、在ModelSim 软件中对ALU 组合电路的设计模块和验证模块进行书写和编译; 2、对编译好的模块进行仿真. 二、实验要求
设计程序使实现如下电路功能
:
三、源代码
1、算术模块设计代码 module ALU1 (A,B,S0,Y1,Y2); input A,B,S0;
output [1:0]Y1,Y2; wire [1:0]Y1,Y2;
assign Y1=S0?(A-B):(A+B); assign Y2=S0?(A|B):(A&B); endmodule
2、逻辑模块设计代码
module MUX2_1(Y1,Y2,S1,F); input [1:0]Y1,Y2; input S1; output [1:0]F; wire [1:0] F;
assign F=S1?Y2:Y1; endmodule
3、ALU 设计代码
module ALU(A,B,S0,S1,F); input A,B,S0,S1; output [1:0]F; wire[1:0] Y1,Y2;
ALU1 U1(A,B,S0,Y1,Y2); MUX2_1 U2(Y1,Y2,S1,F); endmodule
4、仿真程序设计代码 `timescale 1ns/1ns module TEST_ALU;
reg A,B,S0,S1;
电子信息学院 10微电子 1028402010 陈阵
wire [1:0]F;
ALU M(A,B,S0,S1,F);
initial
begin
A=0;
B=0;
S0=0;
S1=0;
#200 S0=1;
#200 S1=1;
#200 S0=0;
end
always
#100A=~A;
always
#50B=~B;
Endmodule
四、仿真波形及分析