完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`勇敢的芯伴你玩转Altera FPGA连载56:流水灯实例 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1i5LMUUD 如图8.7在SF-CY4开发板的左上角有8个LED指示灯。 图8.7 电路LED实物照片 如图8.8所示,这些LED的正极连接510欧姆限流电阻到3.3V电压,负极都连接到了FPGA的IO引脚上。因此,FPGA可以通过引脚的高或低电平控制LED的亮灭状态。 图8.8 LED电路 本实例,通过FPGA内部的定时器,循环点亮每个LED,达到流水灯的效果。如图8.9所示,8个LED指示灯,我们依次给他们赋值,每次只有一个LED点亮,每次点亮某个LED的时间一定(固定延时)。8个LED依次被点亮一次,如此循环便成就了流水灯的效果。 图8.9 流水灯示意图 本实例的工程代码如下。 module cy4( input ext_clk_25m, //外部输入25MHz时钟信号 input ext_rst_n, //外部输入复位信号,低电平有效 output reg[7:0] led //8个LED指示灯接口 ); //------------------------------------- reg[19:0] cnt; //20位计数器 //cnt计数器进行循环计数 always @ (posedge ext_clk_25m or negedge ext_rst_n) if(!ext_rst_n) cnt <= 20'd0; else cnt <= cnt+1'b1; //------------------------------------- //计数器cnt计数到最大值时,切换点亮的指示灯 always @ (posedge ext_clk_25m or negedge ext_rst_n) if(!ext_rst_n) led <= 8'b1111_1110; //默认只点亮一个指示灯D2 else if(cnt == 20'hfffff) led <= {led[6:0],led[7]}; //循环移位操作 else ; endmodule 这里只有两个很简单的always语句。在第一个always语句中,我们对计数器cnt循环计数,cnt为20位宽,从0开始不断的计数到最大值20’hfffff,然后下一个计数值虽然溢出,但实际上又返回计数值0,然后重新计数,如此反复。一个完整的cnt计数周期的时间,大家可以算算,时钟信号ext_clk_25m是25MHz,即40ns,一个计数周期是2的20次方,即1048576,那么一个计数周期就是40ns*1048576,约为42ms。 再来看第二个always语句,复位状态下给8个LED赋初始值8’b1111_1110,也就是只有led[0]是点亮的。而正常运行时,判断cnt计数值是否为20’hfffff,也就是说每一个cnt计数周期,都会做一次这样的处理:将led循环左移一位,从而实现LED流水切换的效果。 ` |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
881个成员聚集在这个小组
加入小组4490 浏览 0 评论
特权同学 Verilog边码边学 Lesson01 Vivado下载与安装
2603 浏览 1 评论
玩转Zynq连载50——[ex69] FIR滤波器IP仿真实例
4284 浏览 2 评论
玩转Zynq连载49——[ex68] MT9V034摄像头的图像FFT滤波处理
5231 浏览 1 评论
玩转Zynq连载48——[ex67] Vivado FFT和IFFT IP核应用实例
5236 浏览 0 评论
1916浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 11:26 , Processed in 0.715899 second(s), Total 72, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号