您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > FPGA4位十进制频率计设计实验报告
FPGA实验报告题目:4位十进制频率计设计一、实验目的:设计4位十进制频率计,学习较复杂的数字系统设计方法。二、原理说明:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。这清0个信号可以由一个测频控制信号发生器产生,即图5-1中的TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的EN使能端进行同步控制。当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。三、实验步骤.1.在QUARTUSII软件下创建一工程,工程名为frequency,芯片名为EP2C35F672C6;2.输入10进制计数器模块,用于计算分频结果,并连接数码管显示。将其命名为cnt10d.v,然后保存在与工程相同的文件夹中;其功能和时序仿真波形分别如下:modulecnt10d(clk,rst,en,cq,cout);inputclk;inputrst;inputen;output[3:0]cq;outputcout;reg[3:0]cq;regcout;always@(posedgeclkorposedgerst)beginif(rst)cq=4'b0000;elseif(en)beginif(cq9)begincq=cq+1'b1;cout=1'b0;endelsebegincq=4'b0000;cout=1'b1;endendendendmodule分析:由波形可知,当rst为高时,cq为0,当en为高时,cq开始计数,可知结果正确。3.输入测频控制器模块,使得频率计能自动测频,将其命名为testctl.v,然后保存在与工程相同的文件夹中。moduletestctl(clkk,cnt_en,rst_cnt,load);inputclkk;//1HZoutputcnt_en;outputrst_cnt;outputload;regdiv2clk;wirecnt_en;regrst_cnt;wireload;always@(posedgeclkk)div2clk=~div2clk;always@(clkkordiv2clk)beginif(!clkk&!div2clk)rst_cnt=1'b1;elserst_cnt=1'b0;endassignload=~div2clk;assigncnt_en=div2clk;endmodule其功能和时序仿真波形分别如下:4.输入锁存器模块,将频率计的每位数锁存后输出,并将其命名为reg4.v,,保存.其功能和时序仿真波形分别如下:波形分析:由波形可知,当clk有效时,cq的值被锁存后,由led输出,由此可得,结果正确。modulereg4(clk,cq,led);inputclk;input[3:0]cq;output[3:0]led;reg[3:0]led;always@(posedgeclk)led=cq;endmodule5.输入产生测频器的clk(8Hz)d的分频模块并将其命名为div_50.v,保存.modulediv_50(clk2,Q2);inputclk2;outputQ2;regQ2;reg[23:0]count;always@(posedgeclk2)beginif(count==4999999)count=0;elsecount=count+2'b1;endalways@(count)beginif(count==4999999)Q2=1;elseQ2=0;endendmoduleendmodule6.输入f_in(频率任意定)时钟模块,用于连接在DE2上进行测试。并将其命名为div_27.v,保存.7.输入数码管显示模块并将其命名为decl7s.v,保存.其仿真波形如下所示:modulediv_27(clk1,Q1);inputclk1;outputQ1;regQ1;reg[27:0]count;always@(posedgeclk1)beginif(count==53999999)count=0;elsecount=count+2'b1;endendalways@(count)beginif(count==53999999)Q1=1;elseQ1=0;endendmodulemoduledecl7s(a,led7s);input[3:0]a;output[6:0]led7s;reg[6:0]led;always@(a)begincase(a)4'b0000:led[6:0]=7'b1000000;4'b0001:led[6:0]=7'b1111001;4'b0010:led[6:0]=7'b0100100;4'b0011:led[6:0]=7'b0110000;4'b0100:led[6:0]=7'b0011001;4'b0101:led[6:0]=7'b0010010;4'b0110:led[6:0]=7'b0000010;4'b0111:led[6:0]=7'b1111000;4'b1000:led[6:0]=7'b0000000;4'b1001:led[6:0]=7'b0011000;default:led[6:0]=7'b1111111;endcaseendassignled7s=led;endmodule8.用原理图方式将各模块连接起来9.锁定引脚后,重编译,然后下载。观察到EDA上数码管显示2000,结果正确。四.思考题.将频率计扩展为8位十进制频率计,并在测频速度上给予优化,使其能测出更高的频率。modulecnt10d(clk,rst,en,cq,cout);inputclk;inputrst;inputen;output[7:0]cq;outputcout;reg[7:0]cq;regcout;always@(posedgeclkorposedgerst)beginif(rst)cq=8'b00000000;elseif(en)beginif(cq9)begincq=cq+1'b1;cout=1'b0;endelsebegincq=8'b00000000;cout=1'b1;endendendendmodule
本文标题:FPGA4位十进制频率计设计实验报告
链接地址:https://www.777doc.com/doc-2647910 .html