verilog十六分频实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

西北工业大学《FPGA技术实验》实验报告一(用计数方法实现一个16分频电路)学院:软件与微电子学院学号:姓名:专业:微电子学实验时间:2011.9.28实验地点:毅字楼335指导教师:王少熙西北工业大学2011年10月一、实验目的及要求实验目的:进一步熟悉verilog语言,学会熟练操作modelsim软件,并用它进行仿真,为以后的进一步发展打下良好基础.实验要求:使用计数方法实现一个16分频电路,用Verilog写出电路实现程序以及测试文件.二、实验设备(环境)及要求实验软件:ModelSimSE6.2b三、实验内容与步骤1.实验总体设计思路用一个计数器(counter)来计数,当计数器等于7时,让输出结果翻转,同时计数器置零,如此往下.a.输入端口为有时钟信号clk以及复位信号reset,输出为dout,先用reset信号把clk和dout都清零.b.在时钟上升沿触发,如果计数器counter等于7,则把dou翻转且把counter清零,否则的话counter自加一.c.这样的话就可以实现对时钟信号的16分频.2.测试平台设计模块设计:`timescale1ns/1nsmodulediv_16(clk,reset,dout);inputclk//时钟信号inputreset;//清零端reset,且高电平有效outputdout;reg[2:0]counter;//设置一3位计数器regdout;always@(posedgeclkorposedgereset)//在时钟上升沿和复位端上升沿触发beginif(reset)begincounter=0;dout=0;//复位端起作用,计数器和输出结果都清零endelseif(counter==7)//若计数器counter为7,dout翻转且计数器清零begindout=~dout;counter=0;endelsecounter=counter+1;//否则的话计数器自加1endendmodule//结束Tesetbench如下:`timescale1ns/1nsmodulediv_bench;regclk;regreset;wiredout;div_16d1(clk,reset,dout);//实例化alwaysbegin//对时钟信号clk赋值#10clk=0;#10clk=1;endinitialbeginreset=1;//对复位信号reset赋值#5reset=0;#1000$finish;//1000ns仿真结束endinitial$monitor(doutchangedto%battime%t,%b,dout,$time);//监视输出结果Endmodule//结束四、实验结果与数据处理1.Modelsim仿真结果,波形图,代码覆盖率图等仿真结果波形图如下:上图中第一条线是时钟信号(clk),第二条是复位信号(reset),第三条是输出结果(dout),第四条是设置的三位计数器(conuter),复位信号在0时刻清零此时dout和counter都复位,5秒时复位信号失去作用,clk10ns开始产生,并且周期为20ns,丛仿真波形图中可以看出,dout的周期变为clk的16倍,也就是16分频,这正是我们期望的.代码覆盖率图如下:可见代码覆盖率是非常高的.2.综合结果,布局布线结果,关键路径,资源利用率等。综上可见结果正确合理,达到了预期的结果和要求,资源利用率较高.五、分析与讨论1.电路的功能是否正确,仿真是否充分,如何进一步提高代码覆盖率电路功能正确,仿真充分,代码利用率非常好.2.电路的关键路径在哪里,如何对关键路径进行优化。关键是对计数器的控制,要在7的时刻让输出结果翻转,这是此问题的精华.六、教师评语签名:日期:成绩

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功