《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 仿真波形

时间: 2024-08-05 19:39:49

《FPGA全程进阶---实战演练》第五章 基于74HC595的LED操作的相关文章

《FPGA全程进阶---实战演练》第二章之焊接板子及调试注意事项

1.若是读者第一次做板子,强烈建议画完PCB板后将PCB图打印出来,然后对照你买的芯片将芯片放置对 应的位置,然后查看所有的封装格式适不适合,否则等你做出板子来后再试,为时晚矣.笔者虽然知道要这么 做,但是笔者第一次发给工厂做回来的PCB发现有一个芯片封装画大了,而且那个芯片还是贴片封装的,这让 笔者心痛不已,300多大洋就这么要毁于一旦了. 2.在参考别人的电路时一定要注意,你想用的芯片型号的电路适不适合你参考的电路图,若是完全一致,那么可以直接照抄照搬,若是不一样,这时候要非常注意电路的设计

《FPGA全程进阶----实战演练》第二章之系统搭建

1 系统方案 对于设计一款硬件平台,首先要确定整体框架,确定各个模块所需要的芯片以及电压分配情况.图2.6是笔者曾经设计的硬件平台系统. 图2.6系统框图 对于选定一个系统方案之后,接下来做的要先去查看所选用的芯片的数据手册.那么查看手册一般有几点必须要注意,(1)FPGA的工作电压,确定若FPGA正常工作需要几档电压,好设计电源电路:(2)考虑功耗,这决定着需要多大功率的电源才能驱动芯片正常工作:(3)查看时钟网络的分布,这决定在进行逻辑设计时时钟分配的问题:(4)JTAG下载电路,这一部分是

《FPGA全程进阶---实战演练》第一章之FPGA介绍

1 什么是FPGA FPGA也即是Field Programmable Gate Array的缩写,翻译成中文就是现场可编程门阵列.FPGA是在PAL.GAL.CPLD等可编程器件的基础上发展起来的新型高性能产物,是作为专用集成电路(ASIC)领域中的一种半定制电路出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点.图1.1是Altera Cyclone V芯片. 图1.1 Altera Cyclone芯片 说到这里,不得不提ASIC,即专用集成电路(Application

《FPGA全程进阶---实战演练》第一章之如何学习FPGA

对于很多初学者,大部分都是急于求成,熟不知越是急于求成,最终越是学无所成,到头来两手空空,要学好FPGA,必须弄懂FPGA本质的一些内容. 1.FPGA内部结构及基本原理 FPGA是可以编程的,必须通过了解FPGA内部结构才能很好地理解为什么FPGA是可以编程的.学习FPGA不能像学习其他CPU芯片一样,看到Verilog或者VHDL就像看到C语言或者其它软件编程语言一样.一条条的读,一条条的分析.要冲破软件编程的思想. 那么FPGA为什么是可以“编程”的呢?首先来了解一下什么叫“程”.启示“程

《FPGA全程进阶---实战演练》第九章之有趣的计数器

本小节我们做一个好玩的事情,就是计数器,还记得在做LED自加实验时我们就曾经提到过关于计数器的相关议题,那么这节我们就来讨论讨论. 探讨一下如下的问题:请用verilog记八个数的写法,分析这个可以更好的理解触发器的工作原理. 1. reg [3:0]cnt; always@(posedge clk or negedge rst_n) begin if(!rst_n) cnt <= 4'd0; else if (cnt < 4'd8) cnt <= cnt + 1'b1; else cn

《FPGA全程进阶---实战演练》第二十一章 电源常用类型:LDO和 DCDC

高速电路中的电源设计 高速电路中的电源设计大概分为两种,一种是集总式架构,一种是分布式架构.集总式架构就是由一个电源输入,然后生成多种所需要的电压.如图1所示.这种架构会增加多个DC/DC模块,这样成本不可控,PCB面积也需要增加,但集总式分布架构可以提高整体电源转换效率. 图1 集总分布架构 分布式架构是先由一个模块生成一个中间电压,然后再去转换成其他单板所需要的电压,如图2所示.第一级输出可以要求有较大的噪声和纹波,第二级电源输出所需要的各种电源,这时必须考虑纹波和噪声问题.但分布式也有一个

《FPGA全程进阶---实战演练》第十二章 二进制码与格雷码PK

大家在写程序的时候,可能会听闻,什么独热码,什么格雷码,什么二进制码等等,本节意在解释这几种编码之间的区别和优势以及用verilog怎么去实现,下面先介绍这几种编码的区别. 1 基础理论部分 1.1 独热码 独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制. 如,有十六个状态的独热码状态编码应该是:0000000000000001,0000000000000010,0000000000000100,000000

《FPGA全程进阶---实战演练》第二十一章之 几种常用电平分析及特性

TTL,CMOS以及LVTTL,LVCMOS TTL和CMOS是数字电路中两种常见的逻辑电平,LVTTL和LVCMOS是两者低电平版本.TTL是流控器件,输入电阻小,TTL电平器件速度快,驱动能力大,但功耗大.CMOS是MOS管逻辑,为压控器件,且输入电阻极大,CMOS电平器件速度慢,驱动能力不足TTL,但功耗小.正是由于CMOS器件输入阻抗很大,外界微小的干扰就有可能引起电平的翻转,所以CMOS器件上未使用的输入引脚应做上下拉处理,不能浮空. 由于TTL和CMOS电平在0或1时不一样,所以需要

《FPGA全程进阶---实战演练》第三章之PCB设计之去耦电容

1.关于去耦电容为何需要就近摆放? 大多数资料有提到过,去耦电容就近放置,是从减小回路电感的角度去谈及摆放问题,其实还有一个原则就是去耦半径的问题,如果电容离着芯片位置较远,超过去耦半径,会起不到去耦效果. 考虑去耦半径的最好办法就是考察噪声源和电容补偿电流之间的相位关系.当芯片对电流的需求发生变化时,会在电源平面的一个很小的局部区域内产生电压扰动,电容要补偿这一电流(电压),就必须感知到这一电压扰动.信号在介质中传播需要一定的时间,因此发生局部电压扰动到电容感知到需要有一定的时间延迟,因此必然