本发明属于计算机硬件建模技术领域,具体涉及一种基于systemc的gpu纹理贴图周期精确联合仿真模型。
背景技术:
随着图形化应用的不断增加,早期单靠cpu进行图形绘制的解决方案已经难以满足成绩和技术增长的图形处理需求,图形处理器(graphicprocessingunit,gpu)应运而生。从1999年nvidia发布第一款gpu产品至今,gpu技术的发展主要经历了固定功能流水阶段、分离染色器架构阶段、统一染色器架构阶段,其图形处理能力不断提升,应用领域也从最初的图形绘制逐步扩展到通用计算领域。gpu流水线高速、并行的特征和灵活的可编程能力,为图形处理和通用并行计算提供了良好的运行平台。
gpu采用数量众多的计算单元,具有大规模并行计算能力,为图形处理和通用并行计算提供了良好的运行平台。目前,我国gpu研制能力薄弱,各领域显示控制系统中大量采用国外进口的商用gpu芯片;尤其是在军用领域中,国外进口商用gpu芯片存在安全性、可靠性、保障性等方面的隐患,无法满足军用环境的需求。上述问题严重制约了我国显示系统的独立研制和自主发展,突破图形处理器关键技术、研制图形处理器芯片迫在眉睫。
面向gpu纹理贴图是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。在现有纹理贴图的建模中,需要撰写大量的代码,导致开发人员的工作量较大,对建模的仿真效率较低,工作效率较低。
技术实现要素:
为了解决现有技术中存在的上述问题,本发明提供了一种基于systemc的gpu纹理贴图周期精确联合仿真模型及方法。本发明要解决的技术问题通过以下技术方案实现:
本发明实施例提供了一种基于systemc的gpu纹理贴图周期精确联合仿真模型,包括:
纹理贴图模块,用于根据纹理请求产生第一纹素数据地址,根据所述第一纹素数据地址获取第一纹素数据,并对所述第一纹素数据进行纹理过滤,得到纹理颜色数据;
一级缓存模块,用于判断所述第一纹素数据地址是否命中,若是,则输出所述第一纹素数据;若否,则根据所述第一纹素数据地址产生第二纹素数据地址,并将由所述第二纹素数据地址获取得到的第二纹素数据更新为第一纹素数据;
二级缓存模块,用于判断所述第二纹素数据地址是否命中,若是,则输出所述第二纹素数据;若否,则根据所述第二纹素数据地址产生纹素数据存储地址,并将由所述纹素数据存储地址获取得到的第三纹素数据更新为第二纹素数据。
在本发明的一个实施例中,所述纹理贴图模块连接第一纹素数据获取接口,所述第一纹素数据获取接口用于根据所述第一纹素数据地址获取所述第一纹素数据。
在本发明的一个实施例中,所述一级缓存模块连接第一纹素数据输出接口和第二纹素数据获取接口,其中,所述第一纹素数据输出接口连接所述第一纹素数据获取接口,用于输出所述第一纹素数据;所述第二纹素数据获取接口用于根据所述第二纹素数据地址获取所述第二纹素数据;
在本发明的一个实施例中,所述二级缓存模块连接第二纹素数据输出接口和第三纹素数据获取接口,其中,所述第二纹素数据输出接口连接所述第二纹素数据获取接口,用于输出所述第二纹素数据;所述第三纹素数据获取接口用于根据所述纹素数据存储地址获取所述第三纹素数据。
在本发明的一个实施例中,所述一级缓存模块还连接第一缓存清理接口,所述第一缓存清理接口用于清除所述一级缓存模块中的所有数据;
所述二级缓存模块还连接第二缓存清理接口,所述第二缓存清理接口用于清除所述二级缓存模块中的所有数据。
在本发明的一个实施例中,还包括:
解压缩模块,用于对所述第二纹素数据进行解压缩,得到解压缩后的第二纹素数据。
在本发明的一个实施例中,所述解压缩模块连接第四纹素数据获取接口和第四纹素数据输出接口,
所述第四纹素数据获取接口连接所述第二纹素数据输出接口,用于向所述二级缓存模块获取所述第二纹素数据;
所述第四纹素数据输出接口连接所述第二纹素数据获取接口,用于输出所述解压缩后的第二纹素数据。
在本发明的一个实施例中,所述纹理贴图模块、一级缓存模块、所述解压缩模块和二级缓存模块分别在相应的时钟周期内执行并行且相互配合的进程。
本发明的另一个实施例提供了一种基于systemc的gpu纹理贴图周期精确联合仿真方法,其特征在于,包括步骤:
s1、根据纹理请求产生第一纹素数据地址;
s2、判断所述第一纹素数据地址是否命中;
s3、当判断所述第一纹素数据地址命中时,对由所述第一纹素数据地址获取得到的第一纹素数据进行纹理过滤;
s4、当判断所述第一纹素数据地址未命中时,则根据所述第一纹素数据地址产生第二纹素数据地址;并判断所述第二纹素数据地址是否命中;当判断所述第二纹素数据地址命中时,则输出所述第二纹素数据地址对应的第二纹素数据,并将所述第二纹素数据更新为第一纹素数据,对所述第一数据进行纹理过滤;
s5、当判断所述第二纹素数据地址未命中时,根据所述第二纹素数据地址产生纹素数据存储地址;根据所述纹素数据存储地址获取第三纹素数据,并将所述第三纹素数据更新为第二纹素数据,将所述第二纹素数据更新为所述第一纹素数据,对所述第一数据进行纹理过滤。
与现有技术相比,本发明的有益效果:
1、本发明的仿真模型可以使得软件算法、硬件体系结构、soc接口和系统级设计得到快速有效的建立,并可以对模型进行仿真、验证和优化,同时该模型在不同层次上建模,减小了开发人员的代码量和工作量,从而提高了仿真效率,提高了开发人员的工作效率。
2、本发明的仿真模型在按照硬件执行的时钟周期进行周期精确的建模,在仿真时可以控制时序,并且使得模块的执行过程同步,进而可以对硬件性能进行评估,实现更高效的仿真。
附图说明
图1为本发明实施例提供的一种基于systemc的gpu纹理贴图周期精确联合仿真模型的结构示意图;
图2为本发明实施例提供的一种基于systemc的gpu纹理贴图周期精确联合仿真方法的流程示意图;
图3为本发明实施例提供的一种纹理贴图模块的结构示意图;
图4为本发明实施例提供的一种纹理贴图方法的流程示意图。
具体实施方式
下面结合具体实施例对本发明做进一步详细的描述,但本发明的实施方式不限于此。
实施例一
请参见图1,图1为本发明实施例提供的一种基于systemc的gpu纹理贴图周期精确联合仿真模型的结构示意图。
该模型是采用systemc和事务级建模方法对gpu纹理贴图进行了周期精确的建模。systemc是osci(opensystemcinitiative)组织制定和维护的一种基于c 的建模平台,它完全是用c 语言编写的,由经过精心设计的c 类库和仿真内核构成,支持门级、rtl级、系统级等各个抽象层次上硬件的建模和仿真,而且是开放源代码的。systemc支持硬件/软件协同设计,能够描述由硬件和软件组成的复杂系统的结构,支持在c 环境下对硬件、软件和接口的描述。用systemc可以实现功能模块、通信模块、软件模块和硬件模块在各种系统级层次上的抽象,其引进的端口和信号的数据类型描述、时钟和延时的概念,正是基于要把软硬件的描述统一到一种建模语言的思想。用systemc可以快速有效地建立软件算法的精确模型、硬件的体系结构、soc的接口和系统级的设计,并对设计进行仿真、验证和优化。
该仿真模型具体包括:纹理贴图模块、一级缓存模块和二级缓存模块。
纹理贴图模块用于根据纹理请求产生第一纹素数据地址,并对由第一纹素数据地址获取得到的第一纹素数据进行纹理过滤。一级缓存模块用于判断第一纹素数据地址是否命中,若是,则输出第一纹素数据;若否,则根据第一纹素数据地址产生第二纹素数据地址,并将由第二纹素数据地址获取得到的第二纹素数据更新为第一纹素数据;二级缓存模块用于判断第二纹素数据地址是否命中,若是,则输出第二纹素数据;若否,则根据第二纹素数据地址产生纹素数据存储地址,并将由纹素数据存储地址获取得到的第三纹素数据更新为第二纹素数据。
具体地,纹理贴图模块tmu根据统一染色阵列usa发送的纹理请求产生第一纹素数据地址即l1地址(i,j),并根据第一纹素数据地址(i,j)向一级缓存模块taul1cache获取对应的第一纹素数据l1;一级缓存模块taul1cache接收到第一纹素数据地址(i,j)后,将第一纹素数据地址(i,j)与其中缓存的数据地址进行比对,若比对成功,则第一纹素数据地址(i,j)命中成功,一级缓存模块taul1cache将第一纹素数据地址(i,j)对应的第一纹素数据l1输出至纹理贴图模块tmu;纹理贴图模块tmu获取得到第一纹素数据l1后,对第一纹素数据l1进行纹理过滤,以实现纹理贴图。
进一步地,若第一纹素数据地址(i,j)命中失败,则一级缓存模块taul1cache根据第一纹素数据地址(i,j)产生第二纹素数据地址(i’,j’),并根据第二纹素数据地址(i’,j’)向二级缓存模块taul2cache获取对应的第二纹素数据l2;二级缓存模块taul2cache中存储有地址连续的若干纹素数据,当二级缓存模块taul2cache接收到第二纹素数据地址(i’,j’)后,将第二纹素数据地址(i’,j’)与其中存储的若干纹素数据地址进行比对,若比对成功,则第二纹素数据地址(i’,j’)命中成功,二级缓存模块taul2cache将第二纹素数据l2输出至一级缓存模块taul1cache;一级缓存模块taul1cache用获取得到的第二纹素数据l2代替掉其中使用次数最少的纹素数据,从而将第二纹素数据l2更新为第一纹素数据l1,该第一纹素数据l1数据与第一纹素数据地址(i,j)相对应,此时,一级缓存模块taul1cache将更新后的第一纹素数据l1输出至纹理贴图模块tmu,纹理贴图模块tmu获取得到第一纹素数据l1后,对第一纹素数据l1进行纹理过滤,以实现纹理贴图。
进一步地,第二纹素数据地址(i’,j’)命中失败,由于纹素数据存储在ddr中,因此,则二级缓存模块taul2cache根据第二纹素数据地址(i’,j’)产生纹素数据存储地址即ddr线性地址,并将ddr线性地址通过总线axi输出至ddr;ddr根据接收到的ddr线性地址读取其对应的第三纹素数据,并将第三纹素数据输出至二级缓存模块taul2cache;二级缓存模块taul2cache用获取得到的第三纹素数据代替代替掉其中使用次数最少的纹素数据,从而将第三纹素数据更新为与第二纹素数据地址(i’,j’)对应的第二纹素数据l2,然后将更新后的第二纹素数据l2输出至一级缓存模块taul1cache;一级缓存模块taul1cache用更新后的第二纹素数据l2代替掉其中使用次数最少的纹素数据,从而将更新后的第二纹素数据l2再次更新为与第一纹素数据地址(i,j)相对应的第一纹素数据l1,此时,一级缓存模块taul1cache将更新后的第一纹素数据l1输出至纹理贴图模块tmu,纹理贴图模块tmu获取得到第一纹素数据l1后,对第一纹素数据l1进行纹理过滤,以实现纹理贴图。
上述仿真模型中,按照硬件执行的时钟周期对gpu纹理贴图进行周期精确的建模,每个模块内部都包含了各自独立、并行执行的进程,每个进程都有一个共同的事件触发—时钟上升沿,使得纹理贴图模块tmu、一级缓存模块taul1cache和二级缓存模块taul2cache三个模块分别在固定的时间内执行相应的进程,这些进程并行且相互配合;也就是说,该仿真模型通过时钟信号控制了时序,并且模块的执行过程同步。以纹理贴图模块tmu、一级缓存模块taul1cache为例,纹理贴图模块tmu在其相应的时钟周期内产生第一纹素数据地址,一级缓存模块taul1cache在其相应的时钟周期内输出第一纹素数据,二者可以为并行的,当在一级缓存模块taul1cache的时钟周期内没有第一纹素数据时,则一级缓存模块taul1cache闲置,直至出现第一纹素数据,然后在下一个相应的时钟周期上升眼到来时,再运输并输出第一纹素数据。
本实施例的仿真模型在按照硬件执行的时钟周期进行周期精确的建模,在仿真时可以控制时序,并且使得模块的执行过程同步,进而可以对硬件性能进行评估,实现更高效的仿真。
进一步地,纹理贴图模块连接第一纹素数据获取接口tmu2l1cacheport,用于根据第一纹素数据地址向一级缓存模块获取第一纹素数据。一级缓存模块连接第一纹素数据输出接口tmu2l1cacheexport和第二纹素数据获取接口l1cache2s3tcport;其中,第一纹素数据输出接口连接第一纹素数据获取接口,用于向纹理贴图模块tmu输出第一纹素数据;第二纹素数据获取接口用于根据第二纹素数据地址向二级缓存模块taul2cache获取第二纹素数据。二级缓存模块连接第二纹素数据输出接口s3t2l2cachecexport和第三纹素数据获取接口;其中,第二纹素数据输出接口连接第二纹素数据获取接口tau2axiport,用于向一级缓存模块taul1cache输出第二纹素数据;第三纹素数据获取接口用于根据纹素数据存储地址向纹素数据存储器ddr获取第三纹素数据。在上述仿真模型中,每个模块中的每个进程都可以调用各自模块的事务级接口中的函数,来相互传递信息。
进一步的,该仿真模型还包括解压缩模块taus3tc。
解压缩模块用于对第二纹素数据进行解压缩,得到解压缩后的第二纹素数据。通常,ddr是以压缩包的形式存储纹素数据,二级缓存模块taul2cache从ddr获取得到第三纹素数据是以压缩包的形式存储的,因此,由第三纹素数据更新得到的第二纹素数据也是压缩包形式,因此,在第二纹素数据进入一级缓存模块taul1cache之前,对第二纹素数据进行解压缩,以得到解压缩后的数据。具体的,解压缩的比例为1:4,第二纹素数据经过解压缩,其位数由1位变为4位。
进一步的,解压缩模块连接第四纹素数据获取接口s3t2l2cachecport和第四纹素数据输出接口l1cache2s3tcexport。其中,第四纹素数据获取接口连接第二纹素数据输出接口,用于向二级缓存模块taul2cache获取第二纹素数据。第四纹素数据输出接口,连接第二纹素数据获取接口,用于向一级缓存模块taul1cache输出解压缩后的第二纹素数据。
进一步地,纹理贴图模块、一级缓存模块、解压缩模块和二级缓存模块分别在相应的时钟周期内(固定的时间内)执行相应的进程,这些进程并行且相互配合。
进一步地,一级缓存模块taul1cache还连接第一缓存清理接口clearl1cacheexport,第一缓存清理接口用于当纹理贴图模块tmu执行完一幅图像的纹理贴图后,执行另一幅图像的的纹理贴图时,清除一级缓存模块taul1cache中的所有数据。二级缓存模块taul2cache还连接第二缓存清理接口clearl2cacheexport,第二缓存清理接口用于当纹理贴图模块tmu执行完一幅图像的纹理贴图后,执行另一幅图像的的纹理贴图时,清除二级缓存模块中的所有数据。
在一级缓存模块taul1cache和二级缓存模块taul2cache上设置缓存清理接口,可以提高仿真模型的仿真速度,提高仿真效率。
本实施例的仿真模型可以使得软件算法、硬件体系结构、soc接口和系统级设计得到快速有效的建立,并可以对模型进行仿真、验证和优化,同时该模型在不同层次上建模,减小了开发人员的代码量和工作量,从而提高了仿真效率,提高了开发人员的工作效率。
实施例二
请参见图2,图2为本发明实施例提供的一种基于systemc的gpu纹理贴图周期精确联合仿真方法的流程示意图。该仿真方法包括步骤:
s1、根据纹理请求产生第一纹素数据地址。
s2、判断第一纹素数据地址是否命中。
s3、当判断第一纹素数据地址命中时,对由第一纹素数据地址获取得到的第一纹素数据进行纹理过滤。
s4、当判断第一纹素数据地址未命中时,则根据第一纹素数据地址产生第二纹素数据地址;并判断第二纹素数据地址是否命中;当判断第二纹素数据地址命中时,则输出第二纹素数据地址对应的第二纹素数据,将第二纹素数据进行解压缩,并将解压缩后的第二纹素数据更新为第一纹素数据,对第一数据进行纹理过滤。
s5、当判断第二纹素数据地址未命中时,根据第二纹素数据地址产生纹素数据存储地址;根据纹素数据存储地址获取第三纹素数据,并将第三纹素数据更新为第二纹素数据,将第二纹素数据进行解压缩,并将解压缩后的第二纹素数据更新为第一纹素数据,对第一数据进行纹理过滤。
上述步骤的具体执行过程请参见实施例一,本实施例不再赘述。
本实施例基于systemc的gpu纹理贴图周期精确联合仿真方法,可以使得软件算法、硬件体系结构、soc接口和系统级设计得到快速有效的建立,并可以对模型进行仿真、验证和优化,减小了开发人员的代码量和工作量,从而提高了仿真效率,提高了开发人员的工作效率。
实施例三
请参见图3,图3为本发明实施例提供的一种纹理贴图模块的结构示意图。该纹理贴图模块tmu包括任务队列模块usatotmufifo、纹理执行线程texture_processthread,其中,任务队列模块usatotmufifo用于接收、存储统一染色阵列(usa)发送的第一纹理请求,并且输出第二纹理请求;纹理执行线程texture_processthread用于根据从任务列队模块usatotmufifo获取的第二纹理请求获取纹理图像参数和第一纹素数据,对纹理图像参数和第一纹素数据进行计算得到纹理颜色数据,输出纹理颜色数据。
tmu还包括与外部模块连接的纹理请求获取接口tautousaport、纹理图像参数获取接口tautospmuport、纹素数据获取接口tmutol1cacheport、纹理颜色数据输出接口usatotauexport;其中,纹理请求获取接口tautousaport连接usa,用于向usa获取纹理请求;纹理图像参数获取接口tautospmuport连接存储有纹理图像参数的寄存器spmu,用于向寄存器获取纹理图像参数;纹素数据获取接口tmutol1cacheport连接一级缓存模块l1cache,用于向一级缓存模块获取第一纹素数据;纹理颜色数据输出接口usatotauport连接usa,用于向usa输出纹理颜色数据。
进一步地,任务队列模块usatotmufifo上连接先进队列接口sc_fifo_in_if和先出队列接口sc_fifo_out_if,先进队列接口sc_fifo_in_if用于顺序的写入第一纹理请求,先出队列接口sc_fifo_out_if用于顺序的输出第二纹理请求。
在一个具体实施例中,纹理贴图模块包括纹理请求获取模块、纹理图像参数获取模块、纹素地址计算模块、纹素数据获取模块、纹素数据处理模块、纹理颜色数据输出模块。其中,纹理请求获取模块用于获取纹理请求。纹理图像参数获取模块连接纹理请求获取模块,用于根据纹理请求获取纹理图像参数。纹素地址计算模块连接纹理图像参数获取模块,用于对纹理图像参数进行计算,得到第一纹素数据地址。纹素数据获取模块连接纹素地址计算模块,用于依据第一纹素地址获取第一纹素数据。纹素数据处理模块连接纹素数据获取模块,用于对第一纹素数据进行纹理过滤,即对第一纹素数据进行提取、格式转换、过滤/比较和归一化处理,得到纹理颜色数据。纹理颜色数据输出模块连接纹素数据处理模块,用于输出纹理颜色数据至统一染色阵列。
请参见图4,图4为本发明实施例提供的一种纹理贴图方法的流程示意图。该纹理贴图方法包括步骤:
s1、获取纹理请求;包括:
s11、获取第一纹理请求;
具体的,tau向usa获取第一纹理请求;其中,纹理请求中包含有纹素信息、纹理阵列id信息等。
s12、输出第二纹理请求;
具体的,首先要判断纹理执行模块是否开启:当tau接收到usa发送第一纹理请求后,判断tau是否开启;若tau没有开启,则将纹理颜色数据即rgba的值全部赋值为全0,并输出rgba为0的纹理颜色数据至usa;若tau已开启,则将第一纹理请求输送至usatotmufifo,usatotmufifo根据texture_processthread的获取第二纹理请求指令输出第二纹理请求至texture_processthread,纹理执行线程对第二纹理请求中纹素mask值进行判断,具体的,mask值为四位二进制数,若纹素mask值全为0,则跳出进程;若纹素mask值中有一个存在1,则进入步骤s2。
s2、根据纹理请求获取纹理图像参数。
s21、根据第二纹理请求获取第一纹理图像参数;
第二纹理请求中包含有纹理模块id信息,texture_processthread中的纹理图像参数获取模块根据纹理模块id信息来向储存有纹理图像参数的寄存器获取第一纹理图像参数。
s22、对第一纹理图像参数进行计算,得到mipmap贴图的level值;
第一纹理参数包括纹理图像的levelbase、levelmax、tpminfiltermode、tpmagfiltermode、levelbasewidth、levelbaseheight、levelbasedepth、minlod、maxlod、lodbiastexpara、texmaptype等参数,对这些参数进行计算的过程包括:计算纹理坐标差值、计算缩放因子scaler、计算lambda和选择过滤器类型,从而得到mipmap贴图的level值。
s23、根据level值获取level层中的第二纹理图像参数;
根据level值从寄存器中获取这一level层中第二纹理图像参数,具体的,第二纹理图像参数包括level层中所有的纹理图像的参数,包括param.colorrgba.red、param.colorrgba.green、param.colorrgba.blue、param.colorrgba.alpha、tpwraps、tpwrapt、tpwrapr、tpcomparemode、tpcomparefun、tpdepthmode、param.sizelevel[θ].width、param.sizelevel[θ].height、param.sizelevel[θ].depth、param.borderlevel[θ]、tpinternalformat[θ]等。
s3、在获取得到纹理图像参数后,令texfragmun=0开始进行计算,然后根据纹素mask[texfragmun]值对纹素进行处理;
以第一个纹素为例,第一个纹素texfragmun=0,若mask[0]值为0,则将rgba赋值为全0,并输出rgba全为0的纹理颜色数据至usa,同时进入texfragmun 计算;texfragmun 计算是指令texfragmun 1后进行计算,即第一次计算令texfragmun=0,当程序运行至texfragmun 时,令texfragmun=1进行第二次计算,当第二次计算程序运行至texfragmun 时,令texfragmun=2进行第三次计算,直至计算完成。在本发明实施例中,每次对四个纹素进行计算,texfragmun=0时计算第一个纹素,计算完毕输出第一个纹素的rgba值,同时令rtexfragmun=1,计算第二个纹素,第二个纹素计算完毕输出第二纹素的rgba值,同时令texfragmun=2计算第三个纹素,直至输出第四个纹素的rgba值同时令texfragmun=4停止对纹素的计算。
若mask[texfragmun]值为1,即若mask[0]值为1,则对第二纹理图像参数进行计算。
s4、对纹理图像参数进行计算,得到第一纹素数据地址;
每一个纹素在纹理中都有一个唯一的地址,这个地址可以被认为是一个三维空间中某个点的坐标值,可以用(x,y,z)来表示,这个地址可以通过归属图层中的第二纹理图像参数进行计算得到,本发明实施例对计算的方法不做限制,只要能得到第一纹素地址(x,y,z)的值即可。
s5、依据第一纹素数据地址获取第一纹素数据;
在得到第一纹素地址(x,y,z)的值后,即可根据(x,y,z)的值对l1cache进行寻址处理,从而获取得到对应地址的第一纹素数据。
s6、对第一纹素数据进行提取、格式转换、过滤/比较、归一化处理;
具体的,接收到第一纹素数据后,首先根据l1cache的存储格式,从所有的第一纹素数据提取出纹理格式中的r、g、b、a、lum、int和depth,然后将不同的内部格式转换为rgba格式的颜色数据,将这些rgba格式的颜色数据发送到纹理过滤/比较模块;纹理过滤/比较模块接收到rgba的颜色数据后,根据纹理的过滤模式,对rgba格式的颜色数据进行线性或者双线性或者三线性的插值计算,得到过滤后的纹素值,将过滤后的纹素值发送至纹素数据归一化模块;纹素数据归一化模块对接收到的纹素数据进行归一化处理,最终得到纹素的rgba值,输出rgba值至usa。
s7、进行texfragmun 计算;包括:
对四个纹素依次进行计算;
并判断texfragmun:当判断texfragmun=4时停止计算;当判断texfragmun≠4,则返回判断纹素mask[texfragmun]值,进行下一个纹素的计算。
s8、输出纹理颜色数据;
具体的,输出纹理颜色数据是指:当每计算完一个纹素,在进入texfragmun 计算的同时输出这个纹理颜色数据即rgba的值;在本发明实施例中,每次对四个像素进行处理,即一次处理过程需要输出四次纹理颜色数据,在texfragmun=4时,停止计算并同时输出第四个纹理颜色的数据。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
1.一种基于systemc的gpu纹理贴图周期精确联合仿真模型,其特征在于,包括:
纹理贴图模块,用于根据纹理请求产生第一纹素数据地址,根据所述第一纹素数据地址获取第一纹素数据,并对所述第一纹素数据进行纹理过滤,得到纹理颜色数据;
一级缓存模块,用于判断所述第一纹素数据地址是否命中,若是,则输出所述第一纹素数据;若否,则根据所述第一纹素数据地址产生第二纹素数据地址,并将由所述第二纹素数据地址获取得到的第二纹素数据更新为第一纹素数据;
二级缓存模块,用于判断所述第二纹素数据地址是否命中,若是,则输出所述第二纹素数据;若否,则根据所述第二纹素数据地址产生纹素数据存储地址,并将由所述纹素数据存储地址获取得到的第三纹素数据更新为第二纹素数据。
2.如权利要求1所述的基于systemc的gpu纹理贴图周期精确联合仿真模型,其特征在于,所述纹理贴图模块连接第一纹素数据获取接口,所述第一纹素数据获取接口用于根据所述第一纹素数据地址获取所述第一纹素数据。
3.如权利要求2所述的基于systemc的gpu纹理贴图周期精确联合仿真模型,其特征在于,所述一级缓存模块连接第一纹素数据输出接口和第二纹素数据获取接口,其中,所述第一纹素数据输出接口连接所述第一纹素数据获取接口,用于输出所述第一纹素数据;所述第二纹素数据获取接口用于根据所述第二纹素数据地址获取所述第二纹素数据;
4.如权利要求3所述的基于systemc的gpu纹理贴图周期精确联合仿真模型,其特征在于,所述二级缓存模块连接第二纹素数据输出接口和第三纹素数据获取接口,其中,所述第二纹素数据输出接口连接所述第二纹素数据获取接口,用于输出所述第二纹素数据;所述第三纹素数据获取接口用于根据所述纹素数据存储地址获取所述第三纹素数据。
5.如权利要求1所述的基于systemc的gpu纹理贴图周期精确联合仿真模型,其特征在于,
所述一级缓存模块还连接第一缓存清理接口,所述第一缓存清理接口用于清除所述一级缓存模块中的所有数据;
所述二级缓存模块还连接第二缓存清理接口,所述第二缓存清理接口用于清除所述二级缓存模块中的所有数据。
6.如权利要求1所述的基于systemc的gpu纹理贴图周期精确联合仿真模型,其特征在于,还包括:
解压缩模块,用于对所述第二纹素数据进行解压缩,得到解压缩后的第二纹素数据。
7.如权利要求6所述的基于systemc的gpu纹理贴图周期精确联合仿真模型,其特征在于,所述解压缩模块连接第四纹素数据获取接口和第四纹素数据输出接口,
所述第四纹素数据获取接口连接所述第二纹素数据输出接口,用于向所述二级缓存模块获取所述第二纹素数据;
所述第四纹素数据输出接口连接所述第二纹素数据获取接口,用于输出所述解压缩后的第二纹素数据。
8.如权利要求3所述的基于systemc的gpu纹理贴图周期精确联合仿真模型,其特征在于,所述纹理贴图模块、一级缓存模块、所述解压缩模块和二级缓存模块分别在相应的时钟周期内执行并行且相互配合的进程。
9.一种基于systemc的gpu纹理贴图周期精确联合仿真方法,其特征在于,包括步骤:
s1、根据纹理请求产生第一纹素数据地址;
s2、判断所述第一纹素数据地址是否命中;
s3、当判断所述第一纹素数据地址命中时,对由所述第一纹素数据地址获取得到的第一纹素数据进行纹理过滤;
s4、当判断所述第一纹素数据地址未命中时,则根据所述第一纹素数据地址产生第二纹素数据地址;并判断所述第二纹素数据地址是否命中;当判断所述第二纹素数据地址命中时,则输出所述第二纹素数据地址对应的第二纹素数据,并将所述第二纹素数据更新为第一纹素数据,对所述第一数据进行纹理过滤;
s5、当判断所述第二纹素数据地址未命中时,根据所述第二纹素数据地址产生纹素数据存储地址;根据所述纹素数据存储地址获取第三纹素数据,并将所述第三纹素数据更新为第二纹素数据,将所述第二纹素数据更新为所述第一纹素数据,对所述第一数据进行纹理过滤。
技术总结