版权归原作者所有,如有侵权,请联系我们

[科普中国]-图形处理单元

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

图形处理单元是指3D引擎的关键模块。本模块处理的命令可分为配置信息命令、堆栈操作命令、清除缓冲区命令、累积缓冲区命令、片段数据和非本单元使用的命令6 种。所以将本模块划分成6个部分来实现,如 “CAC 模块”所示。命令解析部分负责命令的初步解析和分派,配置信息部分负责配置信息命令的解析和保存,堆栈操作部分负责堆栈操作命令的解析和参数的存取,清除部分负责清除缓冲区命令的解析和清除处理,累积部分负责累积缓冲区命令的解析和累积操作,读数据部分负责本模块和后续模块所需目标信息的读取,发送部分负责发送处理好的数据和非本单元处理的命令。

简介在多元化应用需求的推动下,半导体制造工艺水平飞速发展,计算机系统的功能和性能极大地丰富和提高。图形处理器( Graphic Processing Unit,GPU) 作为计算机显示系统的核心,具有强大的数据计算能力,以硬件加速器的形式实现了二维/三维( Two Dimension /Three Dimension,2D/3D) 图形处理、图像处理和显示控制等功能,将通用CPU从复杂的图形算法和绘制中解放出来,已经成为几乎所有类型计算机系统的标准配置。

片段处理单元( Fragment Operation Unit,FOU) 是GPU 3D 引擎的关键模块,处于3D图形流水线的末端,承担着合并和输出图形的任务。更为重要的是,FOU决定了实现3D图形特殊显示效果的能力,例如,图形的透明效果、抗锯齿处理、布告板技术、景深效果、运动模糊等技术均需要FOU的支持。在高端GPU中,集成FOU的数量越来越多,并以阵列方式加速对海量图元片段的处理。可见,FOU是GPU中不可或缺的关键模块,具有重要的研究价值和实用意义1。

清除和累积操作单元本模块处理的命令可分为配置信息命令、堆栈操作命令、清除缓冲区命令、累积缓冲区命令、片段数据和非本单元使用的命令6 种。所以将本模块划分成6个部分来实现,如 “CAC 模块”所示。命令解析部分负责命令的初步解析和分派,配置信息部分负责配置信息命令的解析和保存,堆栈操作部分负责堆栈操作命令的解析和参数的存取,清除部分负责清除缓冲区命令的解析和清除处理,累积部分负责累积缓冲区命令的解析和累积操作,读数据部分负责本模块和后续模块所需目标信息的读取,发送部分负责发送处理好的数据和非本单元处理的命令。

配置信息命令由命令解析电路发送到配置信息部分,配置信息电路对相应的参数解析并将信息保存到配置寄存器中供其他操作使用; 堆栈操作命令由命令解析电路发送到堆栈操作部分,堆栈操作电路接收到堆栈操作命令后,会进行配置信息的保存( 压栈) 或读取( 出栈);清除操作命令由命令解析电路发送到清除部分,由清除操作电路产生写缓冲区的坐标地址和数据,并将数据发送出去;累积操作命令由命令解析电路发送到累积操作部分,由累积操作电路产生新的坐标地址和数据,并将数据发送出去;当命令解析部分接收到片段数据时,若后续模块的处理需要目标片段值,则发送到读数据部分读取目标片段,否则将命令直接发送;不是本单元所需的命令将其直接发送出去。以上所有的数据和命令最终都由发送部分传送到下一级流水线单元2。

片段测试单元本单元将接收到的命令分流成两部分,一部分进行配置信息相关的操作,另一部分进行测试处理。这两部分数据最终都将会以命令的形式发送出去。另外,在参数配置的过程中会出现对配置信息的堆栈操作。将片段测试的处理划分为输入选择、配置参数、片上存储、测试处理和输出控制5个功能模块。

输入选择模块负责对收到命令的初步译码,把命令分流成两路,一路进行片段测试处理,另一路进行参数配置。同时,为了确保命令的顺序执行,当且仅当后续各模块都空闲时本模块才会接收新的命令。

配置参数模块会对接收到的命令进行进一步的解析,进行两方面的处理。一方面提取命令中携带的配置信息保存到配置参数寄存器中; 另一方面当接收到压栈命令时,将相应配置参数寄存器中的配置信息存储到片上存储中,当接收到出栈命令时,读取片上存储中的数据,更新配置参数寄存器。

测试处理模块会根据配置参数设置的处理环境对输入的图形片段进行测试,并将测试结果与输入信息同时发送到输出控制模块。本模块会对片段进行裁剪测试、alpha 测试、深度测试和模板测试,另外在使用模板测试时,会根据模板测试和深度测试的结果更新模板缓冲区中对应位置的模板值。

经过分流处理的两路命令在输出控制模块选择输出。配置参数模块的输出数据是后级流水线需要的配置信息时会直接输出;测试处理模块的输出将根据测试结果选择性地输出:若图形片段的所有测试均通过,则将输入图形片段的命令输出;若模板测试开启,除深度/模板测试外的其他测试均通过,则不管是否通过深度/模板测试,结果都将输入数据输出,并标记为只写模板值,此时的深度和颜色数据不会写入帧缓存中;若模板测试没有开启,则只要有一项测试失败,输入数据都不会发送到下一级流水线单元3。

混合和逻辑操作单元本模块中的混合操作是对源片段的颜色和目标片段的颜色进行算数运算得到最终颜色。首先需要运用乘法运算采用混合因子对颜色成分进行缩放,然后再将源成分和目标成分进行混合。为了提高电路的处理速度,将乘法运算和混合分步处理,采用流水的方式实现,首先进行乘法运算(混合1) ,然后进行混合运算(混合2) 。由于逻辑操作和屏蔽缓冲区的实现均是一些逻辑运算,可以采用组合电路实现,在数据输出控制部分完成。据此,将BDLM单元的设计划分为5个单独的模块,分别是命令解析模块、RAM模块、混合1模块、混合2模块和输出控制模块。其中混合1模块和混合2模块分步实现混合操作的功能。各模块之间的连接关系和本单元总体结构“BDLM模块”。

命令解析模块提取并保存命令中的配置信息,并在接收到堆栈操作命令时对配置信息进行保存和更新。当接收到需要处理的片段信息时,将配置信息和片段信息同时发送到相应的处理电路。

图形片段数据依次经过混合1和混合2电路的处理完成混合操作。首先完成混合操作中的乘法运算,根据混合方式将源片段和目标像素分别乘以对应的混合因子,得出新的颜色值。然后根据混合方式将新的源片段和目标像素的颜色值进行加、减、取最大值或最小值,得到新的源片段值。混合操作后新生成的片段值在输出控制模块完成逻辑操作和屏蔽处理。

至此,所有的数据处理完毕,生成的像素、深度和模板值即为最终要写入帧缓存的数据。片段处理单元写入帧缓存的数据宽度是128b,而处理产生的数据宽度是32b,所以对帧缓存的一次写操作能够装载4个数据。为了减少帧缓存的访问次数,增大带宽利用率,在片段处理单元缓存4个数据后再写入帧缓存,由“输出控制”模块根据坐标连续的原则,将属于同一地址的数据以4个为一组进行数据的合并输出3。

虚拟仿真与原型验证一方面,构建了虚拟仿真平台,并采用Cadence NCVerilog仿真工具进行功能验证,将输出结果保存成图片。另一方面,基于Xilinx Vertex6 XC6VLX760 FPGA 构件原型系统,并对FOU 进行原型验证。采用Xilinx ISE 工具对设计进行综合,FOU的工作频率达到180 MHz。另外,为了评估ASIC 实现时的性能,基于SMIC65nm CMOS工艺下,采用Synopsys Design-Compiler 对设计进行综合,电路工作频率达到300 MHz,大于GPU 芯片工作频率270 MHz 的设计要求,能够满足应用需求。

为了能全面地对FOU 的功能进行验证,将FPGA原型验证结果与虚拟仿真平台输出的结果和在Windows 下用MicrosoftVisual Studio 2008 软件运行OpenGL 函数编写的C ++ 程序所得的图形进行对比。

在清除缓冲区的测试中将颜色缓冲区的清除值设置为灰色(0.5,0.5,0.5,0.5) ,则整个屏幕显示为灰色。累积操作首先采用GL_ACCUM 累积模式,value 值设置为3.5,对图形进行操作,然后采用GL_RETURN 操作模式,value 值设置为1.0,将累积操作的结果返回到颜色缓冲区进行显示。不同像素颜色成分经过累积操作之后使图形显示不同的层次,这就是图形景深效果的基本原理。将裁剪框设置为图中白色部分,绘制三角形和矩形框,使三角形全部落在裁剪框之中,矩形框全部落在裁剪框之外。经过裁剪测试后只有三角形显示出来。alpha 测试所用原始图形,分别绘制一个颜色渐变的三角形和矩形,它们的alpha 值分别由0.1、0.4、0.8 和0.1、0.4、0.7、0.8 经过插值运算得来,所以两个图形的alpha 值范围均为0.1 ~ 0.8。将alpha 测试的比较函数设置为GL_GREATER,参考值设置为0.4,则只有alpha 值大于0.4 的部分图形能够显示出来。模板测试用图,图中白色以及两条白色边框内的部分为模板,蓝色矩形为绘制图形,将模板测试函数设置为GL_NOTEQUAL,则只有在模板之外的图形能够显示出来。混合操作的一个重要作用是实现图形的抗锯齿功能,第一行的图形是没有使用混合功能时绘制的点,边缘比较明显,呈现出小矩形的形状。第二行的图形是使用混合功能将每个像素的alpha 值作为混合因子采用GL_FUNC_ADD 方式进行混合之后的图形,边缘被锐化了,呈现出边缘平滑的原点。逻辑操作测试输入为黄色三角形,将逻辑操作码设置为GL _NOR,黄色三角形与黑色的背景经过逻辑操作后变成蓝色( 0,0,1)。使用屏蔽操作绘制的三角形,将屏蔽码设置为( 0,1,1) ,屏蔽红色成分。则经过平滑着色产生的带有红绿蓝成分的三角形经过屏蔽操作后只有绿色和蓝色成分被显示2。

本词条内容贡献者为:

王海侠 - 副教授 - 南京理工大学