基于FPGA的3D图像处理器IP核的实现
摘要:2000年以来,随着嵌入式技术不断发展,很多基于嵌入式系统的数字化产品已经继PC机之后信息处理的又一大主要工具。它们都需要具备图形处理的功能,并且显示的内容也正经历从简单2D图形到3D图形的转变。本设计采用OpenGL作为系统的图形API,选取了21条基本的API命令,定义了它们的渲染列表格式和命令字编码,并以此作为IP核的设计规约。
1 项目背景
1.1 研究背景
LCD显示屏的应用越来越广,数量越来越多。LCD显示屏应用广泛,无处不在。如家庭各种电器设备。更常见是用于各种公共场合如体育馆、广场等商业用途。给我们传递一种更为直观、生动的信息。从此我们的生活发生了巨大改变。巨大的应用巨大的市场带来了巨大的商机。而与此同时,立体影像产业酿巨变,3D热潮势不可挡——电视机/显示设备。
基于FPGA的LCD显示的3D影像是为了LCD显示屏的信息量更多,满足人需求。
1.2 基于FPGA的立体显示的优越性
本项目通过在FPGA上用Verilog语言实现3D影像在LCD的成像,具有以下优势:
- 采用可编程的FPGA进行设计,便于设计的更新与升级,节约成本。
- 缓解CPU在图形处理方面的负担。
- 满足广大消费者对3D影像的需求
- LCD体积小、质量轻、功耗低,可以用大规模集成电路直接驱动,可以在明亮环境下显示,不含射线伤害。
2 项目方案
2.1 实现功能
- 将IP核划分为四部分,这里我们分别称之为FPGA1模块、FPGA2模块FPGA3和模块FPGA4模块,模拟CPU发送数据的cpu_module需要我们用Verilog HDL设计。Cpu_module和IP核的几何变换模块属于FPGA1模块,IP核的光照模块属于FPGS2模块,FPGA3模块则包含了IP核图形管线的图元装配模块,剔除剪切模块、背面剔除模块和投影模块,IP核图形管线最后两个模块光栅化和片段处理属于PFGA4模块。
2.2硬件设计
通过上面对整个系统功能要求, 性能要求的分析, 我们可以确定系统的基本硬件结构, 其组成框图如下所示::
IP核图形管线的组成
图中的cpu module模块用来模拟图形应用程序经CPU处理得到渲染列表的过程,它将渲染列表命令以GPU方言的形式送到GPU,并等待图形管线中8级流水线的处理。整个图形管线分为两部分,几何部分和光栅部分,图中的前6个模块几何变换、光照、图元装配、裁剪、背面剔除、投影属于几何部分,后2个模块光栅化和片段处理属于光栅部分。
下面就图形管线每个模块的功能做一个简要的陈述。
首先是对cpu module送来的数据进行几何变换,一个三角形图元由三个顶点构成,每个顶点包含的信息有位置信息、法线信息、颜色信息等。由于三维空间中的物体都是以顶点的形式描述,所以几何变换模块主要是对舀Begin和glEnd之间的顶点数据流和相关命令的处理,所做的工作包含对顶点坐标的平移、旋转、缩放。
然后是对顶点颜色的计算,每个顶点都可以有自己的颜色。影响物体颜色的因素有几个方面,一是环境光照的影响,二是物体材质本身对光源进行调制,三是光源的位置,因此该级模块有很多需要根据渲染列表中的命令设置相应的参数,然后按照光照原理和各个模型参数计算出顶点的颜色。顶点的坐标位置和颜色信息有了以后就需要将单独的顶点数据组装成一个个图元,OpenGL支持的图元有点、线、三角形、折线、线环、三角形带和三角形扇等。我们的IP核目前只考虑了对三角形图元的处理,因为三角形是最基本的图元,其它图元只要在图元装配一级做一些处理就可以转化为对三角形图元的处理,点和线段的处理比三角形的处理简单,只是在光栅化一级稍有不同,而一些复杂图元则可以分解成三角形图元来处理。
图元装配完成以后就应该对不在视景体内的图元进行剔除,对部分在视景体内的图元进行剪切。由于视野的限制,人不可能同时看到所有的物体,举例来说,你不可能看到自己背后是什么物体,因此在图形学中用视景体来模拟视野的限制,将一些不显示的图元剔除剪切掉,以避免后级不必要的计算,减轻后级的负担。
背面剔除模块的工作是判断图元的正反面,根据需要显示我们希望看到的那一面。因为虽然在视景体外面的图元被剪切掉了,但是并不意味着所有剩下的图元都会被显示出来,比如一枚硬币,当印有人头的一面对着我们的时候,另一面的字就不能呈现在我们面前,后级的处理也就不需要考虑有字的那一面。
前面五级的处理对象都是三维空间中的顶点数据,但我们的显示设备只是二维的,这就需要我们将视景体中的三维图元映射到二维平面上,投影交换模块的作用就在于此。至此三维图元就变成了二维的图元,后面两级就只需要对二维图元进行处理。
光栅化一级需要将二维图元的坐标变换成整数
IP核 3D图像处理器 FPGA LCD Verilog 相关文章:
- μC/GUI在基于NiosⅡ嵌入式开发平台的环境智能监控系统中的移植与应用(01-14)
- 基于Zynq的OLED驱动设计(10-04)
- 如何仿真IP核(06-06)
- LabVIEW FPGA代码模块设计(IP核)(06-06)
- IP核互连策略及规范(06-06)
- 如何实现IP核心网的QoS(06-06)