FPGA-测试频率实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西南科技大学
电工学,电子技术学生实验报告
课程名称FPGA现代数字系统设计
实验名称4位十进制频率计设计
姓名邓彪
班级电子0902
指导老师
评分
2012年4月10日
1.实验目的:
设计4位十进制频率计,学习较复杂的数字系统设计方法。
2.实验原理:
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。这清0个信号可以由一个测频控制信号发生器产生,即图5-1中的TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN 能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的EN使能端进行同步控制。当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。
3.实验内容:
1、根据例5-1(10进制计数器,用于计算分频结果,并连接数码管显示)、例5-2(测
频控制器,使得频率计能自动测频)、例5-3(锁存器,将频率计的每位数锁存后输出)以及4位十进制频率计的工作原理写出频率计的顶层文件(或者原理图),并给出其测频时序波形,及其分析。在测试时候添加以下两个模块:
(1)DE2上有两个时钟源,分别是(50MHZ ,PIN_N2),(27MHz,PIN_D13),编写一个分频模块,分别产生测频器的clk(8Hz)和f_in(频率任意定)时钟,用于连接在DE2上进行测试。
(2)编写数码显示模块led7s,用于显示频率计数的结果显示。
2、频率计设计硬件验证。编译、综合和适配频率计顶层设计文件,并编程下载进入目
标器件中。
4.实验步骤:
1. 构建一个工程名是我的学号f_test。
2、输入cnt10d的Verilog文本,将设计的Verilog程序输入,并存盘名为cnt10d.v,将
波形文件存盘为cnt10d.vwf。
module cnt10d(clk,rst,en,cq,cout);
input clk;
input rst;
input en;
output[3:0] cq;
output cout;
reg[3:0] cq;
reg cout;
always@(posedge clk or posedge rst) begin
if(rst) cq<=4'b0000;
else
if(en) begin
if(cq<9) begin cq<=cq+1'b1;cout<=1'b0; end
else begin cq<=4'b0000; cout<=1'b1; end
end
end
endmodule
3.设定cnt10d.v是目前的顶层文件由Processing->start->start annlysis & elaboration对程序进行初步的分析
4、对仿真工具设定为功能仿真,并将激励文件调入,提取功能仿真的网表。
5、进行功能仿真和时序仿真,并对结果进行分析。
功能仿真:
时序仿真:
6、仿照工程cnt10d的设计方法,再分别设计testctl、reg4、div2
7、decl7s和div8模块,并分别对testctl、decl7s、reg4进行功能仿真和时序仿真,对仿真结果进行分析。(程序及仿真见附录)
7、频率计设计硬件验证。编译、综合和适配频率计顶层设计文件,并编程下载进入目
标器件中。
8、用原理图方式将各模块连接起来。
9、锁定引脚(附四)并进行全编译。
10、如果编译没有错误,准备下载
5.实验结果:
连接下载后,数码管显示5885,与预期结果相同。
附录:
1.测频控制器,使得频率计能自动测频module testctl(clkk,cnt_en,rst_cnt,load);
input clkk; // 1HZ
output cnt_en;
output rst_cnt;
output load;
reg div2clk;
wire cnt_en;
reg rst_cnt;
wire load;
always@(posedge clkk)
div2clk<=~div2clk;
always @(clkk or div2clk) begin
if(!clkk & !div2clk) rst_cnt<=1'b1;
else rst_cnt<=1'b0;
end
assign load = ~div2clk;
assign cnt_en = div2clk;
endmodule
仿真图:
2.锁存器,将频率计的每位数锁存后输出module reg4(clk,cq,led );
input clk;
input[3:0] cq;
output[3:0] led;
reg[3:0] led;
always@(posedge clk)
led<=cq;
endmodule
仿真图: