嵌入式FPGA热门培训内容之基于FPGA的LCoS驱动及图像FFT变换系统设计

时间:2018-12-12 17:13:12

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. 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 所示。

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 所示。

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 实验仿真结果和测量结果分析

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

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 芯片上继续开发数据处理功能。