APP下载

基于FPGA 的3D 光立方设计*

2012-08-09康志强汤勇明

电子器件 2012年6期
关键词:存器每层解码

康志强,汪 佳,汤勇明

(东南大学电子科学与工程学院,南京 210096)

在显示技术迅速发展的今天,光立方[1]作为一种新型信息发布媒体,给人们带来了一种全新的视觉体验。本文研究了采用三维蓝光LED 阵列作为显示载体,FPGA 作为控制平台的方案,对系统内部算法进行合理划分及处理,充分利用FPGA 的高速并行处理能力和NIOS 双核[2-6]技术,进行了一系列应用开发,为实现该3D 视觉信息平台提供了一种新的参考解决方案。

1 总体方案

本系统的工作原理基于对简单二维LED点阵[7]显示屏的扩展,利用层叠加技术构建出立体LED 矩阵,用FPGA 开发平台DE0 进行控制系统,实现三维显示功能。利用人眼的视觉暂留效应实现简单的静态图像显示和立体动画显示,并基于动态显示实现真正意义上的三维游戏。

图1 系统结构框图

系统总体功能框图如图1所示。系统采用NOIS 双核模式,利用CPU1 控制光立方扫描及人机交互部分,并进行内部数据运算和处理;利用CPU2控制音频解码与输出;双核间采用MUTEX 互斥量进行通信,实现两CPU 的同步。整个光立方系统主要分为3种模式:静态模式,动态模式和游戏模式。系统实现了良好的人机交互,可通过触摸屏等进行模式切换。为实现光立方不同显示模式的切换与音频输出的实时同步,在CPU1 嵌入了UCOS-Ⅱ[8]微型操作系统。

2 硬件组成

2.1 控制平台

针对系统实现中数据的快速运算处理以及外部接口的灵活配置需求,控制平台采用Terasic 公司生产的DE0 开发系统。DE0 搭载了Altera Cyclone Ⅲ系列中的EP3C16 FPGA,可提供15,408 LEs(逻辑单元)以及346 I/O,此外,DE0 开发平台还搭配了SD 卡、PS2 等丰富的周边装置,足以开发复杂的逻辑控制系统,适合作为本光立方系统的控制平台。

2.2 光立方模块

光立方由512个蓝色散光LED 组成,分为8层,每层64个(8x8)LED,每个LED 跟其他LED 之间都留有一定的间距,保持良好的通透性,利用LED 矩阵自身的空间立体性,达到三维显示的效果。具体的连接为:每层64个LED 的阴极连接在一起,连接到三极管上,三极管由74HC138 控制是否对地导通,竖直方向同列的8个LED 的阳极连在一起,连接到锁存器组成的列控制模块的输出端。光立方共有64个列单元,可用8个8 bit 锁存器进行控制。

图2 光立方驱动电路

光立方扫描驱动[9]电路分为层驱动电路和列驱动电路。层驱动电路产生层扫描信号,工作时,FPGA 输出层控制信号,然后由74HC138 译码器译码,选通或关闭与每一层LED 阴极相连的三极管,由此来控制每一层是否对地导通。当三极管输出为高时,选通对应的LED 层,当三极管输出为低时,关闭对应的LED 层。竖直方向同列的LED 的阳极连接在一起,然后分别连接到8个锁存器(74HC574)的输出端,当锁存器输出为高,且LED 层被选通时,对应的LED 被点亮。光立方的空间图像信息被分为8 层,列驱动电路将每层的数据信号依次送到选通的LED 列上,每层的64个LED 由8个8 bit 的锁存器来分时控制,利用74HC138 进行8个锁存器的分时选通,当每层的控制数据都写入到锁存器后,再通过层选信号选通相应层,在一个周期内依次扫完8 层,由于一个周期的时间小于人眼的视觉暂留时间,所以从人眼看来是一幅完整的立体图案。这样便使用15个IO 扩展口来实现512个LED 的分时控制。通过这样的工作原理就可以在光立方平台上达到静态画面、动画和立体小游戏等功能的实现。

光立方的扫描过程有两种方案:一是待8 层全部扫描完成后再进行信号输出;二是每层扫描完成后即进行信号输出。考虑到扫描连贯性、均匀性以及人眼的视觉特性,这里采用第2种方案。

为避免光立方扫描过程中每列间因信号串扰而影响发光效果,在扫描每层前,先通过锁存器的输出使能端屏蔽输出,等到每层全部扫描完后再打开使能端进行信号输出。

2.3 音频解码及输出模块

音频输出模块采用了硬解码方式,通过扩展IO口输出音频数据并控制VS1003IC 对音频进行解码。音频控制部分有两种实现方案。一是音频模块使用与其他模块共用一个NOIS 软核,即系统单CPU模式;二是音频模块另外使用一个单独的NOIS核控制,即系统双CPU模式。因为外部接口较多,且每部分实时性要求都很高,为保证音质,系统使用了NIOS 双核技术,用CPU2 控制音频模块,并利用MUTEX 互斥量成功实现了双CPU 间的通信,解决了外部接口多,算法复杂,工作压力大和实时性要求高之间的矛盾。

因为音频数据量较大,系统采用SD 卡来存储音频信息。通过对已有NIOS IP 核的改写,使用SPI通信协议读取SD 卡数据,并对成功移植了文件系统FAT16,实现了大量数据的存储和读取。在播放音乐时,首先将音频数据从SD 卡中读到RAM 中,再依次送给VS1003 音频模块进行解码播放。

2.4 人机交互模块

人机交互媒介采用触摸屏,显示部分采用SSD1289IC 控制器驱动的TFT 屏,分辨率为320×240,显示画面清晰,触摸感应部分采用ADS7843IC。

SSD1289IC 提供了多种通信方式,例如SPI模式传输,8080-16 bit 并行传输等。为提高刷屏速率,优化系统,我们采用了8080-16 bit 并行传递模式,并通过时序优化,很好地实现了TFT 屏显示。总的工作原理为:将图片按照RGB565模式取模保存,显示时利用SDRAM 作为缓存。每次刷屏时依次将每个像素点的RGB值通过16 bit 并行模式传递给SSD1289IC 内部RAM,从而实现图片显示。

ADS7843 是一个内置12 bit模数转换、低导通电阻模拟开关的串行接口芯片。供电电压2.7 V~5 V,参考电压VREF为1 V~+VCC,转换电压的输入范围为0~VREF,最高转换速率为125 kHz。因其内部结构很容易实现电极电压的切换,并能进行快速A/D 转换。

ADS7843 支持两种参考电压输入模式:一种是参考电压固定为VREF,另一种采取差动模式,参考电压来自驱动电极。采用差动模式可以消除开关导通压降带来的影响。为提高采样精度,IC 选用了差动模式进行采样。

3 软件设计

系统采用NIOS 的双CPU 工作模式,CPU1 主要负责模式切换、内部算法处理和光立方扫描,CPU2 主要进行音频解码控制与播放,CPU 间通过MUTEX 互斥量进行通信。上电复位后,两CPU 分别加载程序数据,并进行各功能模块的初始化。可以通过触摸屏与系统进行交互,实现模式控制、音频播放等。通过CPU1 内部算法处理后,在定时中断中进行光立方扫描。因光立方扫描需每1 ms 中断一次,对其他部分的处理影响较大。为解决这一问题,这里采用嵌入微型操作系统UCOS-Ⅱ进行实时任务调度,以实现各部分功能单元的有序进行。软件工作流程如图3所示。

3.1 光立方扫描控制设计

在定时中断中实现光立方扫描的主要时序控制,过程如下:

(1)关闭寄存器输出;

(2)通过8 次循环,对光立方一层的8 列进行分时赋值、选通、扫描;

(3)打开寄存器输出;

(4)通过译码器进行层选。

1 ms 定时中断函数如下:

3.2 应用开发设计

系统除了可对光立方进行可控扫描外,还进行了动态文字及图像显示以及3D 贪吃蛇等应用开发。应用开发的关键在于对各个LED 的显示位置与时间进行可控设计,在充分考虑人眼视觉特征的情况下,通过良好的逻辑设计,以实现相关的应用开发。

3D 贪吃蛇游戏的软件开发,结构简单清晰,体现了良好的逻辑设计。软件设计将光立方扫描和贪吃蛇内部数据处理分开,以达到各模块的独立性和简洁性。

贪吃蛇主要数据结构:

贪吃蛇相关函数:

ps2_init和snakegame_init 函数分别完成PS/2 键盘初始化和贪吃蛇游戏的初始化,ps2_check和snake_move 函数分别进行键盘检测和贪吃蛇数据处理。

4 实现结果

从二维显示出发,利用真正3D 空间排列的LED点阵和人眼的视觉暂留效应实现了光立方3D显示效果。该系统可以进行图像立体静态显示和音乐立方动态显示,并基于动态显示实现了真正意义上的三维小游戏。其观赏性和娱乐性强,易于移植,具有很高的实用价值。由于控制部分设计需求较为复杂,本文采用NIOS 软核实现。通过NIOS 双核技术,使用两个CPU 同时工作,解决了设计具体实施中遇到的接口较多,算法复杂等难题。为提高系统实时性,采用嵌入了UCOS Ⅱ微型操作系统进行任务调度,效果也很理想。

图4 实现效果图

当然,该作品仍有较多改进空间,如由于限于硬件资源的限制,光立方的分辨率还不是很高,只能显示一些简单的图像和动画,同时,现在只能进行单色显示,有可能进行全彩LED[10]显示改进。如果应用于一些较大型的场所,只要按照给出的设计方案对外围电路进行相应扩展就可以成功实现。

[1]LED Cube3-dimensional display[EB/OL].http://www.instructables.com/id/Led-Cube-8x8x8/.

[2]杨军.基于FPGA 的SOPC 实践教程[M].科学出版社,2010.

[3]赫建国,倪德克,郑燕.基于Nios Ⅱ内核的FPGA 电路系统设计[M].北京:电子工业出版社,2010.

[4]Altera Corp.Creating Multiprocessor NiosⅡSystem Tutorial[EB/OL].Altera.2011.

[5]高世明,孟令军,李宝刚.基于NIOS 多核处理器的JPEG 解码的设计与实现[J].器件与应用,2011,35(5).

[6]张荣,黄海莹,李春枝.基于NIOSⅡ软核处理器的嵌入式测试系统软硬件设计研究[J].计算机测量与控制,2012(2).

[7]王浩然,秦会斌.LED点阵屏显示单元的设计与驱动控制[J].电子器件,2010,33(5):550-552.

[8]周航慈.基于嵌入式实时操作系统的程序设计技术[M].北京:北京航空航天大学出版社,2011.

[9]闵剑,余菲,梁蓓.一种应用于AMOLED 的阵列扫描控制电路[J].电子器件,2011,34(3):303-306.

[10]谈卫星,胡建人.基于STM32 的全彩LED 显示屏系统的设计[J].电子器件,2011,34(3):258-260.

猜你喜欢

存器每层解码
《解码万吨站》
攀登脚手架
智取钻石
一种低功耗的容软错误锁存器设计
45 nmCMOS工艺三模冗余加固锁存器的性能评估
解码eUCP2.0
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
每层球有多重
容忍单粒子多节点翻转的三模互锁加固锁存器