您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页verilog十六分频实现

verilog十六分频实现

来源:爱go旅游网


西北工业大学 《FPGA技术实验》

实验报告一

(用计数方法实现一个16分频电路)

学 院: 学 号: 姓 名: 专 业: 实验时间: 实验地点: 指导教师: 西北工业大学 2011 年10月

软件与微电子学院 微电子学 2011.9.28 毅字楼335 ***

一、实验目的及要求 实验目的:进一步熟悉verilog语言,学会熟练操作modelsim软件,并用它进行仿真,为以后的进一步发展打下良好基础. 实验要求:使用计数方法实现一个16分频电路,用Verilog写出电路实现程序以及测试文件. 二、实验设备(环境)及要求 实验软件:ModelSim SE 6.2b 三、实验内容与步骤 1. 实验总体设计思路 用一个计数器(counter)来计数,当计数器等于7时,让输出结果翻转,同时计数器置零,如此往下. a. 输入端口为有时钟信号clk以及复位信号reset,输出为dout,先用reset信号把clk和dout都清零. b. 在时钟上升沿触发,如果计数器counter等于7,则把dou翻转且把counter清零,否则的话counter自加一. c. 这样的话就可以实现对时钟信号的16分频. 2. 测试平台设计 模块设计: `timescale 1ns/1ns module div_16(clk, reset, dout); input clk // 时钟信号 input reset; // 清零端reset,且高电平有效 output dout; reg[2:0] counter; // 设置一3位计数器 reg dout; always@(posedge clk or posedge reset) // 在时钟上升沿和复位端上升沿触发 begin if(reset) begin counter=0; dout=0; // 复位端起作用,计数器和输出结果都清零 end else if(counter==7) // 若计数器counter为7,dout翻转且计数器清零 begin dout=~dout; counter=0; end else counter=counter+1; // 否则的话计数器自加1 end endmodule //结束 Tesetbench如下: `timescale 1ns/1ns module div_bench; reg clk; reg reset; wire dout; div_16 d1(clk,reset,dout); // 实例化 always begin // 对时钟信号clk赋值 #10 clk=0; #10 clk=1; end initial begin reset=1; // 对复位信号reset赋值 #5 reset=0; #1000 $finish; // 1000ns仿真结束 end initial $monitor(\"dout changed to %b at time %t,%b\监视输出结果 Endmodule //结束 四、实验结果与数据处理 1. Modelsim仿真结果,波形图,代码覆盖率图等 仿真结果波形图如下: 上图中第一条线是时钟信号(clk),第二条是复位信号(reset),第三条是输出结果(dout),第四条是设置的三位计数器(conuter),复位信号在0时刻清零此时dout和counter都复位,5秒时复位信号失去作用,clk 10ns开始产生,并且周期为20ns,丛仿真波形图中可以看出,dout的周期变为clk的16倍,也就是16分频,这正是我们期望的. 代码覆盖率图如下: 可见代码覆盖率是非常高的. 2. 综合结果,布局布线结果,关键路径,资源利用率等。 综上可见结果正确合理,达到了预期的结果和要求,资源利用率较高. 五、分析与讨论 1. 电路的功能是否正确,仿真是否充分,如何进一步提高代码覆盖率 电路功能正确,仿真充分,代码利用率非常好. 2. 电路的关键路径在哪里,如何对关键路径进行优化。 关键是对计数器的控制,要在7的时刻让输出结果翻转,这是此问题的精华. 六、教师评语 签名: 日期:

成绩

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务