verilog实现流水灯500ms(循环移位)

您所在的位置:网站首页 keil8个流水灯编程 verilog实现流水灯500ms(循环移位)

verilog实现流水灯500ms(循环移位)

2024-07-09 16:23| 来源: 网络整理| 查看: 265

一、流水灯实验思路:

        流水灯就是使开发板上的4个LED灯按照一定的时间依次交替亮灭。比如,要设计一个流水灯,开始时LED0点亮,经过500ms后LED0熄灭,LEDO熄灭同时 LED1被点亮,再经过500ms后LED1熄灭,LED2点亮,依此类推。         由于二极管的阳极分别与FPGA相应的管脚相连,只需要改变与LED灯相连的FPGA管脚的电平,LED灯的亮灭状态就会发生变化。当FPGA管脚为高电平时, LED灯点亮;为低电平时,LED 灯熄灭。

二、实验要求:

        实现FPGA 控制4个LED流水循坏点亮每个LED,点亮的LED的时间500ms。

          那么如何实现500ms计数呢? 

        实现500ms计数就是将500ms(500_000_000)分成时钟周期计算,一个时钟周期为20,500_000_000÷20 = 25_000_000,所以计数的最大值是 25_000_000-1     / /最大值-1的原因是计数器计数是从0开始计数的,这里面的下划线没有任何意义,只是为了方便看数。

三、程序实现

首先我们需要知道流水灯的变化规律,如下图所示:

所以从上图我们知道,实现这个功能无非是对四位二进制数进行移位操作,左移右移都可以实现只是写法需要注意写法:

本程序使用两个always实现,功能文件如下:

        tb文件,本设计只需要观察时钟与复位信号,无需其他控制,较简单,tb文件如下:

        / / tb文件中,15行进行参数重定义的原因是,流水灯功能程序中DELAY_500MS的时间太长了,在modelsim进行波形仿真时,需要跑较长的时间,才能观察到波形的所有状态,所以这个时候,我们需要对计数器的参数进行重定义,格式为 (defparam  例化名.功能代码中的计数器参数 = 自己定义的新数值 )。【重定义参数是根据自己的需要,如果不在意波形跑的快慢可以不进行重定义参数,重定义参数不影响程序】

 

 波形图如下:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3