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

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

3天内不再提示

【紫光HiYou开源入门轻量级PCIE开发板PG2L25G】实验例程2-基于紫光FPGA 的键控流水灯实验例程

jf_04691258 来源:jf_04691258 作者:jf_04691258 2026-05-20 11:48 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

FPGA技术于5GAI及低空经济等新兴领域持续“破圈”、国产替代加速的宏大背景下,小眼睛科技联合紫光同创及电子发烧友共同发起了“拥抱开源——一起来做FPGA开发板”的项目。历时半年,集结了100多位来自各行各业的工程师智慧,我们成功打造了这款凝聚集体心血的紫光HiYou开源开发板(OPHW-25H)。

这款基于国产紫光同创Logos-2系列芯片的开发板,不仅是千元内入门级产品中唯一配备PCIe接口的轻量级利器,更实现了从硬件设计到底层代码的全方位开源,旨在为广大开发者提供一个高性价比、高扩展性的国产FPGA学习与验证平台,共同点燃技术创新的火花。

wKgZO2oNHy2AXNJ1AAIhcITWs8A922.png

1.实验简介

实验目的:

OPHW-25开发板有4个用户LED灯,FPGA输出低电平时对应的LED灯亮灯(详情请查看“OPHW-25开发板硬件使用手册”)。由USER_BUTTON1按键输入,切换USER_LED0~USER_LED3的输出效果。

实验环境:

Window11

PDS2022.2

硬件环境:

OPHW-25开发板

2.实验原理

实现框架如下:

wKgZO2oNLXmALfvxAAA96pMAiVI212.png

(1)顶层实现按键切换LED的流水灯状态;

(2)需要设计一个输入控制模块及一个输出控制模块;

这个实验带大家将多个模块整合成为一个工程,涉及到的知识点有子模块设计、模块例化;子模块的设计主要是依据功能定位,确定输入输出,再做具体的设计;

模块例化方式如下:

wKgZPGoNLaSAYIPkAABlYH8uTsU262.png

2.1.按键控制模块功能

接收按键输入信号。统计按键按下次数,由于流水灯模式是3种,计数统计范围是0~2循环,将计数结果传递给LED控制模块;

根据需求输入信号有:时钟,按键;输出信号有:流水灯控制信号;

内部功能处理:

<1>内部需要对按键信号做消抖处理;

<2>按键触发计数器(计数值输出)改变继而调整流水灯的状态;

wKgZO2oNLcOAZfZ6AABqE4Uu_pk130.png

2.2.按键消抖模块

wKgZPGoNLdSAEsV6AACdzLqFroM950.png

前后抖动时间约为5~10ms,取按键抖动区间开始标识,持续10-20ms后标识归零,在抖动区间内输出保持,非消抖区间,按键状态输出。

2.3.LED 控制模块功能

3种流水灯模式有按键传递过来的计数控制切换,每一个LED的显示状态完整后进入下一模式初始化。根据需求可得到如下信息:

输入信号:时钟,流水灯模式控制信号;出信号:8bit位宽的LED控制信号;功能处理注意事项:流水灯状态切换点,不同状态的切换时如何初始化;

3.实验源码设计

3.1.顶层文件源码

wKgZPGoNLgGAKhOJAACHYjwD-BI246.png

3.2.按键控制模块

wKgZPGoNLiCAJz1xAAAxaf4K0OY741.pngwKgZO2oNLjuAUPvNAADqyziVn9E395.png

整个模块主要功能是对外部输入的按键信号进行消抖,并通过计数器实现按键多次按下时的模式切换控制。

在10-21行,这里实例化了一个btn_deb_fix模块,对输入key进行消抖处理。由于机械按键在按下和释放时会产生抖动,所以必须经过消抖电路,输出稳定的btn_deb信号。参数设置了单通道按键(BTN_WIDTH=1)和延迟阈值(BTN_DELAY=20'h7_ffff),确保按键信号稳定后才有效。

在23-27行,通过一个时序寄存器btn_deb_1d保存消抖信号的一个时钟周期延迟。这样可以配合当前周期的btn_deb,用来检测按键的边沿变化。

重点逻辑在29-39行:定义了一个2位寄存器key_push_cnt,用来计数按键的按下次数。在 always块中,通过条件if(~btn_deb&btn_deb_1d)检测到按键从按下到释放的上升沿(即一次有效的按键动作)。每次检测到有效按键动作时,计数器key_push_cnt+1。计数器达到2'd2时,再次按键会将其清零,形成一个0→1→2→0的循环计数。

最后在41行,将key_push_cnt的值输出到ctrl。这样ctrl就会随着按键次数循环变化,通常可用来切换工作模式,按一次进入模式1,按两次进入模式2,再按一次回到模式0

总体说btn_deb_fix模块解决了机械按键抖动问题;边沿检测逻辑确保每次按键只触发一次计数;2位计数器实现了多模式循环切换功能;输出ctrl作为最终控制信号,直接驱动其他模块。

3.3.按键消抖模块

wKgZPGoNLlyAexcaAAEx6M6-r0A729.pngwKgZPGoNLn6ATHZ_AABP9sIkuCk787.png

代码的25行到57行是按键消抖的核心实现,主要用于对多路机械按键信号进行消抖,输出稳定的按键状态。这里只讲解主要实现的功能。首先代码的20-23行,通过一个时钟上升沿触发的always块,将输入按键状态寄存到btn_in_reg,这是为了后续检测按键边沿变化,保证时序逻辑能够正确捕捉按键的跳变。接着在生成块中,对于每一路按键,都存在三个always块,分别用于抖动检测、计数器累加和消抖输出。

代码的31-37行是抖动检测逻辑。当上一周期的按键状态btn_in_reg[i]与当前按键状态 btn_in[i]不一致时,说明检测到按键边沿变化,于是将抖动标志flag[i]拉高,表示当前按键进入抖动阶段;如果计数器cnt[i]已经达到设定的消抖时间BTN_DELAY,则将flag[i]清零;否则保持原状态不变。这个逻辑保证了按键在刚触发或释放的瞬间进入抖动阶段,抖动阶段持续时间由计数器控制。

代码的41-47行是计数器逻辑。在抖动阶段,计数器cnt[i]每个时钟周期累加,用于记录抖动持续时间,当计数器达到设定的消抖时间时自动清零。如果按键不在抖动阶段,计数器保持0。这一逻辑的作用是为抖动检测提供时间窗口,从而滤除机械按键可能存在的瞬时跳变。

代码的51-55行是消抖输出逻辑。当按键处于抖动阶段时,消抖输出btn_deb_fix[i]保持原状态不变,避免在抖动过程中出现不稳定输出;而在非抖动阶段,按键的实际状态直接传递到消抖输出,从而生成稳定的按键信号。这里需要注意,由于是时序逻辑,赋值总在下一个时钟周期才生效,所以在抖动开始或结束的边沿,输出信号会在下一个时钟周期才更新。时序逻辑的赋值总在下一个时钟周期生效,所以抖动开始或结束时的操作会在当前时钟周期观察到的输出上有延迟,但不会影响整体的消抖效果。

3.4.LED 控制模块

wKgZO2oNLpOAO3wvAAAj5Ey6P28858.pngwKgZPGoNLq6AFdV9AAE3ueW8uDk649.png

从代码的14行到58行是LED的闪烁控制逻辑,主要用于根据输入的控制信号ctrl实现不同模式的LED灯显示。这里只讲解主要实现的功能。首先代码的14-20行是时间计数器逻辑,通过一个50MHz时钟对led_light_cnt计数,每个时钟上升沿计数器加1,当计数器达到24,999,999时归零,这样形成了一个0.5秒的周期,用作LED模式切换的时间基准。

代码的23-27行用于保存上一个LED状态周期的控制信号值ctrl_1d,在每个计数器归零的时刻,将当前的ctrl保存到ctrl_1d中,以便在模式切换时判断当前周期是否与上一个周期不同,确保在切换模式时能够正确初始化LED状态。

代码的30-58行是LED状态变化逻辑。在每个计数器达到24,999,999,即0.5秒时,进入一个case分支,根据ctrl信号选择不同的LED显示模式。当ctrl=2'd0时,实现从高位到低位的LED流水灯,如果模式刚刚切换(ctrl_1d !=ctrl),则将LED状态初始化为8'b1000_0000,否则每个周期将LED状态循环右移一位,形成流水灯效果。当ctrl=2'd1时,实现隔一亮一交替的LED闪烁,如果模式切换则初始化为8'b1010_1010,否则每个周期取反LED状态,实现交替闪烁效果。当ctrl=2'd2时,实现从高位到低位的暗灯流水效果,切换模式时初始化为8'b0111_1111,否则同样通过右移循环实现流水效果。

assign 语句 assign led =led_status;将计算得到的LED状态输出到模块端口led,使外部能够看到LED灯的显示效果。不同模式下LED状态会按0.5秒周期循环变化。这个模块通过计数器实现时间基准,通过保存上一个控制周期的信号判断模式切换,并根据不同模式更新LED状态,实现从流水灯、交替闪烁到暗灯流水的多种LED显示效果

4.实验现象

每按下一次KEY1,LED灯状态切换一次,总共三种LED模式供循环切换;

LED模式一:从高位到低位的LED流水灯;LED模式二:隔一亮一交替点亮;

LED模式三:从高位到低位暗灯流水;

​审核编辑 黄宇

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

    关注

    1664

    文章

    22571

    浏览量

    640655
  • PCIe
    +关注

    关注

    16

    文章

    1502

    浏览量

    89129
  • 开发板
    +关注

    关注

    26

    文章

    6507

    浏览量

    121351
  • 紫光
    +关注

    关注

    2

    文章

    436

    浏览量

    35127
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    紫光HiYou开源入门轻量级PCIE开发板PG2L25G实验例程3-基于紫光FPGA 的UART 串口通信

    小眼睛科技联合紫光同创推出基于国产FPGA芯片的HiYou开源开发板(OPHW-25H),具备
    的头像 发表于 05-20 14:27 973次阅读
    【<b class='flag-5'>紫光</b><b class='flag-5'>HiYou</b><b class='flag-5'>开源</b><b class='flag-5'>入门</b><b class='flag-5'>轻量级</b><b class='flag-5'>PCIE</b><b class='flag-5'>开发板</b><b class='flag-5'>PG2L25G</b>】<b class='flag-5'>实验</b><b class='flag-5'>例程</b>3-基于<b class='flag-5'>紫光</b><b class='flag-5'>FPGA</b> 的UART 串口通信

    2024新品推荐|盘古200K开发板紫光同创PG2L200H,Logos2系列,资源丰富,功能强大

    Logos2系列PG2L200H开发平台。 一:开发板产品概述 盘古200K开发板采用核心
    发表于 12-28 17:05

    2024新品推荐|盘古100K开发板紫光同创PG2L100H,Logos2系列,性能全面提升

    /Logos2/Titan2/Compa全系列,即将重磅上市! 本期推荐 :盘古100K开发板(2024新版),基于紫光同创Logos2系列
    发表于 12-28 18:09

    【重磅新品】盘古100K开发板紫光同创PG2L100H,Logos2系列,性能全面提升

    /Logos2/Titan2/Compa全系列,即将重磅上市! 本期推荐 :盘古100K开发板(2024新版),基于紫光同创Logos2系列
    发表于 12-29 16:31

    紫光同创国产FPGA教程】——(PGL22G第二章)键控流水灯实验例程

    ) 一:盘古EU 22K开发板简介 盘古EU 22K开发板共有11个翠绿LED灯,其中1个是电源指示灯(POWER);2个是FPGA的运行状态指示灯:INIT和DONE;有8个
    发表于 01-05 11:22

    紫光同创盘古PGX-Nano教程】——(盘古PGX-Nano开发板/PG2L50H_MBG324第三章)键控流水灯实验例程

    适用于板卡型号:紫光同创PG2L50H_MBG324开发平台(盘古PGX-Nano) 一:盘古盘古PGX-Nano开发板简介PGX-Nano 是一套以
    发表于 04-29 16:06

    紫光同创FPGA入门指导:键控流水灯——紫光盘古系列50K开发板实验教程(2

    一、实验目的由 USER_BUTTON1 按键输入,切换 USER_LED1~ USER_LED8 的输出效果。二、实验原理实现框架如下:(1)顶层实现按键切换 LED 的流水灯状态;(2
    发表于 04-20 14:42

    紫光同创FPGA入门指导:键控流水灯——紫光盘古系列22K开发套件实验教程(二)

    盘古22K开发板(MES22GP)是基于紫光同创40nm工艺的Logos系列PGL22G芯片的一套全新的国产FPGA开发套件。
    发表于 08-04 14:08

    紫光同创国产FPGA教程】【PGC1/2KG第二章】LED 流水灯实验例程

    适用于板卡型号: 紫光同创PGC1/2KG开发平台(盘古1K/2K) 一:盘古1K/2K开发板
    发表于 08-09 11:58

    体验紫光PCIE之使用WinDriver驱动紫光PCIE

    )。 (7)修改好相关信号的引脚分配后,就可以生成bitstream了。 1.2 使用WinDriver驱动紫光PCIE: (1)FPGA端的程序可以提前固化好到开发板,然后将
    发表于 11-17 14:35

    紫光HiYou开源入门轻量级PCIE开发板PG2L25G实验例程1-基于紫光FPGA 的LED 流水灯

    深圳市小眼睛科技联合紫光同创推出基于国产FPGA芯片的HiYou开源开发板(OPHW-25H),
    的头像 发表于 05-20 11:07 27次阅读
    【<b class='flag-5'>紫光</b><b class='flag-5'>HiYou</b><b class='flag-5'>开源</b><b class='flag-5'>入门</b><b class='flag-5'>轻量级</b><b class='flag-5'>PCIE</b><b class='flag-5'>开发板</b><b class='flag-5'>PG2L25G</b>】<b class='flag-5'>实验</b><b class='flag-5'>例程</b>1-基于<b class='flag-5'>紫光</b><b class='flag-5'>FPGA</b> 的LED <b class='flag-5'>流水灯</b>

    紫光HiYou开源入门轻量级PCIE开发板PG2L25G实验例程5-DDR3 读写实验例程

    小眼睛科技联合紫光同创推出基于国产FPGAHiYou开源开发板(OPHW-25H),配备
    的头像 发表于 05-20 15:04 36次阅读
    【<b class='flag-5'>紫光</b><b class='flag-5'>HiYou</b><b class='flag-5'>开源</b><b class='flag-5'>入门</b><b class='flag-5'>轻量级</b><b class='flag-5'>PCIE</b><b class='flag-5'>开发板</b><b class='flag-5'>PG2L25G</b>】<b class='flag-5'>实验</b><b class='flag-5'>例程</b>5-DDR3 读写<b class='flag-5'>实验</b><b class='flag-5'>例程</b>

    紫光HiYou开源入门轻量级PCIE开发板PG2L25G实验例程7-光纤通信测试

    本文介绍了基于国产紫光HiYou开源开发板(OPHW-25H)的光纤通信实验。该
    的头像 发表于 05-20 18:23 26次阅读
    【<b class='flag-5'>紫光</b><b class='flag-5'>HiYou</b><b class='flag-5'>开源</b><b class='flag-5'>入门</b><b class='flag-5'>轻量级</b><b class='flag-5'>PCIE</b><b class='flag-5'>开发板</b><b class='flag-5'>PG2L25G</b>】<b class='flag-5'>实验</b><b class='flag-5'>例程</b>7-光纤通信测试

    紫光HiYou开源入门轻量级PCIE开发板PG2L25G实验例程6-基于UDP 的以太网传输实验例程

    深圳市小眼睛科技联合紫光同创推出国产开源FPGA开发板HiYou(OPHW-25H)。这款基于
    的头像 发表于 05-21 17:52 30次阅读
    【<b class='flag-5'>紫光</b><b class='flag-5'>HiYou</b><b class='flag-5'>开源</b><b class='flag-5'>入门</b><b class='flag-5'>轻量级</b><b class='flag-5'>PCIE</b><b class='flag-5'>开发板</b><b class='flag-5'>PG2L25G</b>】<b class='flag-5'>实验</b><b class='flag-5'>例程</b>6-基于UDP 的以太网传输<b class='flag-5'>实验</b><b class='flag-5'>例程</b>

    紫光HiYou开源入门轻量级PCIE开发板PG2L25G实验例程8-PCIE 通信测试

    国产FPGA开发板OPHW-25H问世,开启开源开发新时代 在5G、AI及低空经济快速发展的背景
    的头像 发表于 05-21 18:36 38次阅读
    【<b class='flag-5'>紫光</b><b class='flag-5'>HiYou</b><b class='flag-5'>开源</b><b class='flag-5'>入门</b><b class='flag-5'>轻量级</b><b class='flag-5'>PCIE</b><b class='flag-5'>开发板</b><b class='flag-5'>PG2L25G</b>】<b class='flag-5'>实验</b><b class='flag-5'>例程</b>8-<b class='flag-5'>PCIE</b> 通信测试