专栏名称: 电子工程专辑
电子工程专辑是中国创建较早的电子工程类网站,是《电子工程专辑》杂志的有力补充。专注为工程师提供最新技术及实用方法的专业平台。包括:16个热门技术栏目在内的,新品信息和新闻报道、专题报道以及厂商应用报告、行业重要新闻的信息速递。
目录
相关文章推荐
掌中淄博  ·  央视,终于转播国足了!但不是18强赛…… ·  7 小时前  
掌中淄博  ·  央视,终于转播国足了!但不是18强赛…… ·  7 小时前  
深圳大件事  ·  一觉醒来,深圳网友炸锅:又被卷到了! ·  昨天  
深圳大件事  ·  春天乏力真相:不是懒而是...... ·  昨天  
四平发布  ·  我国首艘!交付使用 ·  3 天前  
51好读  ›  专栏  ›  电子工程专辑

FPGA学习之永恒的流水灯

电子工程专辑  · 公众号  ·  · 2017-05-14 07:45

正文

本文由面包板社区博主“小马哥”原创,未经允许不得转载!

面包板社区博客大赛正在进行中,了解详情请撮→ 2017面包板社区博客大赛!第一季开赛!

博客大赛奖项设置:

特等奖(1名):3000元 + 奖杯
一等奖(2名):1500元 + 奖杯
二等奖(3名):800元 + 奖杯
三等奖(5名):500元

博客链接:https://www.mianbaoban.cn/blog,手动输入网址前往开博参赛!


我们刚开始学习软件编程时,首先写的第一个代码是“Hello World”,而对于嵌入式或者单片机开发者,第一个硬件程序莫过于流水灯。


流水灯,顾名思义就是LED灯像流水一样闪烁。比如有n个灯,它的闪烁过程为:第1个灯亮->第2个灯亮->第3个灯亮->...->第n个灯亮->第1个灯亮->第2个灯亮->第3个灯亮->...一直这样循环下去,我们就会看到一个灯接着一个灯亮起来,如果亮的速度快一点儿的话,就像流水一样,也就是我们所说的流水灯。
我们这里以LED灯亮为高电平,灭为低电平,且有3个LED灯,将上述的操作过程抽象为数字时序,假设每个灯亮的时间为100ms,可得到如下的时序图:

是不是很清晰,每个灯亮的时间为100ms,第1个灯结束之后第2个灯亮,第2个结束之后第3个亮,第3个结束之后又开始第1个亮,依次循环。从图里面还可以看出从第1个灯开始到第3个灯结束,所用的总时间为300ms,其实这300ms就是循环一次的周期。


下面我们用FPGA来产生上面的时序并输出,使其对应到具体的LED灯上。这里还有个问题需要解决,我们FPGA的系统时钟为50MHz,其周期为20ns,现在我们需要一个周期为300ms的时间长度,那么需要计多少数,并且计数器需要多大的二进制位宽:Count=300ms/20ns=15000000=0xe4e1c0,将0xe4e1c0对应到二进制数上,其位宽为24位。既然知道了位宽及计数大小,下面我们开始编写流水灯的FPGA程序。



这就是流水灯的FPGA程序,使用Verilog语言编写,是不是很简单呀,是不是和C语言差不多呀~~~~


代码编写完毕之后,开始综合编译并编写TestBench测试文件进行仿真。



编写完TestBench测试文件之后调用Modelsim软件进行仿真,流水灯周期为300ms,这对Modelsim是一个很长的时间,此时基本电脑能卡死,仿真时间巨长,小编在这里试试看,能不能出现波形~~~~
终于仿真出来了,足足花了半个多小时的时间,才跑到600ms,内心是崩溃的~~~~


这就是仿真波形,是不是和我们前面抽象的数字时序波形一致呀~~~~
下面我们回到Quartus ii软件中,进行引脚分配和下载。







请到「今天看啥」查看全文