分享

基于FPGA的LCoS驱动及图像FFT变换系统设计

 mzsm 2015-12-09

基于空间光调制器的计算全息三维显示技术, 目前常采用透射式LCD 和反射式LCo S 作为空间光调制器, 以改变光经过空间光调制器( SLM) 后的空间相位和振幅分布, 达到对光信息的调制。传统的基于透射式LCD 空间光调制器的计算全息三维显示系统, 其成像光路复杂, 而且必须依赖计算机进行数据发生、采集以及处理, 这就限制了系统应用的灵活性, 不便于推广。

相较于透射式LCD, LCo S 具有光利用率高、体积小、开口率高、器件尺寸小等特点, 可以很容易地实现高分辨率和微显示投影。采用彩色LCoS 屏显示基于RGB 的彩色图像, 经过光学成像系统投影到接收屏上,实现计算全息图像的三维显示。

基于FPGA 的显示系统有以下优势: 第一, LCoS尺寸小, 便于实现微投影, 利用可灵活编程的FPGA 器件作为驱动控制器, 这样就可以将其做成像普通投影仪一样的微型投影设备, 使计算全息三维显示摆脱了计算机和复杂光路的束缚, 具有了更高的灵活性, 为其走出实验室提供了条件。第二, 因为在传统空间光调制器上得到的图像里含有物波和参考光的复共轭像, 形成了噪声, 在FPGA 上可以实现图像滤波去噪, 使得到的图像更清晰。第三, FPGA 是基于可编程逻辑单元的器件,当经过综合、布局布线、时钟约束的代码烧录到FPGA器件后, FPGA 就将算法代码硬件化了, 可以作为专用芯片工作, 其内部信号延时完全是硬件级传输延时。在处理数据搬移和复杂的数学运算以及一些循环操作时,例如图像的FFT 变换, FPGA 硬件运算要比软件运算快得多, 即利用FPGA 器件实现对软件算法的硬件加速。

基于以上原因, 本文设计了基于FPGA 的LCoS 驱动代码及图像的FFT 变换系统, 为计算全息三维显示图像处理和显示提供了硬件平台。

1 系统设计

1. 1 系统模块框图

该系统采用cy clone EP3C5E144C8, 该芯片有5 136 个LE, 95 个用户I/ O, 2 个PLL, 以及46 个嵌入式乘法器和423 936 b 的内部逻辑寄存器。以它丰富的资源, 完全可以作为LCoS 的驱动控制器件。显示屏采用Himax 的反射式LCoS 屏HX7308, 其分辨率为1 024 768, 可以支持256 级灰度显示, 具有内置的行场驱动电路, 在外部输入时钟的上升沿和下降沿分别接收8 b 4 dot s图像数据, 这保证了场频可高达360 Hz。

系统的整体框图如图1 所示。

图1 系统框图

1. 2 PLL 及系统复位模块

采用Alter a 的锁相环IP 核, 外部输入时钟为20 MHz, 经倍频后得到其他各模块的驱动时钟, 以及LCo S 的驱动时钟信号。为防止系统异步复位时寄存器出现亚稳态, 设计了PLL 的前级和后级D 触发器。

因为锁相环的lo cked 引脚在锁相环稳定输出后才会跳变为高电平, 所以为保证其他模块得到稳定的时钟信号, 将locked 引脚和外部输入复位信号rst_n 相与后作为整个系统的复位信号。

1. 3 单口ROM 模块

利用FPGA 内部的M9K 存储器资源实现的单口ROM 作为源图像的数据存储器。将分辨率为176144( QCIF) 的256 阶灰度位图图像初始化到单口ROM里, 所需数据深度为25 344 B。当异步FIFO 没写满时, 单口ROM 将按图像存储地址依次输出图像数据给FFT 核做快速傅里叶变换。经过处理的图像数据暂存到FIFO 里, 等待行场时序控制器模块取用。

1. 4 异步FIFO 模块

按其数据地址最高2 位分为4 个区间, 读/ 写指针分别对某一区间操作, 当读/ 写指针相等时通过译码器产生FIFO 已读空或者已写满标志信号。为避免地址信号变化时出现冒险竞争现象, 写地址和读地址指针都采用格雷码编码。在读空比较子模块和写满比较子模块里加入了FIFO “将空”和“ 将满”检验机制, 有效地保证了FIFO 正确无误的工作。在写时钟w rclk 的上升沿, 异步FIFO 每个地址对应的存储单元里被写入8bit s 数据, 在读时钟rdclk 的上升沿, FIFO 四块连续地址上的32bit s 数据输出, 即读FIFO 的速率相当于写FIFO 速率的4 倍速。

1. 5 I2 C 状态机模块

没有满足I2C 配置条件时, 状态机处于空闲状态,当满足I2C 配置条件时, 状态机在状态标志位的控制下依次输出配置地址和配置数据。当数据配置结束时, 状态机产生停止信号, 并拉高输出引脚iic_co nf ig, 通知行场时序控制器模块开始工作, 这样保证了LCo S 屏能在正确配置下工作。状态机工作原理如图2 所示。

图2 I2 C 状态机原理图

1. 6 行场时序控制器模块

内设水平计数器hcnt 和垂直计数器vcnt。由于显示屏每个时钟周期锁存8 个像素值, 所以显示1 024 个像素值所需行周期为128 个Tclk( 行时钟周期) 。当hcnt 计数器值为HBP 时表示行有效显示区域开始,hcnt 计数器值为HBP+ 128 时表示行有效显示区域结束, hcnt 计数器值为HSYNC cy cle 时, 完成一行显示,vcnt 计数器加1。当v cnt 计数器值为VBP 时, 垂直有效显示区域开始, 当vcnt 计数器值为VBP+ 768 时, 垂直有效显示区域结束, 当vcnt 计数器值为VSYN C cycle 时, 完成一帧图像显示。行场时序关系如图3 所示。

图3 行场时序关系图

1. 7 FFT 模块

FFTV 9. 1 IP 核采用Coo leyT ukey 基??2 DIF 算法, 其FFT 变换原始公式为:

因为采用了数据流模式, 经过变换的数据可以连续输出, 即输出数据不会因为图像数据的输入而停止数据输出, 同时输入数据也不会因为处理后的数据正在输出而停止继续输入, 保证了数据转换和传输的连续性, 提高了数据处理的速度和效率。因为FFT 通过异步FIFO 向屏幕输出数据, 而FIFO 的读数据是写数据的4 倍速, 假如读时钟和写时钟都为100 MHz, 那么有可能会在某一行里出现FIFO 被取空, 而无法向屏幕输出有效数据的情况。为保证FIFO 向屏幕输出图像数据的连续性, 就要充分利用VBP, VFP, HBP 和HFP 的时间, 在每一行的开始, 如果FIFO 没满, 那么启动FFT进行数据转换。若图像的分辨率为M N 并且在VBP期间FIFO 已被写满, 则FIFO, FFT 核、行场周期以及图像分辨率间关系的计算公式如下:

式中: Deepth 是异步FIFO 的数据深度, 单位为B;THSYN C cycle是行周期; Tclk 是异步FIFO, FFT 核、行场时序控制器模块的驱动时钟周期。当△> 0 时, 系统会连续实时地处理图像; 当△< 0 时, 会导致在屏幕某些行的有效显示区域没有有效图像数据可供显示, 这样就破坏了图像显示的连续性。可根据以上公式合理设计FIFO 深度以及选取合适分辨率的图像。该设计中, 异步FIFO, FFT 核、行场时序控制器模块的驱动时钟为100 MHz, FIFO 深度为256 B, 行周期为336 个Tclk ,M 为174, N 为144, 经计算△> 0。

2 实验仿真结果和测量结果分析

图4 是采用Modelsim 6. 5b 进行功能仿真的结果。

利用QuartusV9. 1 自带的TimeQuest Timing Analyzer进行时序约束后, 在实验板上的场信号测量结果如图5所示, 场扫描频率已达到368 Hz, 经测量其他引脚输出信号也均满足时序要求。由于FPGA 器件资源限制, 对图像做了256 点FFT 变换, 经实验验证, 该设计能够实现图像的实时处理, 代码达到了预期设计效果。

图4 系统功能仿真

图5 场信号实测图

3 结语

采用Himax 的LCoS 屏HX7308BTJFA 作为显示器件, 其尺寸为14. 43 mm 10. 69 mm, 大小可跟1 枚1 元硬币相比拟, 很容易实现三维投影微显示。因Verilog HDL 有很强的可移植性, 便于以后对代码的升级和维护。FPGA 内部资源毕竟有限, 文中叙述可知, 若显示分辨率较大的图像, 光靠内部资源实现异步FIFO是不可能的, 所以在此提出两种方案: 第一, 换一片性能较高的芯片, 满足写FIFO 速率等于读FIFO 速率的要求, 这样就能达到读/ 写数据的动态平衡, 保证了图像的连续显示; 第二, 采用外部存储器SDRAM 存储源图像和FFT 处理后的数据, 采用DDRII 技术读取数据, 使读/ 写FIFO 的速率匹配。受FPGA 芯片资源限制, 该设计采用分辨率为176 144 的图像进行了系统功能验证, 尚未实现图像滤波以及FFT 逆变换, 未来可将代码移植在高端的FPGA 芯片上继续开发数据处理功能。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多