【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

从学习方法上说,fpga的学习方面和linux c开发有点相似。

fpga linux
语言 verilog,vhdl c,c++
开发工具 vivado,quartus gcc,g++
调试工具 chip scope,signal tap gdb
仿真 modelsim x86 linux虚拟机
运行 fpga开发板 arm linux开发板

通过上面的表格,可以看出来,不管是哪一种开发方法,都需要对应的语言、开发工具、调试工具、仿真平台和实际验证环境,这些都是少不了的。只不过,fpga侧重的是并发流水线,软件倡导的是顺序执行而已。

前面,我们讨论过计数器,也就是说从复位开始,计数器就会不停地计数下去。这么一直计数下去其实也是可以的,只要有这么一个需求就可以,或者只是想看一下计数器是不是真的会这么走下去。真实场景下面,更多的是用计数器来做一个定时器。比如,复位之后,计数器从0开始,等到计数到99的时候,就会恢复到0。这样一来,就好像有这么一个100的计数器,它会周期性的重新计数。设想一下,如果这个周期拓展到1s,那么其实就是一个1s的定时器了。不过,一般对fpga来说,1s的时间太长了,我们可以用wavedrom设计一个1周期为100的定时器。

{ "signal" : [{ "name": "clk",         "wave": "p......|.." },{ "name": "rst",     "wave": "010....|.." },{ "name": "cnt",     "wave": "x22345x|67", data:["0","0","1","2","3","99","0"] }
]
}

转变成时序图就是这样的,

所以,这个时候需要做的就是在之前的verilog代码上面添加一个判断语句,即

always@(posedge clk or posedge rst)if(rst)cnt <= 4'd0;else if(cnt == 4'd99)cnt <= 4'd0;elsecnt <= cnt + 1;

有同学也许会说,这和流水灯有什么关系。大家不要着急,关键是这里的cnt 99,完全可以用这一条件实现led的开和灭的功能。

{ "signal" : [{ "name": "clk",         "wave": "p......|.." },{ "name": "rst",     "wave": "010....|.." },{ "name": "cnt",     "wave": "x22345x|67", data:["0","0","1","2","3","99","0"] },{ "name": "led",     "wave": "x0.....|.1", },
]
}

上面的json转换成图形,就是这样的,

注意这里的cnt为99的时候,led就会跳转为1高电平。等到下一个99的时候再跳转为0,这样就实现了周期性熄灭的效果。写成verilog代码应该是这样的,

always @(posedge clk or posedge rst)if (rst)led <= 1'b0;else if(cnt == 8'd99)led <= ~led;

做到这一点似乎离我们的目标越来越近。大家可以想象一下如果有4个led灯,那么应该怎么处理。是不是可以把cnt分成4部分。99的时候,只有led1灯亮;199的时候,只有led2灯亮;299的时候,只有led3亮;399的时候只有led4灯亮。

{ "signal" : [{ "name": "clk",         "wave": "p.....|......|.." },{ "name": "rst",     "wave": "010...|......|.." },{ "name": "cnt",     "wave": "x2245x|6789x.|45", data:["0","0","1","2","99","100","101","102","199","200"] },{ "name": "led0",     "wave": "x1....|.0....|..", },{ "name": "led2",     "wave": "x0....|.1....|.0", },{ "name": "led3",     "wave": "x0....|......|.1", },{ "name": "led4",     "wave": "x0....|......|..", },
]
}

转换成图形就是这样的,

当然上面只是一种设计方法,大家可以集思广益,用自己的方法来设计出不一样的流水灯效果。流水灯固然简单,关键还是考察背后的思考过程。

学fpga(流水灯)相关推荐

  1. FPGA流水灯和跑马灯

    FPGA流水灯和跑马灯 流水灯和跑马灯的区别: 流水灯具体实现: 跑马灯具体实现: 流水灯和跑马灯的区别: 流水灯顾名思义就是让 LED 如同流水一般,从无灯亮,到亮一个,再到亮二个,以此类推,亮 3 ...

  2. 第八周---FPGA流水灯显示和串口循环输出实验

    文章目录 前言 1.流水灯显示 2.串口循环输出"Hello Nios-II"字符串到笔记本电脑 前言 学习 Quartus-II .Platform Designer.Nios- ...

  3. FPGA流水灯(间隔1S)

    代码: `timescale 1ns/1ns module zyl_light(input clk,input rst,output reg[3:0] led_out );//1s一次,计数50000 ...

  4. 米联客 ZYNQ/SOC精品教程 S01-CH04 VIVADO创建工程之流水灯

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  5. (37)FPGA花样流水灯设计(第8天)

    (37)FPGA花样流水灯设计(第8天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA花样流水灯设计(第8天) 5)技术交流 6)参考资料 2 FPGA ...

  6. 零基础学FPGA(五):时序逻辑电路设计之计数器(附有呼吸灯实验、简单组合逻辑设计介绍)

    目录 日常·唠嗑 前言 一.认清逻辑设计 二.时序逻辑电路设计 三.扩展:呼吸灯实验 日常·唠嗑 第一次建立<零基础学FPGA>专栏,是在2021年2月2日,已经过去了一年了,目前只更新了 ...

  7. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON3 LED流水灯

    LED流水灯例程讲解 若要观看该博客配套的视频教程,可点击此链接 开发板实物图 图1.FPGA设计流程 根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省去 ...

  8. FPGA极易入门教程----LED篇(1)跑马灯(流水灯)跑起来

    1.LED的基本原理 LED,又名发光二极管.LED灯工作电流很小(有的仅零点几毫安即可发光),抗冲击和抗震性能好,可靠性高,寿命长.由于这些优点,LED灯被广泛用在仪器仪表中作指示灯.液晶屏背光源等 ...

  9. FPGA学习笔记(1)简单的时序逻辑电路——流水灯

    FPGA学习笔记(1)简单的时序逻辑电路--流水灯 编程语言为Verilog HDL 原理 (1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次.开发板上的晶振输出时钟频率为50MHz ...

最新文章

  1. 政府要尽快对应用商店出台管理办法
  2. 【DIY】手把手教你 DIY 最便宜的 arduino 温湿度计图文
  3. Linux的/etc/init.d:用service命令可执行init.d目录中相应服务的脚本
  4. r语言直方图_R语言绘制频率直方图
  5. 算法设计与分析(第三周)递归实现全排列问题
  6. 如何将对象拼接成get传值的形式
  7. 关于NSString和NSMutableString的retainCount
  8. 自制hdmi线一头改vga图_东莞VGA数据线厂商价格
  9. 如何优化myeclipse.
  10. 软件界面是怎么做出来的_可可英语这个软件怎么样?了解的人出来说说真实情况...
  11. 使用lkjson处理Json数据
  12. 代码审计之rips之bluecms审计
  13. JAVA计算机毕业设计在线招投标系统Mybatis+系统+数据库+调试部署
  14. murmur3哈希算法 1
  15. 剑指 Offer17-21
  16. vb制作MP3播放器
  17. 2022-2028年中国植物工厂行业发展动态及投资规划分析报告
  18. 简易六自由度弹道解算软件
  19. 《走进计算机教室》教案,走进网络教案
  20. 《拆掉思维里的墙》 古典 (初读此书,相见恨晚!)

热门文章

  1. SharePoint JavaScript API in application pages
  2. DDL/DML/DCL/TCL基本概念
  3. EasyUI-dialog
  4. C#编写WINNT服务,随便解决安卓开发遇到的5037被众多程序无节操占用的问题
  5. SqlServer数据库同步方案详解
  6. Flash与数学:圆(2)
  7. 存储过程分页算法(收藏)
  8. awk命令过滤tomcat的访日日志中IP地址
  9. Luogu 3479 [POI2009]GAS-Fire Extinguishers
  10. 20-spring学习-Spring MVC基本操作