摘要:针对分辨率为1024×768的LCoS屏编写了Verilog HDL驱动代码,在quartusⅡ9.1平台上综合编译,并在Altera的FPGA芯片EP3C5E14 4C8上进行了功能验证和实际输出信号测量。采用异步FIFO结构解决了跨异步时钟域的数据传输问题。嵌入FFT IP核后,可进一步对图像进行基于FFT的变换处理,分析图像的频谱。为计算全息3D图像处理及显示提供了硬件平台。
0 引言
基于空间光调制器的计算全息三维显示技术,目前常采用透射式LCD和反射式LCoS作为空间光调制器,以改变光经过空间光调制器(SLM)后的空间相位和振幅分布,达到对光信息的调制。传统的基于透射式LCD空间光调制器的计算全息三维显示系统,其成像光路复杂,而且必须依赖计算机进行数据发生、采集以及处理,这就限制了系统应用的灵活性,不便于推广。
相较于透射式LCD,LCoS具有光利用率高、体积小、开口率高、器件尺寸小等特点,可以很容易地实现高分辨率和微显示投影。采用彩色LCoS屏显示基于RGB的彩色图像,经过光学成像系统投影到接收屏上,实现计算全息图像的三维显示。
基于FPGA的显示系统有以下优势:第一,LCoS尺寸小,便于实现微投影,利用可灵活编程的FPGA器件作为驱动控制器,这样就可以将其做成像普通投影仪一样的微型投影设备,使计算全息三维显示摆脱了计算机和复杂光路的束缚,具有了更高的灵活性,为其走出实验室提供了条件。第二,因为在传统空间光调制器上得到的图像里含有物波和参考光的复共轭像,形成了噪声,在FPGA上可以实现图像滤波去噪,使得到的图像更清晰。第三,FPGA是基于可编程逻辑单元的器件,当经过综合、布局布线、时钟约束的代码烧录到FPGA器件后,FPGA就将算法代码硬件化了,可以作为专用芯片工作,其内部信号延时完全是硬件级传输延时。在处理数据搬移和复杂的数学运算以及一些循环操作时,例如图像的FFT变换,FPGA硬件运算要比软件运算快得多,即利用FPGA器件实现对软件算法的硬件加速。
基于以上原因,本文设计了基于FPGA的LCoS驱动代码及图像的FFT变换系统,为计算全息三维显示图像处理和显示提供了硬件平台。
1 系统设计
1.1 系统模块框图:
该系统采用cycloneⅢEP3C5E144C8,该芯片有5136个LE,95个用户I/O,2个PLL,以及46个嵌入式乘法器和423936b的内部逻辑寄存器。以它丰富的资源,完全可以作为LCoS的驱动控制器件。显示屏采用Himax的反射式LCoS屏HX7308,其分辨率为1024×768,可以支持256级灰度显示,具有内置的行场驱动电路,在外部输入时钟的上升沿和下降沿分别接收8b×4dots图像数据,这保证了场频可高达360Hz。
系统的整体框图如图1所示。
1.2 PLL及系统复位模块
采用Altera的锁相环IP核,外部输入时钟为20MHz,经倍频后得到其他各模块的驱动时钟,以及LCoS的驱动时钟信号。为防止系统异步复位时寄存器出现亚稳态,设计了PLL的前级和后级D触发器。因为锁相环的locked引脚在锁相环稳定输出后才会跳变为高电平,所以为保证其他模块得到稳定的时钟信号,将locked引脚和外部输入复位信号rst_n相与后作为整个系统的复位信号。
1.3 单口ROM模块
利用FPGA内部的M9K存储器资源实现的单口ROM作为源图像的数据存储器。将分辨率为176×144(QCIF)的256阶灰度位图图像初始化到单口ROM里,所需数据深度为25344B。当异步FIFO没写满时,单口ROM将按图像存储地址依次输出图像数据给FFT核做快速傅里叶变换。经过处理的图像数据暂存到FIFO)里,等待行场时序控制器模块取用。
1.4 异步FIFO模块
按其数据地址最高2位分为4个区间,读/写指针分别对某一区间操作,当读/写指针相等时通过译码器产生FIFO已读空或者已写满标志信号。为避免地址信号变化时出现冒险竞争现象,写地址和读地址指针都采用格雷码编码。在读空比较子模块和写满比较子模块里加入了FI-FO“将空”和“将满”检验机制,有效地保证了FIFO正确无误的工作。在写时钟wrclk的上升沿,异步FIFO每个地址对应的存储单元里被写入8bits数据,在读时钟rdclk的上升沿,FIFO四块连续地址上的32bits数据输出,即读FIFO的速率相当于写FIFO速率的4倍速。
1.5 I2C状态机模块
没有满足I2C配置条件时,状态机处于空闲状态,当满足I2C配置条件时,状态机在状态标志位的控制下依次输出配置地址和配置数据。当数据配置结束时,状态机产生停止信号,并拉高输出引脚iic_config,通知行场时序控制器模块开始工作,这样保证了LCoS屏能在正确配置下工作。状态机工作原理如图2所示。
1.6 行场时序控制器模块
内设水平计数器hcnt和垂直计数器vcnt。由于显示屏每个时钟周期锁存8个像素值,所以显示1024个像素值所需行周期为128个Tclk(行时钟周期)。当hcnt计数器值为HBP时表示行有效显示区域开始,hcnt计数器值为HBP+128时表示行有效显示区域结束,hent计数器值为HSYN-Ccycle时,完成一行显示,vcnt计数器加1。当vcnt计数器值为VBP时,垂直有效显示区域开始,当vcnt计数器值为VBP+768时,垂直有效显示区域结束,当vcnt计数器值为VSYNC cycle时,完成一帧图像显示。行场时序关系如图3所示。
1.7 FFT模块
FFTV 9.1 IP核采用Cooley-Tukey基-2 DIF算法,其FFT变换原始公式为:
因为采用了数据流模式,经过变换的数据可以连续输出,即输出数据不会因为图像数据的输入而停止数据输出,同时输入数据也不会因为处理后的数据正在输出而停止继续输入,保证了数据转换和传输的连续性,提高了数据处理的速度和效率。因为FFT通过异步FIFO向屏幕输出数据,而FIFO的读数据是写数据的4倍速,假如读时钟和写时钟都为100MHz,那么有可能会在某一行里出现FIFO被取空,而无法向屏幕输出有效数据的情况。为保证FIFO向屏幕输出图像数据的连续性,就要充分利用VBP,VFP,HBP和HFP的时间,在每一行的开始,如果FIFO没满,那么启动FFT进行数据转换。若图像的分辨率为M×N并且在VBP期间FIFO已被写满,则FIFO,FFT核、行场周期以及图像分辨率间关系的计算公式如下:
式中:Deepth是异步FIFO的数据深度,单位为B;THSYNC cycle是行周期;Tclk是异步FIFO,FFT核、行场时序控制器模块的驱动时钟周期。当△>O时,系统会连续实时地处理图像;当△<O时,会导致在屏幕某些行的有效显示区域没有有效图像数据可供显示;这样就破坏了图像显示的连续性。可根据以上公式合理设计FIFO深度以及选取合适分辨率的图像。该设计中,异步。FIFO,FFT核、行场时序控制器模块的驱动时钟为100MHz,FIFO深度为256B,行周期为336个Tclk,M为174,N为144,经计算△>0。
2 实验仿真结果和测量结果分析
图4是采用Modelsim 6.5b进行功能仿真的结果。利用QuartusⅡV9.1自带的TimeQuest Timing Analyzer进行时序约束后,在实验板上的场信号测量结果如图5所示,场扫描频率已达到368Hz,经测量其他引脚输出信号也均满足时序要求。由于FPGA器件资源限制,对图像做了256点FFT变换,经实验验证,该设计能够实现图像的实时处理,代码达到了预期设计效果。
3 结语
采用Himax的LCoS屏HX7308BTJFA作为显示器件,其尺寸为14.43mm×10.69mm,大小可跟1枚1元硬币相比拟,很容易实现三维投影微显示。因VerilogHDL有很强的可移植性,便于以后对代码的升级和维护。FPGA内部资源毕竟有限,文中叙述可知,若显示分辨率较大的图像,光靠内部资源实现异步FIFO是不可能的,所以在此提出两种方案:第一,换一片性能较高的芯片,满足写FIFO速率等于读FIFO速率的要求,这样就能达到读/写数据的动态平衡,保证了图像的连续显示;第二,采用外部存储器SDRAM存储源图像和FFT处理后的数据,采用DDRII技术读取数据,使读/写FIFO的速率匹配。受FPGA芯片资源限制,该设计采用分辨率为176×144的图像进行了系统功能验证,尚未实现图像滤波以及FFT逆变换,未来可将代码移植在高端的FPGA芯片上继续开发数据处理功能。