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

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

3天内不再提示

【教程分享】FPGA零基础学习:LED流水灯设计

电子发烧友论坛 来源:未知 2023-03-14 09:20 次阅读

本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子信息通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。

系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。后续会陆续更新 Xilinx 的 Vivado、ISE 及相关操作软件的开发的相关内容,学习FPGA设计方法及设计思想的同时,实操结合各类操作软件,会让你在技术学习道路上无比的顺畅,告别技术学习小BUG卡破脑壳,告别目前忽悠性的培训诱导,真正的去学习去实战应用,这种快乐试试你就会懂的。话不多说,上货。

LED流水灯设计

在学习软件设计时,第一个例程总是“hello world!”,那么学习硬件时,也会有硬件的“hello world”------流水灯。本篇硬件基于叁芯智能科技的 SANXIN-B01开发板,如有想要入手,可查看以下链接,官方淘宝店已上架。

在FPGA开发板上有四个LED,我们要做的流水灯,顾名思义就是要LED像流水一样的点亮熄灭。直白点说就是,点亮第一个一段时间,然后熄灭第一个的同时,点亮第二个·····。在此,我们设置每一个LED点亮的时间为1秒钟。

硬件介绍

在我们的开发板上有四个LED,设计逻辑为:FPGA输出高电平时,LED点亮;FPGA输出低电平时,LED熄灭。

da425626-c205-11ed-bfe3-dac502259ad0.png

架构设计和信号说明

da5cd5fa-c205-11ed-bfe3-dac502259ad0.png

本设计的模块名称为ledrun。

da638f76-c205-11ed-bfe3-dac502259ad0.png


建立工程、新建文件等步骤在专辑前篇中已经明确罗列,以后将不再叙述。这里给出超链接,方便参考学习。

FPGA零基础学习:Intel FPGA 开发流程

设计代码

da7f116a-c205-11ed-bfe3-dac502259ad0.png

parameter可以定义一个参数(默认是32位)。在写代码时,对于某些数字,设计者经常利用定义参数的方式进行编写,方便修改,也方便阅读。

在硬件电路中,使用计数器当做计时器,每记录一个数字等于过去一个时钟周期。由于本设计中采用的clk为50MHz,所以经过50_000_000(在verilog中,如果是描述数字,中间的下划线只起到分隔的作用,不影响数值的大小)个周期正好为1秒钟。由于计数器是从0开始计数,所以计数器只需要记录到50_000_000-1即可。

为了能够记录到50_000_000-1这么大的数字,所以定义了一个26位的计数器cnt(参考附录1:设计中位宽的概念和计算位宽的小技巧)。

在verilog中,“{}”( 大括号)的第一个特殊作用为位拼接。{a,b}相当于将a和b拼接为一个整体,并且是高位为a,低位为b。

当led输出为4’b0001时,第一个led点亮;经过1秒钟,输出4’b0010时,第二个led点亮;经过1秒钟,输出4’b0100时,第三个led点亮;经过1秒钟,输出4’b1000时,第四个led点亮;经过1秒钟,输出4’b0001时,第一个led点亮······按照上述的过程周而复始,就形成了流水灯。

不难发现,led的输出,一直为3个0,1个1。并且1的位置每1秒钟移动一次,从头到尾,然后又到头。这种现象可以利用移位的思想进行实现。即:led[3]<=led[2]; led[2]<=led[1]; led[1]<=led[0]; led[0]<=led[3];如果将被赋值的组成一个整体,那就是led,赋值的组成一个整体就是{led[2:0], led[3]}。

仿真代码

da8e9bc6-c205-11ed-bfe3-dac502259ad0.png

$stop是一个系统任务,功能为将modelsim的仿真停止。

设置好testbench后,运行分析综合后,打开RTL仿真。

波形分析

在modelsim中,打开sim窗口,选择ledrun_tb下的ledrun_inst。

daa7a602-c205-11ed-bfe3-dac502259ad0.png

打开objects,将cnt选中。

dabaa478-c205-11ed-bfe3-dac502259ad0.png

objects窗口中显示在sim窗口中选中模块中所有的信号。

右击,将其添加入波形窗口。

dac2e110-c205-11ed-bfe3-dac502259ad0.png

返回到wave窗口中,cnt信号已经添加到wave窗口中。由于新添加进来,没有数据(no data)。

dacbdd88-c205-11ed-bfe3-dac502259ad0.png

点击restart。

daecd9a2-c205-11ed-bfe3-dac502259ad0.png

restart按钮为重新运行波形,点击后,软件会询问是否保持各种属性,点击ok即可。

db08dd8c-c205-11ed-bfe3-dac502259ad0.png

wave窗口中所有的波形都处于no data 状态。点击run –all按钮,开始运行波形。

db23072a-c205-11ed-bfe3-dac502259ad0.png

运行后,会自动停止。停止在tb文件中的$stop处。

返回wave窗口,各个信号都会有波形。

设置cnt的信号进制为无符号的十进制:右击cnt信号,选择radix中的unsigned。

db396dee-c205-11ed-bfe3-dac502259ad0.png

把光标放到复位结束时,选择放大波形。

放大按钮的左侧第一个按钮为全局缩放,功能为将所有运行波形,显示到目前的窗口里;左侧第二个为缩小。最左边和最右边的按钮暂时用不到,这里不再介绍。

db433f4a-c205-11ed-bfe3-dac502259ad0.png

可以看到,在复位结束后,cnt信号每一个时钟周期都会增加1。

由于我们设计的流水灯是每1秒钟流动一个,在上述的仿真中,led数值是不会变化的。如果仿真几秒钟的话,仿真的时间会比较长。在此不建议仿真几秒钟的时长,有可能会导致电脑卡住。

仿真时,可以将T_1s的值,改成一个较小值。例如:5。然后在此编译仿真。

quartus的编译器中,修改完后。进行综合分析,保证没有任何语法错误。在之前打开的modelsim中,打开library窗口,找到最上面的work,打开其前面的“+”。

db490ace-c205-11ed-bfe3-dac502259ad0.png

选中刚才修改过的文件,右击,选择recompile。此时,modelsim会重新编译此文件。

回到wave窗口中,点击restart,run-all。运行波形。

能够清楚的看到,led在进行移位,并且都是5个周期移动一次。

db635e4c-c205-11ed-bfe3-dac502259ad0.png

仿真通过后,关闭modelsim。回到quartus中,将参数修改成为50_000_000,综合分析后,分配管脚。布局布线,生成配置文件,进行下板测试。

开发板上的四个LED开始做流水状点亮。


本文由电子发烧友社区发布,转载请注明以上来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com

db7f1e70-c205-11ed-bfe3-dac502259ad0.png

热门推荐干货好文

1、RK3568!四核64位ARMv8.2A架构,汇聚编译源码及实战样例

2、开源作品秀,教你如何DIY一款自己的声源跟踪小车

3、从零入门物联网OH开源平台,从简单到高阶项目,创客电子爱好者都爱用!

4、低成本ESP32方案,支持OpenHarmony系统开发(附10+项目样例Demo)

5、从0到1玩转瑞萨RA4系列开发板,教你变着花样玩板子

6、四核64位,超强CPU ,看RK3568“竞”开发板DEMO!

7、人工智能也能这么玩, 简单快速入手,还能自定义AI运算

8、全部开源 | 基于全志V85X的运动相机,工业网关,可穿戴式摄像头

9、高性能双核RISC-V,满足大多数开发,这款国产MCU工程师都爱


原文标题:【教程分享】FPGA零基础学习:LED流水灯设计

文章出处:【微信公众号:电子发烧友论坛】欢迎添加关注!文章转载请注明出处。


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

原文标题:【教程分享】FPGA零基础学习:LED流水灯设计

文章出处:【微信号:gh_9b9470648b3c,微信公众号:电子发烧友论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    零基础入门PCB工程师

    各位前辈大家好,零基础入门PCB工程师,有什么学习资料推荐吗?
    发表于 11-27 16:54

    基于51单片机的跑马灯/流水灯系统

    具体实现功能(1)9种LED流水灯模式通过按键进行切换,数码管显示流水灯模式。(2)通过加减按键可以切换每种LED流水灯的速度。仿真演示视频
    的头像 发表于 10-22 14:12 177次阅读
    基于51单片机的跑马灯/<b class='flag-5'>流水灯</b>系统

    FPGA 实验一:流水灯模块

    实验一:流水灯模块 对于发展商而言,动土仪式无疑是最重要的任务。为此,流水灯实验作为低级建模II的动土仪式再适合不过了。废话少说,我们还是开始实验吧。 图1.1 实验一建模图。 如图1.1 所示
    发表于 06-10 09:38

    单片机POV LED流水灯制作

    电子发烧友网站提供《单片机POV LED流水灯制作.docx》资料免费下载
    发表于 05-28 14:34 3次下载

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

    )改变继而调整流水灯的状态; 按键消抖模块 前后抖动时间约为5~10ms,取按键抖动区间开始标识,持续10-20ms后标识归,在抖动区间内输出保持,非消抖区间,按键状态输出。 LED控制模块
    发表于 04-29 16:06

    【紫光同创盘古PGX-MINI-4K教程】——(盘古PGX-MINI-4K开发板/PGC4KD-6ILPG144第二章)LED 流水灯实验例程

    载 jtag 调试接口, 预留两组 20PIN 扩展 IO、数码管、按键、led 灯等硬件资源,为用户提供基本的 开发环境。 二:实验目的掌握流水灯原理并实现流水灯 三:实验要求流水灯
    发表于 03-26 16:24

    【紫光同创盘古PGX-Lite 7K教程】——(盘古PGX-Lite 7K开发板/PGC7KD-6IMBG256第二章)​LED 流水灯实验例程

    流水灯原理并实现流水灯 三:实验要求流水灯:8 个 LED 以 0.5s 间隔接替闪烁 四:实验原理相比上一个 LED 闪烁的实现,只需
    发表于 03-20 15:07

    51单片机流水灯制作

    流水灯学习51单片机的一个基本项目,是我们对单片机IO口输出认识的基本项目。当然学会了花样流水灯也很好玩。 下面就分享一种51单片机流水灯制作的方法。 一、
    的头像 发表于 02-26 10:06 1543次阅读
    51单片机<b class='flag-5'>流水灯</b>制作

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

    5~10ms,取按键抖动区间开始标识,持续 10-20ms 后标识归,在抖动区间内输出保持,非消抖区间,按键状态输出。 LED 控制模块功能 3 种流水灯模式有按键传递过来的计数控制切换,每一个
    发表于 01-05 11:22

    PLC控制8盏流水灯电路原理图和实际接线图详解

    PLC控制8盏流水灯电路原理图和实际接线图
    的头像 发表于 12-27 11:47 6248次阅读
    PLC控制8盏<b class='flag-5'>流水灯</b>电路原理图和实际接线图详解

    零基础入门 Hyperlynx 仿真教程

    电子发烧友网站提供《零基础入门 Hyperlynx 仿真教程.pdf》资料免费下载
    发表于 12-22 10:49 31次下载

    【每周一练】盘古1K开发板 练习一:LED流水灯实验

    查看附件中的快速使用手册。 LED流水灯实验 本次实验实现LED流水灯,使用的到的硬件为LED灯,在【每周一练】小眼睛
    发表于 12-21 00:20

    【每周一练】盘古1K开发板 练习一:LED流水灯

    实验目的 熟悉PDS开发流程,掌握流水灯原理并实现流水灯。 实验要求 设计8个LED以0.5s间隔接替点亮。 学习心得 实现了IO控制,点亮了LED
    发表于 12-10 16:39

    【每周一练】盘古1K开发板 练习一:LED流水灯实验学习

    实验目的 熟悉PDS开发流程,掌握流水灯原理并实现流水灯 实验要求 设计8个LED以0.5s间隔接替点亮 实现代码 `define UD #1 module led
    发表于 12-09 14:20

    【每周一练】+盘古1K开发板+1. 流水灯实现

    License)链接”下面提供的软件即可。 2 开发学习 参考“1K2K链接”下面提供的“MES2KG”,里面有示例代码和说明,我们可以参考这些入门。 下面就是我实现流水灯的过程。 2.1 新建
    发表于 12-08 00:30