0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的流水灯设计

CHANBAEK 来源:小小研究生 作者:xxyjs2020 2023-06-23 16:54 次阅读

设计规划

依次点亮4个LED灯,实现流水灯的效果,两灯之间点亮间隔为0.5s,LED灯一次点亮持续时间0.5s。

LED灯低电平点亮,因此流水灯应该是1110-1101-1011-0111-1110-1101-...

图片

首先是时钟信号、复位信号,由于需要计时,我们还要产生一个计数器cnt。然后还需要产生一个cnt_flag脉冲标志信号作为流水切换的标志,每当计数器计数到24_999_998时拉高并只产生一个时钟的高电平(高电平出现LED状态就开始切换)。最重要的是,流水灯的实现是通过左移操作,无法直接通过led_out的左移实现,因此需要定义一个led_out_reg(led_out从1110左移一次是1100,会有两个灯点亮,而led_out_reg是LED的位反0001,左移一次是0010,取反后led_out是1101,就能实现流水的需求)。

编写代码

module water_led
#(
parameter CNT_MAX = 25'd24_999_999
)
(
input wire sys_clk , 
input wire sys_rst_n , 
output wire [3:0] led_out 
 );


 //reg define
 reg [24:0] cnt ;
 reg cnt_flag ;
 reg [3:0] led_out_reg ;


 //cnt:计数器计数500ms
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt <= 25'b0;
 else if(cnt == CNT_MAX)
 cnt <= 25'b0;
 else
 cnt <= cnt + 1'b1;


 //cnt_flag:计数器计数满500ms标志信号
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt_flag <= 1'b0;
 else if(cnt == CNT_MAX - 1)
 cnt_flag <= 1'b1;
 else
 cnt_flag <= 1'b0;


 //led_out_reg:led循环流水
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 led_out_reg <= 4'b0001;
 else if(led_out_reg == 4'b1000 && cnt_flag == 1'b1)
 led_out_reg <= 4'b0001;
 else if(cnt_flag == 1'b1)
 led_out_reg <= led_out_reg < < 1'b1; //左移
 assign led_out = ~led_out_reg;
 endmodule

三个中间信号的定义:cnt,cnt_flag,led_out_reg。

1、cnt:计数器变化的条件是时钟上升和复位有效(复位下降),复位信号有效时cnt变为低电平;计满时清零;其他时刻+1。

2、cnt_flag:计数器计满的脉冲标志信号,变化条件和cnt一样,复位有效时变为低电平;计满前一个时钟拉高;其他时刻都为0,这样就能成为一个脉冲信号,并在计满前拉高,标志led要左移。

3、led_out_reg:暂存led灯状态,可以直接对这个信号进行操作来控制LED灯。复位和初始时是最右边的灯亮,反推出led_out_reg=0001;当最左边的灯亮且计满标志信号拉高时,令最右边的灯亮led_out_reg=0001;当计满标志信号拉高时,led_out_reg左移。而控制LED电平的输出信号led_out是led_out_reg的按位取反。

image.png

编写testbench

`timescale 1ns/1ns
module tb_water_led();
//wire define
wire [3:0] led_out ;
 //reg define
 reg sys_clk ;
 reg sys_rst_n ;
 //初始化系统时钟、全局复位
 initial begin
 sys_clk = 1'b1;
 sys_rst_n <= 1'b0;
 #20
 sys_rst_n <= 1'b1;
 end


 //sys_clk:模拟系统时钟,每10ns电平翻转一次,周期为20ns,频率为50MHz
 always #10 sys_clk = ~sys_clk;
 //-------------------- water_led_inst --------------------
 water_led
 #(
 .CNT_MAX (25'd24)
 )
 water_led_inst
 (
 .sys_clk (sys_clk ), //input sys_clk
 .sys_rst_n (sys_rst_n ), //input sys_rst_n
 .led_out (led_out ) //output [3:0] led_out
 );
 endmodule

testbench代码是非常熟悉的,信号定义,初始化,实例化。

对比波形

图片

图片

1110-1101-1011-0111分别对应了十六进制的e,d,b,7

由于在testbench模块,为了节省时间将CNT_MAX设置成24,因此24个时钟脉冲LED的状态就会发生变化,波形和我们预想的一致。

分配管脚

图片

图片

图片

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21324

    浏览量

    593215
  • led灯
    +关注

    关注

    22

    文章

    1554

    浏览量

    107032
  • 计数器
    +关注

    关注

    32

    文章

    2123

    浏览量

    92986
  • 流水灯
    +关注

    关注

    21

    文章

    432

    浏览量

    59106
  • 时钟信号
    +关注

    关注

    4

    文章

    374

    浏览量

    28062
收藏 人收藏

    评论

    相关推荐

    基于Verilog FPGA 流水灯设计

    流水广告灯主要应用于LED灯光控制。通过程序控制LED的亮和灭, 多个LED灯组成一个阵列,依次逐个点亮的时候像流水一样,所以叫流水灯。由于其形成美观大方的视觉效果,因此广泛应用于店铺招牌、广告、大型建筑夜间装饰、景观装饰等
    发表于 08-09 15:14 1.7w次阅读
    基于Verilog <b class='flag-5'>FPGA</b> <b class='flag-5'>流水灯</b>设计

    FPGA流水灯的设计流程

    完成项目需求分析、电路图分析以及方案设计后,接下来可以进行FPGA设计了。如果用户的计算机已安装云源软件GOWIN FPGA Designer,双击桌面上的程序图标,即可打开GOWIN FPGA
    发表于 10-13 14:36 1150次阅读

    #硬声创作季 实验2 流水灯实验

    fpga流水灯
    Mr_haohao
    发布于 :2022年08月29日 20:05:15

    #硬声创作季 FPGA技术应用:流水灯设计

    fpga流水灯
    Mr_haohao
    发布于 :2022年10月19日 17:23:48

    #硬声创作季 数字设计FPGA应用:51.1流水灯的关键设计

    fpga流水灯数字设计
    Mr_haohao
    发布于 :2022年10月24日 03:10:25

    #硬声创作季 数字设计FPGA应用:51.2流水灯工程实现与测试

    fpga流水灯数字设计
    Mr_haohao
    发布于 :2022年10月24日 03:11:14

    FPGA流水灯实验

    FPGA初级实验 verilog let's start (流水灯实验)module countpro(sys_clk,rst_n,led); //接口定义input sys_clk,rst_n
    发表于 02-08 16:28

    求分享一个用simulink编的altera FPGA流水灯的simulink程序

    有大神能给我分享一个用simulink编的altera FPGA流水灯的simulink程序吗?我想学通过simulink来给FPGA编程,但是苦于没有教程或案例,求好心人给我分享一个程序吧,供我研究研究,感激不尽[qq]91
    发表于 08-05 11:06

    基于Verilog FPGA 流水灯设计_流水灯源码_明德扬资料

    LED流水广告灯工程说明在本案例中,使用常用的verilog语言完成该程序,设计并控制8个灯的花式或循环点亮;即上电后,实现左移和右移交替的流水灯。案例补充说明在FPGA电路设计中,尽管流水灯
    发表于 08-02 17:56

    如何上手FPGA实现简单的流水灯效果

    配置选择上篇【FPGA实验】流水灯实验记录了如何上手FPGA,实现简单的流水灯效果,本篇将稍微升级一些,通过按钮实现多种形态的流水灯。此次仍
    发表于 01-18 10:28

    利用FPGA DIY开发板控制流水灯功能实现

    asean的 FPGA DIY 流水灯视频
    的头像 发表于 06-20 05:04 2762次阅读
    利用<b class='flag-5'>FPGA</b> DIY开发板控制<b class='flag-5'>流水灯</b>功能实现

    数字设计FPGA应用:流水灯的设计

    LED流水灯这篇采用最简单的就是点亮一个灯延时一定时间,然后关闭,接下去点亮下一个灯,依次类推形成流水灯的效果
    的头像 发表于 12-04 07:09 3365次阅读
    数字设计<b class='flag-5'>FPGA</b>应用:<b class='flag-5'>流水灯</b>的设计

    使用FPGA实现流水灯设计的资料合集

    本文档的主要内容详细介绍的是使用FPGA实现流水灯设计的资料合集免费下载。
    发表于 01-18 08:00 30次下载

    如何通过FPGA实现一个流水灯

    流水灯,有时候也叫跑马灯,是一个简单、有趣又经典的实验,基本所有单片机的玩家们在初期学习的阶段都做过。本次我们也来介绍一下如何通过小脚丫FPGA实现一个流水灯
    的头像 发表于 06-06 10:42 7686次阅读
    如何通过<b class='flag-5'>FPGA</b>实现一个<b class='flag-5'>流水灯</b>?

    FPGA Vivado】基于 FPGA Vivado 的流水灯样例设计

    流水灯样例】基于 FPGA Vivado 的数字钟设计前言模拟前言Vivado 设计流程指导手册——2013.4密码:5txi模拟
    发表于 12-04 13:21 26次下载
    【<b class='flag-5'>FPGA</b> Vivado】基于 <b class='flag-5'>FPGA</b> Vivado 的<b class='flag-5'>流水灯</b>样例设计