| **银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801**||| |技术支持邮件|Gingko@vip.163.com||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-03-02 | gingko | 初次建立 | ===== 实验十四:计数器实验——呼吸灯 ===== ==== 一、 实验目的与意义 ==== - 掌握计数器原理及实现方法。 - 掌握QuartusII的使用方法。 ==== 二、 实验设备及平台 ==== - iCore4T 双核心板。 - iTool A(或相同功能)仿真器。 - USB Type C 线缆。 - Keil MDK 开发平台。 - Quartus开发平台。 - 电脑一台。 ==== 三、 实验原理 ==== * 计数器是实现计数的一种最基本的加法运算。在FPGA中计数器的实质其实就是驱动参考时钟进行计数,每当触发事件到来,计数器参数实现自加,到某个状态进行清零操作。FPGA中常用计数器实现时钟分频、定时器、延时、计数、控制等功能,是FPGA实现功能中常用的一种逻辑电路。 ==== 四、 代码讲解 ==== * 本实验是通过计数器实现一个周期为1s的定时器,然后通过定时器产生的信号作为触发事件控制led电平高低切换,实现led的闪烁功能。驱动参考时钟为25MHz,也就是说时钟周期为40ns,1s的周期需要25000000个时钟周期,因此定时器的计数器需要在25000000个周期时进行清零操作。其代码如下: /*************************************************/ //利用计数器实现一个定时器,定时为1s reg [31:0]time_cnt; always@(posedge clk_25m or negedge rst_n) begin if(!rst_n) begin time_cnt <= 32'd0; end else begin if(time_cnt==32'd24999999) begin time_cnt <= 32'd0;///计数器清零 end else begin time_cnt <= time_cnt + 1'd1;//计数器自加1 end end end wire time_sig = (time_cnt==32'd24999999) ? 1'd1 : 1'd0;//定时器信号 ==== 五、 实验步骤及实验结果 ==== {{ :icore4t:icore4t_ide_1_37.jpg?600 |图14.1}} - 将硬件正确连接,如图14.1所示。 - 将编写好的代码进行编译,并下载到开发板中; - 观察实验现象——FPGA_LED闪烁,间隔1s。 ==== 六、 拓展实验 ==== - 通过Signaltap观察定时信号与定时计数器之间的关系。