【导读】目前,嵌入式系统数字化产品成为继PC机后的信息处理工具。随着嵌入式技术的发展,图形处理也从2D图形向3D图形转变。本文采用OpenGL作为系统的图形API,选取21条基本API命令,定义命令字编码和渲染列表格式作为IP核的设计规约。
本项目通过在FPGA上用Verilog语言实现3D影像在LCD的成像,具有以下优势:
1、采用可编程的FPGA进行设计,便于设计的更新与升级,节约成本。
2、缓解CPU在图形处理方面的负担。
3、满足广大消费者对3D影像的需求
4、LCD体积小、质量轻、功耗低,可以用大规模集成电路直接驱动,可以在明亮环境下显示,不含射线伤害。
一、实现功能
将IP核划分为四部分,这里我们分别称之为FPGA1模块、FPGA2模块FPGA3和模块FPGA4模块,模拟CPU发送数据的cpu_module需要我们用Verilog HDL设计。Cpu_module和IP核的几何变换模块属于FPGA1模块,IP核的光照模块属于FPGS2模块,FPGA3模块则包含了IP核图形管线的图元装配模块,剔除剪切模块、背面剔除模块和投影模块,IP核图形管线最后两个模块光栅化和片段处理属于PFGA4模块。
二、硬件设计
通过上面对整个系统功能要求, 性能要求的分析, 我们可以确定系统的基本硬件结构, 其组成框图如下所示:
图1: IP核图形管线的组成
图中的cpu module模块用来模拟图形应用程序经CPU处理得到渲染列表的过程,它将渲染列表命令以GPU方言的形式送到GPU,并等待图形管线中8级流水线的处理。整个图形管线分为两部分,几何部分和光栅部分,图中的前6个模块几何变换、光照、图元装配、裁剪、背面剔除、投影属于几何部分,后2个模块光栅化和片段处理属于光栅部分。
三、模块功能概述
首先是对cpu module送来的数据进行几何变换,一个三角形图元由三个顶点构成,每个顶点包含的信息有位置信息、法线信息、颜色信息等。由于三维空间中的物体都是以顶点的形式描述,所以几何变换模块主要是对舀Begin和glEnd之间的顶点数据流和相关命令的处理,所做的工作包含对顶点坐标的平移、旋转、缩放。
然后是对顶点颜色的计算,每个顶点都可以有自己的颜色。影响物体颜色的因素有几个方面,一是环境光照的影响,二是物体材质本身对光源进行调制,三是光源的位置,因此该级模块有很多需要根据渲染列表中的命令设置相应的参数,然后按照光照原理和各个模型参数计算出顶点的颜色。顶点的坐标位置和颜色信息有了以后就需要将单独的顶点数据组装成一个个图元,OpenGL支持的图元有点、线、三角形、折线、线环、三角形带和三角形扇等。我们的IP核目前只考虑了对三角形图元的处理,因为三角形是最基本的图元,其它图元只要在图元装配一级做一些处理就可以转化为对三角形图元的处理,点和线段的处理比三角形的处理简单,只是在光栅化一级稍有不同,而一些复杂图元则可以分解成三角形图元来处理。
图元装配完成以后就应该对不在视景体内的图元进行剔除,对部分在视景体内的图元进行剪切。由于视野的限制,人不可能同时看到所有的物体,举例来说,你不可能看到自己背后是什么物体,因此在图形学中用视景体来模拟视野的限制,将一些不显示的图元剔除剪切掉,以避免后级不必要的计算,减轻后级的负担。
背面剔除模块的工作是判断图元的正反面,根据需要显示我们希望看到的那一面。因为虽然在视景体外面的图元被剪切掉了,但是并不意味着所有剩下的图元都会被显示出来,比如一枚硬币,当印有人头的一面对着我们的时候,另一面的字就不能呈现在我们面前,后级的处理也就不需要考虑有字的那一面。
前面五级的处理对象都是三维空间中的顶点数据,但我们的显示设备只是二维的,这就需要我们将视景体中的三维图元映射到二维平面上,投影交换模块的作用就在于此。至此三维图元就变成了二维的图元,后面两级就只需要对二维图元进行处理。
光栅化一级需要将二维图元的坐标变换成整数,因为显示设备的光栅是离散的点阵,该级还需要做的工作是填充图元的内部,另外图元边缘的反走样也需要在该级完成。经过该级的处理,二元图元就变成了离散的片元数据,即人们常说的像素数据,每个像素数据都和显示设备光栅上的某个点一一对应。
最后一级是片段处理,它的工作就是在像素数据送到帧缓冲区之前再对像素数据进行筛选,因为只有符合条件的才会被写入到帧缓冲区中。比如有一扇门,当门关起来的时候我们就看不见门里的物体,这时只需将描述门的像素数据送到帧缓冲区中,门后面的物体是被门挡住了的,不应该将描述门后物体的像素数据送到帧缓冲区。而当门开着的时候,我们需要将描述门后物体的像素数据送到帧缓冲区中。同时如果需要Alpha混合,则还需要将两个物体的重叠部分的像素的颜色值做混合处理。
这8个模块是3D图形处理器IP核的核心所在,我们的工作就是在课题组已有工作的基础上,在4块FPGAJ2用Verilog HDL来设计完善这8个模块。
四、IP核的验证平台
验证平台的结构示意图如图所示。
图2:验证平台的结构示意图
验证平台所使用的4片FPGA芯片是EP2C20Q240C8,它有18752个逻辑单元和239616BitSMemory,芯片之间采用级联的形式,按先后顺序我们分别用FPGAl、FPGA2、FPGA3、FPGA4来表示。
IP核的8个模块需要按照图形管线的结构分别映射到4片FPGA中,根据图形管线各模块所做的工作,每个模块在FPGA中的分配如图3所示。
图3:IP核各模块在FPGA中的分配
按照图中的划分,我们可以看作是将IP核划分成了4部分,这里我们分别称之为FPGAl模块、FPGA2模块、FPGA3模块和FPGA4模块。由于条件限制,用来模拟CPU发送数据的epu.module也需要我们用Verilog HDL设计,epu 和IP核的几何变换模块属于模块,口核的光_module FPGAl照模块属于FPGA2模块,FPGA3模块则包含了IP核图形管线的图元装配模块、剔除剪切模块、背面剔除模块和投影模块,IP核图形管线最后两个模块光栅化和片段处理属于FPGA4模块。
相关阅读:
技术分享:基于FPGA的水声信号采集与存储系统设计
浅析以FLASH和反熔丝技术为基础的FPGA
基于FPGA复位的可靠性设计方法讲解