欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    FPGA—4位十进制频率计.doc

    • 资源ID:4219649       资源大小:287KB        全文页数:13页
    • 资源格式: DOC        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    FPGA—4位十进制频率计.doc

    4位十进制频率计一、 设计目的用Verilog HDL语言设计一个能实现自动测频的4位十进制频率计。1)测量围: 1Hz9999Hz2)测量的数值通过4个数码管显示3)频率超过9999Hz时,溢出指示灯亮,可以作为扩大测量围的接口。二、 设计原理1、若某一信号在T秒时间里重复变化了N 次,则根据频率的定义可知该信号的频率fs 为:fs=N/T。2、当T=1s时,N就是测得的频率。3、根据以上所提出的方法,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器复位信号。这个复位信号可以由一个测频控制信号发生器产生,即图1中的TESTCTL,它的设计要,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的EN使能端进行同步控制。当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,每0.01ms锁存器进行一次锁存,并由数码管显示计数值。设置锁存器是为了使显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作准备。图1 原理图三、 设计步骤1、 新建cym工程文件。图2 建立工程由于是用VHDL语言进行设计,所以此处选择类型为HDL。之后一直点击确认即可。图3 芯片信息配置由于我们所采用的板子为RCXQ208_V5 FPGA开发板,所以配置如图所示。2、 新建各个分模块并输入代码。图4 建立VHDL文件3、 建立顶层文件为原理图型,例化各个模块并连接。图5 建立VHDL文件4、 对设计进行综合,如果出现错误,根据提示改正。图6 综合黄色感叹符号代表有警告,有些警告可以忽略,绿色小勾表示综合成功。5、 建立测试文件并进行仿真,验证设计。图7 建立激励文件之后一直点击确认即可。为了结合我们的下载板子的时钟信号,在测试文件中设置时钟单位为10ns,精度为1ps,如图:图8 设置时钟单位仿真文件应验证个端口的正确性。由于时钟单位为10ns,所以CLK_50M每一个仿真时间单位翻转一次即可产生一个50M的时钟信号。开始时进行一次复位,使各寄存器初值正确。control_port端为数码管位扫描端,所以其值一直在1110110110110111循环。data_out端为数码管显示的数字对应的七段数码管的二进制数据,它的值可以与control_port端对应到一起观察,转换为对应的十进制数据即是1110、1101、1011、0111对应的data端的信号由09循环。对测试文件进行检查,出现绿色小勾表示无语法错误,可以进行仿真。图9 6、 根据板子锁定引脚,并生成下载文件。下载板有两个时钟输出引脚,一个为40M的,一个为50M的。本设计采用的是50M,所以CLK_50M引脚锁定为引脚P80,即net "CLK_50M" loc = p80。CLR复位端连接一个轻触开关,为P57,即net "CLR" loc = p57。CARRY_OUT溢出标志端用一个LED灯来表示,net "CARRY_OUT" loc = p22。下载板数码管引脚图如图所示:图10 数码管端口图由图可知data端和control_port端的引脚应该分别锁定为:net "data_out0" loc = p102;net "data_out1" loc = p99;net "data_out 2" loc = p107;net "data_out 3" loc = p109;net "data_out 4" loc = p112;net "data_out 5" loc = p100;net "data_out 6" loc = p106;net "data_out 7" loc = p108;net "control_port0" loc = p127;net "control_port1" loc = p128;net "control_port2" loc = p129;net "control_port3" loc = p132;net "control_port4" loc = p120;net "control_port5" loc = p122;四、 仿真结果1、 时钟信号图11 验证CLK信号由图可知,CLK信号周期为20ns,时钟信号正确。2、 control_port信号图12 control_port信号由图可知,control_port信号在预料的循环之,所以正确。3、 data信号图13 data信号 第二个扫描周期图14 data信号 第三个扫描周期图15 data信号 第四个扫描周期图16 data信号 第五个扫描周期由上图综合可知,data信号在预料的变化之,所以正确。五、 体会本次设计由于有了上一次跑表的设计,所以有了几分心得。要做得快了不少,但还是有一定难度。把难度大的设计分为各个难度较小的模块来设计,本就是我们自顶向下设计的一种重要思想。该设计就用到了这种思想。在简化的同时,我们应该确保各个模块的正确性,所以各个模块我们都应测试、仿真之后在综合到一起。有时候分开各个模块都可以,但是综合在一起就有各种错误出现了。所以我们在综合代码的时候,一点要小心又小心,确保引脚的对应关系无误。逻辑顺序无误。六、 代码1、Verilog HDL代码:/*4位十进制计数器*/F_in待测频率,CLK_50M系统时钟,CLR复位标志,CARRY_OUT溢出标志/data_out数码管显示值,control_port数码管位选信号*/(1)十进制计数器模块module counter_10(CLK,CLR,En,data,CO);input CLK,CLR,En;output reg 3:0 data;output reg CO = 1'b0;always (posedge CLK or posedge CLR)beginif(CLR)begindata <= 4'b0;CO <= 1'b0;endelse if(En)beginif(data = 4'b1001)begindata <= 4'b0;CO <= 1'b1;endelsebegindata <= data + 1'b1;CO <= 1'b0;endendendendmodule(2)分频模块/*分频模块,用于产生测试用的频率,以及控制信号。*/module div_fre(CLK_50M,CLR,F_in,clk_1s,clk_100us);input CLK_50M,CLR;output reg F_in,clk_1s,clk_100us;reg 12:0t,cnt1,cnt2; parameter div_num = 13'h1;/13'h1387; /改变阈值即可调节F_in的频率围always (posedge CLK_50M or posedge CLR) /分频模块beginif(CLR)begincnt <= 13'h0;clk_100us <= 1'b0;endelse if(cnt = 13'h1387) /每0.1ms产生一个脉冲信号beginclk_100us <= 1'b1;cnt <= 13'h0;endelse begincnt <=t+1'b1;clk_100us <= 1'b0;endendalways (posedge clk_100us or posedge CLR) beginif(CLR) begincnt1 <= 13'h0;F_in <= 1'b0;endelse if(cnt1 = div_num) begincnt1 <= 13'h0;F_in <= F_in; endelsecnt1 <=t1 + 1'b1;endalways (posedge clk_100us or posedge CLR) beginif(CLR) begincnt2 <= 13'h0;clk_1s <= 1'b0;end/else if(cnt2 = 13'h1387) else if(cnt2 = 13'ha) begincnt2 <= 13'b0;clk_1s <= clk_1s; endelsecnt2 <=t2 + 1'b1;endendmodule(3)测频控制模块module test_ctl(clk_1s,cnt_en,clr_cnt);input clk_1s; / 1HZoutputt_en;output clr_cnt;/output load;reg div2clk = 0;wiret_en;reg clr_cnt,i;/wire load;always (negedge clk_1s) beginfor(i = 10;i>0;i=i-1)div2clk <= 1'b0;div2clk <= 1'b1;end always (clk_1s or div2clk) beginif(!clk_1s && !div2clk)clr_cnt <= 1'b1;else clr_cnt <= 1'b0;end/assign load = div2clk;assignt_en = div2clk; endmodule(4)锁存器模块module latch(clk,data_in,data_out);input clk;input 3:0 data_in;output reg 3:0 data_out = 4'b0;always (posedge clk)data_out <= data_in;endmodule(5)数码管显示模块module seg_display(CLK_50M,CLR,data_in_1,data_in_2,data_in_3,data_in_4,data_out,control_port);input CLK_50M,CLR;input 3:0 data_in_1,data_in_2,data_in_3,data_in_4;output reg 7:0 data_out;output reg 3:0 control_port;reg 15:0 scan_cnt;reg 1:0 seg;always (posedge CLK_50M or posedge CLR) /数码管的动态扫描显示,每1ms显示下一位beginif(CLR)beginscan_cnt <= 16'h0;seg <= 2'b00;endelse beginif(scan_cnt = 16'hc34f)scan_cnt <= 16'h0;elsescan_cnt <= scan_cnt + 1; if(scan_cnt = 16'h0)beginif(seg = 2'b11)seg <= 2'b00;elseseg <= seg + 1'b1;endendendalways (posedge CLK_50M or posedge CLR)beginif(CLR)begindata_out <= 8'b0;control_port <= 4'b1110;endelse case(seg)/数码管显示选择2'b00 : control_port,data_out <= 4'b1110,seg_data(data_in_1); 2'b01 : control_port,data_out <= 4'b1101,seg_data(data_in_2); 2'b10 : control_port,data_out <= 4'b1011,seg_data(data_in_3); 2'b11 : control_port,data_out <= 4'b0111,seg_data(data_in_4); default : control_port,data_out <= 12'hec0; endcaseendfunction 7:0 seg_data; /数码管值的选择input 3:0 x;case(x)0: seg_data = 8'hc0;1: seg_data = 8'hf9;2: seg_data = 8'ha4;3: seg_data = 8'hb0;4: seg_data = 8'h99;5: seg_data = 8'h92;6: seg_data = 8'h82;7: seg_data = 8'hf8;8: seg_data = 8'h80;9: seg_data = 8'h90;default: seg_data = 8'hff;endcaseendfunctionendmodule 2、测试代码: timescale 10ns / 1psmodule cym_cym_sch_tb();/ Inputs reg CLR; reg CLK_50M;/ Output wire CARRY_OUT; wire 7:0 data_out; wire 3:0 control_port;/ Bidirs/ Instantiate the UUT cym UUT (.CLR(CLR), .CARRY_OUT(CARRY_OUT), .CLK_50M(CLK_50M), .data_out(data_out), .control_port(control_port) );/ Initialize Inputsinitial beginCLK_50M = 0;forever #1 CLK_50M = CLK_50M;endinitial beginCLR = 1;#10 CLR = 0;endendmodule3、引脚锁定:net "CLK_50M" loc = p80;net "CLR" loc = p57;net "CARRY_OUT" loc = p22;net "data_out0" loc = p102;net "data_out1" loc = p99;net "data_out 2" loc = p107;net "data_out 3" loc = p109;net "data_out 4" loc = p112;net "data_out 5" loc = p100;net "data_out 6" loc = p106;net "data_out 7" loc = p108;net "control_port0" loc = p127;net "control_port1" loc = p128;net "control_port2" loc = p129;net "control_port3" loc = p132;net "control_port4" loc = p120;net "control_port5" loc = p122;

    注意事项

    本文(FPGA—4位十进制频率计.doc)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开