广告

原创 FPGA学习之永恒的流水灯

2017-5-11 19:30 585 0 分类: FPGA/CPLD
    我们刚开始学习软件编程时,首先写的第一个代码是“Hello World”,而对于嵌入式或者单片机开发者,第一个硬件程序莫过于流水灯。
流水灯,顾名思义就是LED灯像流水一样闪烁。比如有n个灯,它的闪烁过程为:第1个灯亮->第2个灯亮->第3个灯亮->...->第n个灯亮->第1个灯亮->第2个灯亮->第3个灯亮->...一直这样循环下去,我们就会看到一个灯接着一个灯亮起来,如果亮的速度快一点儿的话,就像流水一样,也就是我们所说的流水灯。
我们这里以LED灯亮为高电平,灭为低电平,且有3个LED灯,将上述的操作过程抽象为数字时序,假设每个灯亮的时间为100ms,可得到如下的时序图:

640.webp (23)

是不是很清晰,每个灯亮的时间为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程序。

640.webp (24)

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

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

640.webp (25)

编写完TestBench测试文件之后调用Modelsim软件进行仿真,流水灯周期为300ms,这对Modelsim是一个很长的时间,此时基本电脑能卡死,仿真时间巨长,小编在这里试试看,能不能出现波形~~~~

终于仿真出来了,足足花了半个多小时的时间,才跑到600ms,内心是崩溃的~~~~

640.webp (26)

这就是仿真波形,是不是和我们前面抽象的数字时序波形一致呀~~~~

下面我们回到Quartus ii软件中,进行引脚分配和下载。

640.webp (27)

引脚分配结束之后,再次进行全局编译,然后下载程序至FPGA中。

640.webp (28)

我们来看看程序下载之后的实际效果~~~~

640.webp (29)

我们可通过抓取3个led灯两端的实际波形,通过示波器来观看,验证设计的正确性。

通过上面实际的示波器波形,可以证明,我们今天的设计是对的,完成了我们最终要实现的功能。小编的内心也是很开心的,哈哈哈~~~


这就是基于FPGA的流水灯程序,你学会了吗~~~~

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
小马哥电子 2017-08-17 17:17
数字收音机制作(1)
之前一直想做一款数字收音机来着,但是由于各种原因,刚画完原理图就放弃了。这次抽出时间,重新设计方案,制作一款小巧mini型的数字收音机。    本次重新设计方案之后,该收音机目前可具备的功能有:   ...
小马哥电子 2017-06-06 12:11
项目实战之MOS管啸叫
最近做一个点火器项目时要使用单片机的IO口控制一个36V的P沟道MOS管的开关,但是在电路的设计验真阶段,出现了MOS管的啸叫。MOS管竟然啸叫,我的天,这还是第一次碰到。下面我来还原一下场景。 首先...
小马哥电子 2017-05-23 22:21
FPGA学习之基于TLC549的直流电压采集及显示
最近由于毕业论文的事,小编是忙的不可开交,今天抽出点时间写篇文章,冒个泡,以防大家把我给遗忘了,哈哈哈哈~ 言归正传,今天我们的任务是通过FPGA控制TLC549模数转换芯片(ADC)采集直流电压值,...
小马哥电子 2017-05-18 18:55
FPGA学习之高速ADC采集
ADC(Analog-to-Digital Converter,模拟-数字转换器)在硬件电路中是经常见到的器件,音频信号的采集、温度的采集等等,凡是涉及到模拟信号转数字信号的电路,都会用到ADC。 A...
小马哥电子 2017-05-15 11:19
FPGA学习之基于动态数码管的时钟显示
动态数码管的原理之前已经说过,但是之前说的只是它的工作原理,今天我们来说说动态数码管的应用。今天通过FPGA编程,驱动8个动态数码管显示“时-分-秒”。 下图是4位共阳动态数码管的工作时序。某一时刻控...
小马哥电子 2017-05-12 22:44
FPGA学习之基于74HC164的静态数码管显示
今天我们通过两个静态数码管实现0-99的计数,且每500ms计一个数。 我们首先来看看基于74HC164的静态数码管显示的电路原理图~ 这就是两个静态数码管的原理图。大家从图中可以看出,两个数码管的...
我要评论
0
0
广告
关闭 热点推荐上一条 /2 下一条