当前位置:智城范文网>范文大全 > 征文 > 图形处理器中顶点染色仿真器的设计

图形处理器中顶点染色仿真器的设计

时间:2022-03-24 09:09:10 来源:网友投稿

摘要:为了验证图形处理器(graphic processing unit ,GPU)中硬件仿真结果的正确性,采用文中设计的仿真器,将需要的指令集翻译成二进制并模拟硬件流水线进行功能仿真,经过对比,结果表明,翻译出的二进制正确,并且按照硬件流水线写出的汇编程序在仿真时能够快速检测硬件中出现的问题,让其快速修改。

关键词:仿真器 二进制 汇编程序 验证

中图分类号:TP391.41 文献标识码:A 文章编号:1007-9416(2012)12-0109-02

1、引言

在图形处理器(GPU)[1]中,顶点染色器主要完成顶点、纹理坐标、光栅位置、法向量、源位置和聚光灯方向向量的旋转、平移和缩放操作,以及顶点坐标的光照计算[2]为了更好的验证硬件流水线中顶点染色器的功能。设计了本文中的仿真器,该仿真器采用C#语言编写,主要实现了一些精简指令集(RISC)[3][4]的功能仿真。它主要由汇编模块、指令集仿真模块(像素染色器功能仿真模块)两个模块组成。汇编模块主要是对用户所编写的像素染色汇编指令[5]进行汇编处理,汇编指令经过该模块处理后,将被解析成像32位长的二进制机器码,供仿真时使用。指令集仿真模块实现了对像素染色功能上的仿真。在该模块中,指令集仿真模块在接收到用户指令后,将对对应的指令进行译码、执行,并将结果更新到对应的寄存器和片上存储中,从而实现了对像素染色功能上的仿真。

2、算法及功能实现

2.1 汇编模块设

本系统是针对图形处理器(GPU)项目而专门开发的仿真平台,因而在汇编模块首先要实现项目中所定义的精简指令集(RISC)的汇编指令翻译。这些指令可分为定点,浮点,跳转指令,统一编码格式为32位。根据汇编指令格式的不同来进行划分,分别进行汇编翻译。

2.1.1 定点指令

定点指令分为四类指令:(1)算术运算类指令;(2)逻辑运算类指令;(3)移位操作指令;(4)乘法/除法指令

指令格式规定如下,31:30两位表示定点指令,29:28两位表示操作类型,27:23五位表示操作码,第22位表示源操作数2类型,21:17五位表示目的操作数,16:12五位表示源操作数1,11:7五位表示源操作数2,有立即数时,11:1十一位表示立即数,最后加一位空操作指示。

针对定点指令的格式划分,将定点指令分为单操作数(即源操作数1/立即数)和双操作数(即源操作数1和源操作数2/立即数)两种指令类型,根据操作数的不同分别进行汇编翻译,定点指令伪代码如下:

(1)MOV RD,RS1;把RS1的内容送到RD中;

(2)MOV RD,#立即数;把立即数送到RD中;

(3)ADD RD,RS1,RS2;把RS1+RS2的和的内容送到RD中;

(4)ADD RD,RS1,#立即数;把RS1+立即数的和的内容送到RD中。

2.1.2 浮点指令

浮点指令分为四类指令:(1)前向单元处理类指令;(2)浮点加法类指令;(3)浮点乘法指令;(4)浮点除法指令

浮点指令格式划分与定点类似,所以针对浮点指令格式的划分,将浮点指令分为单操作数(即源操作数1)和双操作数(即源操作数2)两种指令类型,和定点指令一样根据操作数的不同分别进行汇编翻译,浮点指令伪代码如下:

(1)FMOV FRD,FRS1;把FRS1中的内容送到FRD中。

(2)FMOVLT FRD,FR_test,FRS1;如果FR_test<浮点最小数,则把FRS1中的内容送到FRD中。

2.1.3 跳转指令

跳转指令格式也与定点,浮点指令类似。因而针对跳转指令格式的划分,将跳转指令分为有操作数(即源操作数1)和无操作数(即立即数)两种指令类型,和定点浮点指令一样根据操作的不同分别进行汇编翻译,跳转指令伪代码如下:

BEQZ RS, name;如果RS==0,则把pc的低16位用name的低16位替换,作为新的pc值。

2.1.4 算法描述

根据对定点,浮点,跳转指令格式的分析,在本仿真平台中,首先设计了一个解析类parser,这个类专门用来对所规定的指令集进行汇编翻译解析成二进制机器码。当把指令加载到文本框中时,首先对指令进行判断,若是判断是定点,浮点,还是跳转指令,然后再根据指令的操作数的不同分别进行解为空或者指令格式不正确,则提示输入指令格式错误,若是无误,则根据指令的高两位进行析。根据操作数个数的不同将汇编指令划分为0段式,1段式,2段式,3段式。分别进行解析将指令解析成二进制机器码.

通过此过程,将得到32位长的二进制机器码,例如对加法指令ADD(3段式指令解析) 进行二进制转化;

当程序扫描到ADD指令时,将ADD转化为指令集中制定时所对应的编码,由于定点,浮点,跳转指令在指令集中都有相对应的编码及长度,所以ADD指令对应的指令编码为000000000且长度为9。寄存器R1,R2,R3分别对应着指令格式中的目的操作数,源操作数1,源操作数2。属于3段式指令解析。在指令格式中,他们所对应的指令编码长度分别为5位,5位,5位,并根据寄存器右下角的数字1,2,3。通过库函数BDConverter分别转化成二进制数1,2,3。得到相对应的二进制码00001,00010,00011。在指令类型和操作数之间还应该加上对源操作数2的判断标志位,若为寄存器,则此标志位为0。若为立即数,则此标志位为1。最后由于指令格式为32位,因而补齐32位在指令编码的空操作段中,故补齐7位二进制编码0000000。为了将指令类型,操作数分开表示,可在指令类型,操作数(目的操作数,源操作数1,源操作数2,立即数)之间分别加下划线‘_’予以划分。由上述算法分析可得ADD指令的32位机器码:

指令:ADD R1, R2, R3

译码为:000000000_0_00001_00010_00011_0000000

指令:ADD R1, R2, #12

译码为:000000000_1_00001_00010_000000011000

浮点,跳转指令转化算法类似,根据操作数个数以及指令长度编码分别进行转化。

2.2 指令集仿真模块设计

本模块是在汇编模块的基础上,对汇编指令进行功能上的仿真。例如对加减乘除移位指令的片上存储位置以及寄存器内容的仿真。因而在此模块需要利用在汇编模块转化得到的32位机器码,对机器码进行划分。利用划分得到的机器码进行仿真。

如对加法指令ADD R1,R2,R3进行仿真,将汇编模块翻译得到的32位二进制机器码:000000000_0_00001_00010_00011_0000000 。以下划线为分隔符分别用字符数组Keywords来存储,Keywords[0],Keywords[1],Keywords[2],Keywords[3],Keywords[4],分别代表指令类型,操作码,目的操作数,源操作数1,源操作数2,通过库函数BDConverter分别将字符数组Keywords中的二进制码转化为十进制数,进行汇编指令的功能仿真,将寄存器R3中的内容与寄存器R2中的内容相加送至寄存器R1中。若是源操作数2为立即数,例如ADD R1,R2,#12,译码为:000000000_1_00001_00010_0000000 11000.通过对操作码0或1的判断,得知此时源操作数2为立即数,因而将立即数加上寄存器R2的内容送至寄存器R1中。其他汇编指令的功能仿真与此类似。

3、结语

文中设计的仿真器,能将需要的光照纹理染色程序所对应的汇编指令集翻译成二进制并模拟硬件流水线进行功能仿真,根据仿真结果对比验证能够快速检测硬件设计中出现的问题,使其快速修改,提高作业效率。

参考文献

[1]吴恩华.图形处理器用于通用计算的技术,现状及其挑战[J].软件学报,2004,(10).

[2]张尤赛,陈福民.基于纹理映射与Phong光照模型的体绘制加速算法[J].中国图象图形学报,2003,(09).

[3]李锐.计算机体系结构及RISC发展的分析[J].科技信息,2009,(17).

[4]谈怀江.计算机指令系统的变化及发展[J].科技信息(学术研究),2007,(15).

[5]徐旭,李玉珏.汇编语言程序调试及运行[J].电脑编程技巧与维护,2005,(01).

推荐访问: 仿真器 染色 顶点 图形处理 器中

版权所有:智城范文网 2010-2025 未经授权禁止复制或建立镜像[智城范文网]所有资源完全免费共享

Powered by 智城范文网 © All Rights Reserved.。粤ICP备20058421号