《FPGA全程进阶---实战演练》第五章 基于74HC595的LED操作
1基础理论部分
1.1分频
分频,是的,这个概念也很重要。分频是指将一单一频率信号的频率降低为原来的1/N,就叫N分频。实现分频的电路或装置称为“分频器”,如把33MHZ的信号2分频得到16.5MHZ的信号,3分频得到11MHZ的信号,10分频得到3.3MHZ的信号。
分频主要是相对于主晶振来说,用不到那么高的频率,开发板一般根据具体需要会加入晶振,一般若是功耗较高可选用50MHz,其他情况可以相对调整,如24MHz等等。那么分频的典型应用,二分频,四分频,八分频,还有任意分频。
对于分频,我们可以利用quartus ii 自带的PLL进行分频,这样会占用一定的资源,也可以利用计数器实现一定的分频,注意,FPGA中不同于其他的CPU,没有计时器的概念,只有计数器。
1.2 LED
LED(light emitting diode),发光二极管,简称LED,是一种能够将电能转化成可见光的固态的半导体器件,可以直接把电转换成光。可以用在电路及仪器中作指示灯,或者组成文字或数字显示等。有不同化合物制成的二极管如砷,镓,磷等化合物制成,不同的化合物组合会显示不同颜色的光。
在设计LED的驱动电路时,不能直接接到3.3V或者5V来点亮,LED有额定电流,超过这个额定电流,LED就会烧掉,反接也会烧掉。一般的LED的额定电流从10mA~1A不等。FPGA开发采用的LED主要是贴片0805或者0603等,额定电路一般从10mA~30mA.
1.3 74HC595
开发板上面的LED控制是用串入并出/串出的移位寄存器74HC595芯片,芯片在电路中的接入情况如图5.1所示,实物图如图5.2所示。其中MR引脚直接接高电平,不进行复位。串出引脚9不接,不进行串出引脚的使用。输出使能引脚13直接接地,手册上建议。11和12引脚分别为移位寄存器时钟输入和存储时钟输入,分别引出。
图5.1 LED部分电路图
图5.2 实物图
2 verilog代码实现部分
2.1 74HC595 控制部分
14行定义了一个全局参数WIDTH = 8,用来控制程序下面所有的有关于数量的使用。
59行和60行分别定义了时钟信号和时钟使能信号,其中时钟信号sclk时钟周期前半段为低电平,后半段为高电平,可以实现对数据的中间采样,时钟使能信号led_time可以控制数据和时钟对齐。48行的state是一个状态改变的寄存器,只要数据一更新,state就有效。
75行定义了update_input信号用来检测输入数据的变化。
状态转换部分,在case语句中先检测state的初始位,然后进入循环操作,检测update_input是否使能,使能更新state,不使能保持state,更新后开始输出位数计数器led_cnt的计数
在121到123行,对输出的三路信号进行了约束限制,这种方法值的借鉴,在用不到时不输出信号,用到时输出信号,最大量的节省时钟。Led_data_out是先从高位输出到低位。
2.2 LED数据产生部分
在模块声明处,仍旧使用全局定义变量,控制模块中常量的使用。
计数模块,产生时钟使能信号。
Reg型变量Led_out_cnt是用来控制LED变化, 每当时钟信号使能开始计数,板卡上面一共有8个LED,所以计数8个即可。
LED解码部分,通过上面的led_out_cnt信号进行解码,控制LED的流水操作。
3 modelsim验证部分
3.1 led_generate 模块仿真
43行产生时钟信号,通过PERIOD进行周期控制。49~51产生复位信号,当时钟两次下降沿后复位信号拉高。56行用来监测led_out输出的时间,生成的脚本文件如图5.3所示。
图5.3仿真波形
图5.4是利用脚本文件生成,可以观察到实现了流水功能,且时间间隔1s;
图5.4 脚本生成文件
3.2 led_74HC595 模块仿真
前半部分和上述都一样,可以作为固定部分,大家可以自行复制即可。59行到63行增加了系统输入信号初始化部分。在输入信号输入前,最好最安全就是进行一次初始化。
75行到87行是对输入进行模拟输入,并监测led_data-out信号,输出的结果如图5.5所示,由图可以看到时间间隔为120ns。
图5.6是仿真波形,可以看到时钟led_sclk每次采样在输入信号的正中间位置,最大程度保证采样可靠。
图5.5 脚本文件
图5.6 仿真波形
《FPGA全程进阶---实战演练》第五章 基于74HC595的LED操作的更多相关文章
- 《FPGA全程进阶---实战演练》第一章之FPGA介绍
1 什么是FPGA FPGA也即是Field Programmable Gate Array的缩写,翻译成中文就是现场可编程门阵列.FPGA是在PAL.GAL.CPLD等可编程器件的基础上发展起来的新 ...
- 《FPGA全程进阶---实战演练》第二章之焊接板子及调试注意事项
1.若是读者第一次做板子,强烈建议画完PCB板后将PCB图打印出来,然后对照你买的芯片将芯片放置对 应的位置,然后查看所有的封装格式适不适合,否则等你做出板子来后再试,为时晚矣.笔者虽然知道要这么 做 ...
- 《FPGA全程进阶----实战演练》第二章之系统搭建
1 系统方案 对于设计一款硬件平台,首先要确定整体框架,确定各个模块所需要的芯片以及电压分配情况.图2.6是笔者曾经设计的硬件平台系统. 图2.6系统框图 对于选定一个系统方案之后,接下来做的要先去查 ...
- 《FPGA全程进阶---实战演练》第二章之硬件平台的搭建
学习FPGA,多多少少应该要懂得硬件电路的设计,这样不单单增加了自己的技能,而且还能够对FPGA的硬件实现有更好的了解. 1 模块划分 对于一个基本的FPGA硬件平台,常用的几个电路部分:(1)电源电 ...
- 《FPGA全程进阶---实战演练》第一章之如何学习FPGA
对于很多初学者,大部分都是急于求成,熟不知越是急于求成,最终越是学无所成,到头来两手空空,要学好FPGA,必须弄懂FPGA本质的一些内容. 1.FPGA内部结构及基本原理 FPGA是可以编程的,必须通 ...
- 《FPGA全程进阶---实战演练》第二章之PCB layout注意事项以及投板几点说明
上一篇博客讲述了各个部分的原理图,那么根据原理图画出PCB,其实PCB是一门很大的学问,想要掌握谈何容易.就笔者在画PCB时的一些注意事项做一些说明. 1.电源部分的电源线 ...
- 《FPGA全程进阶---实战演练》第九章 计数器要注意
本小节我们来做一个好玩的事情,就是计数器,还记得在做LED自加实验时我们就曾经提到过关于计数器的相关议题,那么这节我们就来讨论讨论. 探讨一下如下的问题:请用verilog记八个数的写法,分析这个可以 ...
- 《FPGA全程进阶---实战演练》第三十二章 Signal Tap II 应用实例
还有几天就要交文章终稿了,三年的研究生生活也快要结束了,时间飞快,岁月如梭,但学习技术的热情仍然不能松懈,不懂的东西太多,需要实时保持奋斗!!过些天会继续更新<FPGA全程进阶---实战演练&g ...
- 《FPGA全程进阶---实战演练》第四章之实验平台软硬件使用简介
本章主要是讲解读者在进行FPGA逻辑设计之前的准备工作,需要下载Quartus II软件和 Modelsim 软件,一个是用来进行FPGA逻辑设计,一个是用来对逻辑进行理论分析与验证. 1.1 qua ...
随机推荐
- Web大前端面试题-Day12
1.前端需要注意哪些SEO? 合理的title.description.keywords: 搜索对着三项的权重逐个减小, title值强调重点即可, 重要关键词出现不要超过2次, 而且要靠前, 不同页 ...
- python 文本分类
python 文本分类 pyhton 机器学习 待续...
- 多臂机测试, AB测试
bandit 强盗,土匪:恶棍:敲诈者 ['bændɪt] 多臂机 multi-armed bandit MAB 简写. one-arm bandit tiger ji 是一种自动AB测试的方 ...
- loj#2015. 「SCOI2016」妖怪 凸函数/三分
题目链接 loj#2015. 「SCOI2016」妖怪 题解 对于每一项展开 的到\(atk+\frac{dnf}{b}a + dnf + \frac{atk}{a} b\) 令$T = \frac{ ...
- 11.5 正睿停课训练 Day16
目录 2018.11.5 正睿停课训练 Day16 A 道路规划(思路) B 逻辑判断(枚举 位运算/DP 高维前缀和) C 区间(贪心/树状数组) 考试代码 A B C 2018.11.5 正睿停课 ...
- BZOJ.3585.mex(线段树)
题目链接 题意:多次求区间\(mex\). 考虑\([1,i]\)的\(mex[i]\),显然是单调的 而对于\([l,r]\)与\([l+1,r]\),如果\(nxt[a[l]]>r\),那么 ...
- 潭州课堂25班:Ph201805201 第九课 函数作用域和匿名函数 (课堂笔记)
匿名函数: lambda obj:str(obj).isdigit 语法规则: lambda 参数:表达式 列: ma1 = map( lambda obj:'binbin','abcdef' ) ...
- java程序的种类有三种
Application―Java应用程序”是可以独立运行的Java程序.由Java解释器控制执行.Applet ―Java小程序”不能独立运行(嵌入到Web页中). 由Java兼容浏览器控制执行. ...
- sessions
php session 用于存储有关用户回话的相关信息,或更改用户会话的相关设置,session变量保存的信息是单一用户的,并且可供应用程序中所有页面使用 session 的工作机制:为每个访问者创建 ...
- Android学习笔记(11):线性布局LinearLayout
线性布局LinearLayout是指在横向或是竖向一个接一个地排列.当排列的组件超出屏幕后,超出的组件将不会再显示出来. LinearLayout支持的XML属性和相应方法如表所看到的: Attrib ...