计数器的Modelsim仿真报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计数器的Modelsim仿真

一.实验目的和要求:

1. 熟悉Quartus和Modelsim软件的基本使用方法和步骤,熟悉基本的Verilog语法,学会用Verilog语言编写简单的程序。

2.学会使用Quartus编写计数器模块并用Modelsim进行仿真。

3.熟练掌握Quartus和Modelsim软件工程建立、添加文件、编译运行和仿真的方法,学会写程序文件和测试文件。

4.试验设备及要求:@Quartus 13 和Modelsim。@运行Modelsim软件建立工程并添加测试.v 文件,进行仿真,查看波形图。

二.仿真方案:

用Quartus编写出计数器模块,已由上节课完成这个任务。编写好计数器模块后,再进行Modelsim进行仿真实验。

三.仿真过程:

1.根据自己写的计数器模块编写测试程序。这里我是用Quartus编写的,所以在编写的时候遇到一些问题。编写如下图:

2.编写完测试模块并编译完成后,打开Modelsim。选择菜单栏的【File】→【New】→【Project】

命令,在弹出窗口中选择【Add Exiting File】,把事先写好的测试文件和程序文件tb_cnt84和count84加入。

3、编译运行:在空白处右键,在弹出窗口中选择【Compile】→【Compile All】,检查完错误后,进行更改,直至没有错误出现。最后进行【Simulate】,选择自己编写的tb_cnt84,然后右击选择加波形,add wave。

4、计数器仿真结束:

四.仿真过程中的错误排查与解决方案:

1、在编写测试模块时我是用Quartus进行编写的,所以总是有一个问题,也就是总是有一个错误解决不了,在请教了同学之后,知道这可能是没问题的,所以还要导入Modelsim之后再进行修改,我导入Modelsim之后,发现确实没有了错误。

2、测试模块的变量问题,测试模块的变量决定了测试模块能否编写成功的关键,所以在编写变量时要格外注意,第一次我并没有把所有的变量编写进去,所以总是漏洞百出,最后,终于成功地完成了测试模块的编写。

五.仿真结果分析:

1:测试模块程序:

`timescale 1ns/1ns

module tb_cnt84( );

wire [7:0] qout;

reg clk;

reg reset;

reg enable;

wire cout;

initial begin

reset = 1'b0;

clk = 1'b0;

# 30 reset = 1'b1;

enable=1'b1;

end

always #50 clk = ~clk;

count84 u1(

.clk(clk),

.reset(reset),

.enable(enable),

.qout(qout),

.cout(cout)

);

Endmodule

2、计数器模块程序:

module count84(input clk, reset, enable,

output reg[7:0] qout,

output cout ); //定义输入输出变量,采用级联的形式,十位记到8,个位到4 always@(posedge clk or negedge reset)

begin

if(!reset)

qout <= 8'b00000000;

else if( enable== 1'b0)

qout <= qout;

else if( (qout[7:4] == 4'b1000)&&(qout[3:0] == 4'b0100) ) //十位是8并且个位为4

qout <= 8'b00000000;

else if(qout[3:0] == 4'b1001) //如果为9

begin

qout[3:0] <= 4'b0000;

qout[7:4] <= qout[7:4] + 1'b1; //加一运算

end

else

begin

qout[7:4] <= qout[7:4];

qout[3:0] <= qout[3:0] + 1'b1; //加一运算

end

end

assign cout=((qout[7:4] == 4'b1000)&&(qout[3:0] == 4'b0100))?1'b1:1'b0; //输出进位endmodule

3、结果分析:

在看到并行之后,我想这个结果应该是正确的。因为在计时脉冲经过84次之后,进位端就会进行一次进位,然后再次进行计数,再次进行进位。

相关文档
最新文档