根据图2中的时序,并考虑到实际情况,具体应用如下:每个周期同时向两个AD838l的数据口发送一个像素数据,4个周期后进行数据锁存,由STSQ和 XFlR这两个控制信号控制,这样同时得到8个像素的像素值,而不需要如图2那样发送6个数据后再进行一次转换。输出的模拟电压值在下一个锁存信号的下降沿完成转换。STSQ和XFR这2个管脚由同一个FPGA管脚驱动即可。在其他管脚中,E/0信号和R/L信号分别用于选择时钟信号是上升沿有效还是下降沿有效和像素数据发送顺序,这里设计成外部跳线。另一个控制信号INV用来确定图像数据电压是正信号还是负信号的,由于液晶的特性,在每帧开始时将其取反。而AD8381的参考电压VMID和屏的参考电压VCOM连接在一起,在INV的配合下,实现对屏的交流驱动。
5 FPGA程序设计
5.1 模块划分
整个FPGA程序的模块框图如图3所示。主要包括:D/Ata Capture模块,负责将输入的数据按一定的格式顺序存放到SRAM中;Switch模块,负责控制RAM的切换;D/AtaOutput模块,负责从 SRAM中读取数据按照一定的格式发送出去;Output timing Generator模块,负责生成输出的控制时序,并且控制D/Ata Output模块的输出和Switch模块的切换,而该模块的工作是受到D/Ata Cap—ture模块控制的。
5.2 存储安排
为了获得较大的数据位宽,并且考虑到FPGA管脚数量,用于缓存图像的SRAM选用的是3片1 M×8 b容量的,作位扩展,这样可以存放下完整的1帧数据。具体说就是每个地址存储的大小是3个字节,可以用来存放3个像素的数据(同种颜色)。地址0x0放置 3个像素的红,而地址Oxl存放3个像素绿,地址0x2存放3个像素蓝,而这3个地址的3个像素在屏幕上是第一行的第1,2,3个像素,接下来地址0x3 又存放了3个红色像素,如此循环,直到地址0xBFFFF存放最后3个像素的蓝色数据。如图4所示。
5.3 算法流程
(1)D/Ata Capture模块的数据转存算法
D/AtaCapttire模块负责将输入的数据按一定的格式顺序存放到SRAM中。每个时钟从AD9887A板过来的数据是24位的RGB数据,8位红,8位绿,8位蓝,而实际输出的时候是按照l帧红1帧绿1帧蓝的顺序输出的。因此如果能将读入的24位RGB数据按照一定的格式存放,就可以方便的读取数据,格式如图4所示。
具体的转换是通过一个状态机实现,其中有6个24 b的寄存器r1~r6用来缓冲6个像素的RGB值。用6个状态完成类似矩阵转换的任务,每个状态会输出1个24 b的转换好的数据,并生成地址,即每个状态都会将1个24 b的数据存入到SRAM中,而这24 b就是3个像素的同一种颜色的值。
(2)D/Ata Output模块数据输出算法