干 莽, 齐贵宝, 陈 捷, 宋占伟
(吉林大学 电子科学与工程学院, 长春 130012)
LCD(Liquid Crystal Display)液晶显示屏以其体积小、 色彩丰富、 亮度高和响应时间快等特色在消费电子产品的显示器中逐渐占据了主导地位[1]。国内液晶面板生产线虽然每年在逐步增加, 然而多为组装生产, 特别是大型LCD显示屏, 其驱动与控制IC(Integrated Circuit)采购权通常掌握在外方手中, 其技术为外方所垄断。而中小型显示面板与驱动控制IC的配合度较低, 厂家一般采用飞利浦、 NEC等半导体公司推出的一些专用控制芯片, 其成本较高, 但性能可得到一定保障。为节约成本, 许多厂商面向用户需求自行研发控制芯片。而控制芯片技术参差不齐, 导致了产品性能间较大差距[2,3]。笔者提出了一种将LCD控制芯片集成到FPGA(Field-Programmable Gate Array)中作为图形处理模块的解决方案, 其刷新效率高, 肉眼无法辨别图像刷新过程, 很好地实现了所需的功能。
系统分为外部输入接收、 SDRAM(Synchronous Dynamic Random Access Memory)控制器、 显示输出控制器三大部分, 考虑到SDRAM与外部数据输入设备、 LCD输出控制部分的时钟频率不一致, 笔者使用FIFO(First In First Out)实现不同速度的时钟匹配。系统总体模块的基本结构如图1所示。
图1 LCD控制器模块结构
由于设计中使用液晶的像素点较多, 加上像素的颜色位宽一般为16位或24位, 考虑到多缓冲区容量设计以及最大工作频率必须适应系统时钟要求, 通常选择的缓存容量至少是像素点个数的几倍以上。缓存通常使用SRAM或SDRAM作为随机存储芯片。对于大量像素点颜色信息的存储, SDRAM相比SRAM具有工作频率高、 存储容量大和成本低的特点, 然而SDRAM操作更复杂, 且必须保证一定时间间隔的刷新才能维持数据稳定[4,5]。使用SRAM作为缓存, 其容量太小, 实现双缓冲方式需要的存储容量太大, 成本较高。因此, 笔者改用一片8 MByte的Hynix SDRAM存储颜色, 数据总线宽度为16位, 最高时钟频率为143 MHz。
液晶的分辨率将决定驱动LCD需要的时钟频率, 笔者使用控制芯片为AT070TN83的5英寸液晶, 虽然屏幕较小, 但其分辨率达到800×480像素。因为FPGA的输出管脚已被其他存储设备占用了许多, 所以显示数据位宽只能使用16位565格式, 电源要求3.3 V, 背光电源5 V。根据规格书给定参数, 单帧行同步脉冲为NH=928个, 场同步脉冲为NV=525个, 因此, 当刷新率Nf=60帧/s时, 根据
freq=NH×NV×Nf
计算时钟频率freq至少为29.3 MHz。系统时钟使用133.3 MHz工作, 将系统时钟四分频为33.3 MHz作为LCD的驱动时钟即可达到要求。此时画面刷新率约为68帧/s。
数字逻辑电路中, 数据建立时间(Tsu)过程中电平处于不稳定状态, FPGA管脚对输入信号管脚电平的跳变敏感。如果在建立时间中采样, 则容易造成错误的数据输入[6,7]。为保证数据的准确性, 对输入信号采样采用延后半个时钟周期的采样方式。当信号在时钟下降沿建立数据时, FPGA在时钟上升沿处进行采样, 在输入信号、 SDRAM与FIFO之间信号传递时都必须遵循该原则(见图2)。
使用指令集方式, 通过NiosII系统内部AVALON总线从CPU中将命令与数据写入FIFO, 笔者依照机器语言的思路定义一套标准指令集, 从FIFO中读出指令, 经过状态机分析得出指令后, 根据需要从FIFO中读出所需的起始寄存器地址和数据。状态机的工作流程如图3所示。
指令代号、 指令功能和指令数据格式的对应关系如表1所示。
图2 数据采样时钟 图3 状态机工作流程
由于SDRAM的数据总线读写共用, 显示输出控制器要定时读取显示缓存内的数据, 而SDRAM控制器要对缓存数据进行修改。如果不加处理将会出现总线冲突。笔者比照计算机直接内存存取的理论, 将SDRAM控制器认为是主控单元, 在显示输出需要占用总线的过程中给SDRAM控制器一个DMA(Direct Memory Access)请求, 使之放弃SDRAM总线的控制权, 一行颜色数据读取结束后释放总线控制权给SDRAM控制器, 继续其任务。在FPGA中专门设置了一个使能位RE, 以决定总线的归属权。
液晶显示器消隐时间不必输出数据, 然而行消隐和场消隐的时间过于短暂, 写操作通常使用的时间较长, 对高速刷新的画面往往造成画面暂留或刷新不及时的现象, 表现为肉眼能看到刷新过程。因此为增加写操作时间, 提高刷新率, 使用FIFO预读每行的信息, 预读结束后, 控制器收回SDRAM数据总线控制权, 显示部分通过预读的信息输出。SDRAM的工作频率至少是液晶输出频率的4倍, 最高能达到143 MHz。FIFO的工作频率与SDRAM工作频率一致, 所以, 将数据读取到FIFO中所需的时间只是原本显示一行所需时间的1/4, 剩余的3/4时间以及行消隐可作为空闲时间被写命令等操作使用。开始每项操作前都需要根据状态流程(见图3)计算空闲时间, 只有时间充足时才能进行操作。因为每种操作的时间不会超过一行的空闲时间, 因此不会出现死锁等待现象。写数据时序图如图4所示, 逻辑分析仪的采样频率为66.7 MHz。RE为低时FIFO从SDRAM读取数据, RE为高时执行写操作, WE[0]为写过程的计数器。每行的空闲时间基本上能保证写入3行的颜色数据。
按照现今嵌入式GPU(Graphic Processing Unit)的像素填充率指标衡量数据刷新速度, 若忽略行消隐时间及SDRAM数据写入的缓冲时间, 则在每帧非场消隐时间段(480行)内的每行可写入2 400像素点的彩色数据, 在场消隐时间段(45行)内可写入3 200像素点的数据。按照使用33.3 MHz时钟的刷新率68帧/s计算设备最大像素填充率为
(480×2 400+45×3 200)×68=88 128 000像素/s
假设控制器以一般嵌入式GPU的400 MHz时钟速率工作, 可得到像素填充率为
(480×8 800+45×9 600)×68=316 608 000像素/s
该数值仅次于主流嵌入式GPU PowerVR SGX系列(5亿像素/s填充率)水平, 高于Adreno205系列(2.4亿像素/s填充率)水平。如果使用多条管线并行填充, 则将具有更高的性能。
SDRAM突发读写的最大长度只有单页256个地址, 每次读写前必须有一段充电和指定行列地址的等待时间。数据手册中SDRAM的特性显示可通过读写时间对非工作区域充电, 采用使能方式消除读写前的等待时间[8,9]。根据这一原理, 可有效利用SDRAM多工作区域的特性, 采用突发方式连续读写较长的数据。
直接对显示缓存数据的更新会破坏当前显示帧内容的完整性, 对视觉效果造成影响, 采用多缓冲数据的方式可避免这个问题。笔者将SDRAM缓存的一部分作为显示帧保存修改前的帧数据, 剩下部分可作为多个缓冲帧保存其他待显示帧的数据。上一帧结束后, 只需通过指令修改缓冲区首地址即可实现两个缓冲帧之间的快速切换。由于受单帧填充像素最大值的限制, 如果只使用一个缓冲区提前准备修改, 则无法利用高像素填充率的优势; 而使用多缓冲区方式则更能充分利用像素填充率, 在刷新一幅图片的过程中完成多幅图片的缓冲过程[10]。在应用中有时需要在当前显示帧基础上进行修改, 可在硬件帧同步过程中复制该帧内容。在显示输出控制器发出DMA请求的同时如果帧同步被使能, 则显示帧的数据内容被同时读入两个FIFO中, 其中同步的FIFO负责读取数据并将数据写到待同步的缓存中, 实现1帧同步。同步过程中对同步帧的修改被系统禁止。
SDRAM在写数据前需预充电和刷新等过程, 在单数据突发时写1个数据需要约35个系统时钟, 如果使用页突发方式, 则写800个数据只需要约850个时钟。但采用页突发模式无法直接通过地址对输入数据进行定位输入, 如果输出数据个数已达到要求, 则可以随时停止输入。因此, 笔者设计时从首页地址开始, 使用SDRAM的DQM位禁能不需要的输出数据, 直到到达指定起始输出地址为止。DQM禁能时间为损失的时间。根据应用的需要, 笔者在NiosII的程序中加入了规划方式, 如绘制图片的边框等较小数据量的输入过程使用单数据形式, 而绘制大幅图片则使用页突发方式。
图5 LCD控制器实际应用效果
设计中选用CycloneII系列的EP2C8F256C8N芯片, 拥有8 256门和182个IO管脚, 165 888个Memory bit。选择1 MByte×16 bit×4 Banks的K4S641632H-UC70作为显存, 该SDRAM存储容量为8 MByte,工作频率最高能达到143 MHz。定制了NiosII系统, 系统运行时钟频率为133.3 MHz。运行状况稳定, 经受住72 h连续运行的测试。LCD控制器实际应用效果如图5所示。实验中在设备的NandFlash中存储30张不同的图片进行循环刷新, 在8 MByte的SDRAM中每次可以缓存5张图片快速刷新, 刷新一幅图片的时间内可缓存2~3幅图片数据。由于采用了多页缓存, 响应速度快,在点击画面中图片时, 能在肉眼察觉不到行扫描过程的情况下瞬间切换图片。像素填充率基本达到目标值88 128 000像素/s。此外, 800×480像素分辨率的液晶屏在本应用中已经远超过多数5寸屏幕使用的480×272像素分辨率。系统中使用的命令状态机可自行定制所需的图形处理命令, 自由添加硬件并对缓存图片进行处理, 具有很强的灵活性。
笔者设计的系统最终工作频率为133.3 MHz, 能正确读取外部输入的指令并迅速作出反应, 输出图像不失真, 刷新率达到60帧/s以上, 理论像素填充率达到8.8千万像素/s。在使用高分辨率LCD显示器的出租车拼车系统设计中作为显示模块, 效果出色。该设计方案也可用于其他大型LCD显示器的应用设计中, 具有较高实用价值。
参考文献:
[1]FU Xian-cheng, ZOU Xue-cheng, LEI Jian-ming. Improved Dithering Algorithms and Its Circuit Implementing for STN-LCD [J]. The Journal of China Universities of Posts and Telecommunications, 2006, 13(4): 86-90.
[2]林明. 基于FPGA的数字图像显示系统 [J]. 单片机与嵌入式系统应用, 2002(9): 43-45.
LIN Ming. FPGA-Based Digital Image Display System [J]. Microcont Roller & Embedded System, 2002(9): 43-45.
[3]杨海涛, 苏涛, 巫幪, 等. 基于FPGA的SDRAM控制器的设计与实现 [J]. 电子科技, 2007(1): 8-12.
YANG Hai-tao, SU Tao, WU Meng, et al. The Design and Implementation of the SDRAM Controller Based on the FPGA [J]. IT Age, 2007(1): 8-12.
[4]黄德勇, 张扬, 杨云志. 高速电路设计中的信号完整性研究 [J]. 电讯技术, 2004(2): 149-152.
HUANG De-yong, ZHANG Yang, YANG Yun-zhi. Signal Integrity in the Design of High Speed Circuit [J]. Telecommunication Engineering, 2004(2): 149-152.
[5]Samsung Electronics. Samsung Device Operation Handbook [EB/OL]. (2006-07). [2013-03]. http://www.Samsung.com/.
[6]Altera Corporation. Cyclone Device Handbook [EB/OL]. (2008-08). [2013-03]. http://www.altera.com/.
[7]李冬梅, 王延杰, 王长宇, 等. 基于FPGA的高速实时图像采集和自适应阈值算法 [J]. 吉林大学学报: 工学版, 2010, 40(2): 535-538.
LI Dong-mei, WANG Yan-jie, WANG Chang-yu, et al. High-Speed Real-Time Image Acquisition and Auto-Adapted Threshold Processing Based on FPGA [J]. Journal of Jilin University: Engineering and Technology Edition, 2010, 40(2): 535-538.
[8]YING Wen-bai, CHANG Chi-liu. The Performance Improvement of a Photo Card Reader by the Use of a High integration Chip Solution with Double FIFO Buffers [J]. IEEE Transactions on Consumer Electronics, 2005, 51(2): 329-334.
[9]ALTERA CORPORATION. Single-and Dual-Clock FIFO Megafunction User Guide Handbook [EB/OL]. (2009-02). [2013-03]. http://www.altera.com/.
[10]唐徐立, 黄君凯, 刘明峰. 基于FPGA的TFT-LCD控制器设计与实现 [J]. 半导体技术, 2010, 35(11): 1134-1137.
TANG Xu-li, HUANG Jun-kai, LIU Ming-feng. Design and Realization of the TFT-LCD Controller Based on FPGA [J]. Semiconductor Technology, 2010, 35(11): 1134-1137.