首先第一个工程,为99.9%FPGA板卡的LED驱动程序
常规的多颗LED灯控制采用多个IO口直接驱动,如上图所示,比较占用IO资源,在FPGA IO 资源有限的情况下,可采用 74HC595 作为串转并的
电路实现。通过74HC595串转并IC的驱动,实现了3线驱动8个LED的电路。电路如下图所示
74HC595 内部为串转并的电路,查看手册,可以得到内部的逻辑电路图,如下所示:
如上图所示,74HC595 的内部结构图。这是一个纯数字电路,类似的电路
我们完全可以用 FPGA 设计出来,使用 FPGA 来做 IC 设计与此类似,总之自从有了FPGA,现场可编程逻辑电路,我们的设计开始变得更加灵活。结构图中所有输入输出信号都通过反相器进行信号的驱动能力增强,当然 FPGA没啥必要了。反相器 2 次反相可以直接忽略,信号电平最终不变。其实最要包括以下 7个信号:
当 74HC595 的寄存器复位后,移位输入 8 个数据,并且数据输入在时钟上升沿有效;而数据的输出通过锁存信号锁存输出。这里我们需要特别关心的是74HC595 的串行时钟最快能过达到多少速率。不然FPGA主时钟为 50MHz,如果输出时钟过高,会导致数据接受失败,或者错位等。查看手册 Page 3,74HC595给出了如下表格:
74HC595 支持我们系统 2-6V 的宽电压供电,FPGA系统在采用了3.3V 电源供电,这与手册 3.0V 较近。74HC595 的移位时钟当温度越高时,额定速率越慢。而我们一般在室温下操作,因此根据手册,这个时候最大时钟在15MHz 左右,了解这一参数,对于 74HC595 的驱动至关重要。
基于Verilog的74HC595驱动LED灯的工程如下
`timescale 1ns/1ns
module LED_Display_Design ( //global clock input clk, input rst_n, //74595 led interface output led595_dout, //74hc595 serial data input output led595_clk, //74hc595 shift clock (rising edge) output led595_latch //74hc595 latch clock (rising edge) ); 基于clk产生LED灯的8bit数据,74HC595实现多灯驱动显示视频请在微信公众号和视频号查看
|