资源描述:
《仿真设计举例.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.4位加法器的ModelSim仿真设计新建一个名为adder4,v的源文件,源代码如下:moduleadder4(COUT,SUM,A,B,CIN);input[3:0]A,B;inputCIN;output[3:0]SUM;outputCOUT;assign{COUT,SUM}=A+B+CIN;endmodule接下来需要编写4位加法器的测试文件test_adder4.v源代码如下://‘timescale1ns/1nsmoduletest_adder4;wire[3:0]SUM;wireCOUT;reg[3:0]A,B;regCIN;initialbeginA=4;B=2;CIN=1;
2、#100A=12;B=8;CIN=0;#100A=10;B=8;CIN=0;endadder4m(.COUT(COUT),.SUM(SUM),.A(A),.B(B),.CIN(CIN));endmodule2.十进制计数器的ModelSim仿真设计counter_10源代码如下:modulecounter_10(clk,clr,c,out);inputclk,clr;outputc;output[3:0]out;regc;reg[3:0]out;always@(posedgeclkornegedgeclr)beginif(!clr)beginout[3:0]<=0;c<=0;endelseb
3、eginif(out[3:0]==9)beginc<=1;out[3:0]<=0;endelsebeginout[3:0]<=out[3:0]+1;c<=0;endendendendmodulecounter_10_tp.v是testbench文件,用来测试验证十进制计数器,代码如下:‘timescale1ns/1nsmodulecounter_10_tp;regclk,clr;wirecout;wire[3:0]cnterout;counter_10counter10(.clk(clk),.clr(clr),.c(cout),.out(cnterout));always#5clk=~clk
4、;initialbeginclk<=0;clr<=0;#10clr<=1;#30clr<=0;#40clr<=1;#2000$stop;endendmodule3.Quartus8.0新建一个工程,然后编写两个文件如下: 顶层文件“count4.v”源码为:modulecount4(clk,reset,out); //4位计数器模块 input clk,reset; output[3:0] out; reg[3:0] out; always@(posedgeclk) begin if
5、(reset) out<=0; else out<=out+1; endendmoduleModelSim仿真用到的测试文件“count_tp.v”源码为:(注意,该文件不加入工程中)`timescale1ns/1ns //定义时延单位1ns和时延精度为1ns(即精确到1ns)modulecount_tp; //测试模块 reg clk,reset; //输入激励信号定义为reg型 wire[3
6、:0]out; //输出信号定义为wire型 parameterDELY=100; count4mycount(.clk(clk),.reset(reset),.out(out)); //调用测试对象count4 always#(DELY/2)clk=~clk; //产生时钟波形 initial //激励波形定义 begin clk=0; reset=0; #DELY
7、 reset=1; #DELY reset=0; #(DELY*20)$finish; end initial$monitor($time,,,"clk=%dreset=%dout=%d",clk,reset,out);//结果显示endmodule4.简单的测试设计实例化用户设计,然后提供相应的激