基于FPGA的单线LED调光芯片的设计
1.引言 2.芯片结构框图 图1所示为该调光芯片的结构框图,其中SDI用于接收数据,SDO用于数据的向后传输,振荡器为芯片提供时钟晶振,VLED为芯片提供电源,LDO为一线性稳压器,数字控制单元包括decode模块、PWM模块,OUTR、OUTG、OUTB为芯片的三个输出端,用于颜色显示。
3.芯片的工作原理 本芯片采用单线通讯方式传输数据,采用归零码的方式发送信号。系统在上电以后,SDI接收从控制器传输来的数据流,该数据流为基于归零码的二进制数据,当每个芯片接收36bit后,SDO输出口开始转发数据,为下一个芯片提供输入数据。RGB是工业界的一种颜色标准,是通过红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色。 系统OUTR、OUTG、OUTB三个PWM输出端经过数字控制单元,每通道接收到12bit数据,每通道有12位PWM灰阶控制,有4096灰度等级。每通道发出相应不同占空比的信号,如果输入的是RESET信号,系统将接收到的数据送LED显示。 4.主要功能模块的实现 4.1 decode模块 该模块用于数据的采集,判断输入的数据是1还是0,并且将数据传送到R、G、B端口。采用脉冲边沿检测法,获得输入数据的上升沿sdi_posedge和sdi_negedge信号,将一个数据周期的高电平时钟数、低电平时钟数、整个周期的时钟数分别存放在high_count、low_count、count_cycle三个寄存器中,在数据的下降沿来临时,将high_count寄存器中的数据与count_cycle寄存器右移一位的数据进行比较,当high_count中的数值大于count_cycle右移一位的数值时,我们判断此时输入的数据位1,反之为0.将此时获得的0或者1存储在8位寄存器data_reg的最后一位,每来一位数据下降沿,将sdi_negedge_count寄存器加1,当该寄存器的数值分别为12、24、36时,将8为寄存器data_reg中的数据赋与rdata、gdata、bdata用于PWM模块的编码。在sdi_negedge_count为36时,将frame_flag寄存器置1,表示该模块已经接收完数据,剩下的信号通过SDO转发出去。图2所示为各个寄存器的Modelsim的仿真波形。
4.2 PWM模块 该模块用于将decode模块采集的数据,用于PWM编码,输出不同占空比的波形。 图3中,当来一个时钟脉冲时,循环计数器的输出增大,寄存器锁存一个12bit信号,锁存信号不断与循环计数器的数据进行比较,当锁存信号小于循环计数器的输出时,比较器输出高电平,否则输出低电平。
循环计数器循环一个周期后,向寄存器发出一个使能信号EN,寄存器锁存下一个信号。 在每一个计数器计数周期,由于输入的调制信号的大小不同,比较器输出端输出的高电平个数不一样,因而产生出占空比不同的脉冲宽度调制信号。图4所示为各通道PWM波形。
5.芯片的级联验证和验证分析 该芯片采用单线传输的方式进行级联,它的特点是:仅用一根数据线进行信号传输,极大缩小了印刷电路板尺寸,降低了布线的难度,需要外围器件也少,同时提高了芯片的可靠性和稳定性。如图5所示为该芯片的三颗级联工作示意图。
数据从左侧S D I进入第一颗芯片,每个芯片截取36bit数据,剩下的数据进行转发,SDO1、SDO2、SDO3分别为前一个芯片的输出数据。
RTL级代码编写完毕之后,用Modelsim进行功能仿真,利用Synopsys公司的DesignCompile进行逻辑综合,利用Prime time工具进行静态时序分析,利用Cadence公司的Silicon Ensemble进行自动布局布线,在经过后仿测试,最后完成流片。图7所示为流片完成后的示波器测试波形图。
6.结论 本文利用QuartusII平台编写RTL代码,利用Modelsim仿真软件进行了功能仿真,最后用示波器测试实物,获取了理想的波形,基本达到了预期的设计要求,相应的RGB输出正确的波形。本文至此已基本完成设计的要求,但还需要优化代码,提高可靠性和稳定性才可以用于大规模生产。 |