文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)02-0051-04
0 引言
計(jì)算機(jī)處理圖形信息時(shí),會(huì)遇到存儲(chǔ)的圖形較大,而屏幕只能顯示部分圖形的情況。比如把整幅地圖顯示在屏幕上,由于不能看到局部的細(xì)節(jié),使用縮放技術(shù)便可以把地圖中的局部區(qū)域放大顯示[1]。在放大指定區(qū)域時(shí),必須確定圖形中哪些部分落在范圍之內(nèi),哪些部分落在顯示范圍之外,以便顯示落在顯示范圍內(nèi)的圖形。裁剪的目的正是判斷某個(gè)圖形元素是否落在窗口之內(nèi),如落在窗口之內(nèi)則進(jìn)一步求得位于窗口內(nèi)的部分。
平面剪裁是OpenGL經(jīng)典的圖形流水線的重要部件之一,也是最為復(fù)雜的部件之一。高性能的圖形處理必須通過(guò)高性能的硬件加速器來(lái)實(shí)現(xiàn)平面剪裁功能,本裁剪器最多支持6個(gè)裁剪面,客戶指定裁剪平面對(duì)世界空間中的物體進(jìn)行裁剪,將圖元在給定平面外的部分裁剪掉,保留面內(nèi)的部分,以實(shí)現(xiàn)特殊效果。比如,在三維視圖中標(biāo)示可見(jiàn)面[2]、對(duì)部分圖形進(jìn)行復(fù)制、移動(dòng)或刪除操作防止圖形邊界混淆、從特定場(chǎng)景中抽取指定部分等。它在計(jì)算機(jī)圖形處理中具有重要的意義。
1 可編程裁剪器硬件設(shè)計(jì)
作為3D圖形加速器的重要組成部分,平面剪裁在計(jì)算機(jī)圖形處理中具有十分重要的意義。本剪裁器由命令解析(CMD Unit)模塊、控制電路(Ctrl Unit)模塊、裝配電路(Assemb Unit)模塊及微控制器(MCU)模塊構(gòu)成,總體結(jié)構(gòu)如圖1所示。可編程設(shè)計(jì)體現(xiàn)在用底層匯編在微控制器上運(yùn)行,已完成平面裁剪功能,其余的3個(gè)模塊為外圍電路,對(duì)微控制器完成圖元裁剪起輔助加速作用,以便高效實(shí)時(shí)地完成裁剪功能。MCU采用自主研發(fā)的支持90位雙發(fā)射指令、4級(jí)流水線RSIC結(jié)構(gòu),含有4片獨(dú)立的32×256RAM數(shù)據(jù)存儲(chǔ)(BANK)單元,完成并行存儲(chǔ)的功能,即一個(gè)時(shí)鐘沿可對(duì)4塊存儲(chǔ)體進(jìn)行讀或?qū)?,尋址范圍?k,應(yīng)用于裁剪過(guò)程中所用數(shù)據(jù)的讀寫(xiě)。本微控制器可直接在BANK中進(jìn)行數(shù)據(jù)讀寫(xiě)操作,避免了通過(guò)寄存器來(lái)對(duì)BANK讀寫(xiě),大大減少的讀寫(xiě)數(shù)據(jù)周期,提高了運(yùn)算效率。
各模塊功能如下:
(1)CMD Unit:接受GPU內(nèi)部管線上一級(jí)傳來(lái)的GPU內(nèi)部148位命令,如果是與平面裁剪無(wú)關(guān)的命令,則不做任何處理,將其透?jìng)鹘o下一級(jí),如果與平面裁剪有關(guān),則對(duì)命令進(jìn)行解析,將矩陣和圖元信息、參數(shù)個(gè)數(shù)及屬性個(gè)數(shù)等信息存入微控制器中的數(shù)據(jù)BANK中。
(2)Ctrl Unit:利用數(shù)字電路設(shè)計(jì)常用的有限狀態(tài)機(jī)(Finite State Machine,F(xiàn)SM)原理控制命令解析、命令裝配模塊和微控制器間的通信,并采用雙軌握手協(xié)議完成GPU內(nèi)部管線上下級(jí)間的信號(hào)交互,圖2為其狀態(tài)轉(zhuǎn)移圖。
(3)MCU:本RISC處理器具有超長(zhǎng)指令字(VLIW)結(jié)構(gòu),由指令讀取、指令解碼、執(zhí)行和前饋4級(jí)流水線等組成。超長(zhǎng)指令字的寬度為兩條RISC指令,即能夠同時(shí)解析兩條RISC指令,并將譯碼的結(jié)果發(fā)送到相應(yīng)的兩條處理流水線中。將平面裁剪匯編指令固化到指令ROM,并通過(guò)數(shù)據(jù)存儲(chǔ)、取指單元、譯碼單元、地址流水線單元、整數(shù)和浮點(diǎn)數(shù)運(yùn)算流水線等11個(gè)模塊實(shí)現(xiàn)可編程裁剪的功能。MCU結(jié)構(gòu)如圖3。
(4)Assemb Unit:該模塊讀出在MCU完成平面裁剪后存儲(chǔ)在微控單元BANK中的圖元信息,并對(duì)裁剪后新的頂點(diǎn)重新裝配為148位GPU內(nèi)部命令,發(fā)送到管線的下一級(jí)。
2可編程裁剪器算法和軟件設(shè)計(jì)
2.1 平面裁剪算法
與三維剪裁不同,平面裁剪通過(guò)圖元在給定的任意平面內(nèi)外進(jìn)行判別,對(duì)每個(gè)點(diǎn)只要它的視覺(jué)坐標(biāo)(x,y,z,w)滿足(A,B,C,D)M-1(x,y,z,w)T≥0就于此平面內(nèi)側(cè),否則都將被裁剪掉。其中,(A,B,C,D)為平面系數(shù),M是在調(diào)用裁剪平面時(shí)當(dāng)前的模型視圖矩陣。
平面裁剪采用經(jīng)典的Sutherland-Hodgman[3]多邊形裁剪算法,利用給定的平面與世界坐標(biāo)系下的圖元間的位置關(guān)系,計(jì)算直線與平面的交點(diǎn),并結(jié)合線性插值計(jì)算交點(diǎn)的屬性傳至流水線下一級(jí),完成對(duì)圖元的剪裁。
當(dāng)定義的一個(gè)裁剪面依次裁剪多邊形的每一條邊后,組成新的多邊形,再經(jīng)下一個(gè)裁剪面處理,步驟相同。在所有裁剪面完成后,將保留的多邊形信息存儲(chǔ)在MCU的BANK中,最后重新裝配成圖元發(fā)送給管線的下一級(jí)。下面是一段基于SH裁剪算法的偽代碼。
If(the specified plane is enable) {
SutherlandHodgman(clipped primitive);
for(i=0;i<outlength;i++) {
InVertex[i] = outVertex[i];
outVertex[i].x = 0;
outVertex[i].y = 0;
outVertex[i].z = 0;
}
inlength = outlength;
}
2.2 平面裁剪軟件設(shè)計(jì)
在計(jì)算機(jī)圖形學(xué)中,基本圖元只有點(diǎn)、線和三角形,其他任何復(fù)雜圖元均由這3種圖元構(gòu)成,平面裁剪就是采用SH算法對(duì)這3種基本圖元進(jìn)行裁剪,丟棄位于裁剪面之外的圖元信息,采用線性插值的算法,算出位于裁剪面內(nèi)的圖元信息,并將其發(fā)給GPU管線下一級(jí)。平面裁剪軟件設(shè)計(jì)流程如圖4。
3 功能仿真驗(yàn)證與原型開(kāi)發(fā)
采用SystemVerilog編寫(xiě)頂層測(cè)試文件,搭建相應(yīng)的平面裁剪軟硬件協(xié)同驗(yàn)證平臺(tái)[4],仿真使用Mentor公司的QuestaSim 6.5(Linux環(huán)境)工具,綜合使用Xilinx公司的ISE14.2工具,并選用Dini Group最新的DNV6_F2PCIE開(kāi)發(fā)板進(jìn)行原型開(kāi)發(fā)。
3.1 功能仿真驗(yàn)證
該平臺(tái)采用軟件自動(dòng)比較的方法進(jìn)行自動(dòng)化驗(yàn)證[5]。每一個(gè)測(cè)試點(diǎn)同時(shí)在Visual Studio 2008環(huán)境、SystemVerilog模型和HDL描述的硬件系統(tǒng)中運(yùn)行,比較繪制結(jié)果,將模型和硬件系統(tǒng)作模塊級(jí)輸出比較,以確保所有功能的仿真是正確的。
根據(jù)測(cè)試點(diǎn)編寫(xiě)的點(diǎn)、線和三角形的激勵(lì),產(chǎn)生待測(cè)數(shù)據(jù)。將預(yù)先得到的參考結(jié)果存入FIFO中用于驗(yàn)證模型的正確性。經(jīng)過(guò)待測(cè)模型(DUV)進(jìn)行相應(yīng)的處理后生成輸出響應(yīng),與參考結(jié)果中的值進(jìn)行比較,如果兩者的值相同,表示功能正確;否則標(biāo)識(shí)錯(cuò)誤位置,及時(shí)修改錯(cuò)誤點(diǎn),加速了硬件開(kāi)發(fā)。圖5所示為該平臺(tái)的架構(gòu)。
經(jīng)過(guò)自動(dòng)對(duì)比,硬件結(jié)果與仿真模型的誤差在可控范圍之內(nèi),基本完成功能驗(yàn)證。
3.2 原型開(kāi)發(fā)
基于上述設(shè)計(jì)方案,根據(jù)電路規(guī)模和性能要求,選擇Xilinx公司的XC6VLX550T進(jìn)行原型開(kāi)發(fā)。選用Xilinx公司提供的綜合工具[6]ISE14.2,單獨(dú)綜合平面裁剪模塊頻率為232.504 MHz,所占Slice為14%。采用DNV6_F2PCIE FPGA開(kāi)發(fā)板進(jìn)行功能驗(yàn)證,啟動(dòng)6個(gè)裁剪面對(duì)世界空間中的物體進(jìn)行裁剪前后如圖6所示。
由圖6可以看出,本裁剪器能完成基于OpenGL 1.3標(biāo)準(zhǔn)的裁剪功能,能夠高效、實(shí)時(shí)地將圖元在給定平面外的部分裁剪掉,保留面內(nèi)的部分,以實(shí)現(xiàn)特殊效果。
4 結(jié)論
本文對(duì)可編程裁剪器的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行深入分析,完成可編程平面裁剪器的設(shè)計(jì)與實(shí)現(xiàn)。通過(guò)采用SystemVerilog搭建相應(yīng)的軟硬件協(xié)同仿真驗(yàn)證平臺(tái),完成了模型和HDL描述的硬件自動(dòng)化驗(yàn)證,加速了軟硬件開(kāi)發(fā)過(guò)程,并最終在FPGA上完成原型開(kāi)發(fā)與功能驗(yàn)證。從中得出了以下結(jié)論:
(1)計(jì)算機(jī)和信息技術(shù)的快速發(fā)展使人們對(duì)微處理器的性能要求越來(lái)越高??删幊烫幚砥骶哂懈叨鹊撵`活性和成熟性,而性能也可能接近ASIC。本文所設(shè)計(jì)的裁剪器充分利用了處理器的靈活性,并采用底層匯編實(shí)現(xiàn)了裁剪功能,完成了實(shí)時(shí)高效裁剪圖形的目的。
(2)為提高處理數(shù)據(jù)效率,處理器還采用前饋機(jī)制,將執(zhí)行后的數(shù)據(jù)和地址返回給解碼控制端。除執(zhí)行本地指令流外,流水線還可執(zhí)行MIMD數(shù)據(jù)流。MIMD被普遍引用于當(dāng)前CPU中,本裁剪器的核心模塊微控制器就采用了MIMD的方式,提升了數(shù)據(jù)吞吐量。
(3)為了加速裁剪過(guò)程,給處理器配套外圍電路,完成命令解析,狀態(tài)控制和命令裝配。
(4)使用匯編語(yǔ)言描實(shí)現(xiàn)可編程剪裁器的圖元裁剪部分,同樣可以用匯編程序代替前后端接收(譯碼)和發(fā)送(裝配)電路,完成基于該處理器的通用剪裁器的設(shè)計(jì)工作,使其靈活性大大增強(qiáng)。
參考文獻(xiàn)
[1] 王浩鵬.二維圖形的裁剪算法研究與改進(jìn)[D].西安:西安電子科技大學(xué),2011.
[2] 孫楊.計(jì)算機(jī)輔助隱形牙齒正畸功能實(shí)現(xiàn)[D].杭州:浙江大學(xué),2010.
[3] SULAND I E,HODGMAN G W.Reentrant polygon clipping[J].Communication of ACM,1974,17(1):32-42.
[4] 山蕊.基于System Verilog的可重用驗(yàn)證平臺(tái)[J].電子技術(shù)應(yīng)用,2013(5):38-40.
[5] 陳永光.RTL層次之系統(tǒng)互連線及系統(tǒng)電路的軟件自動(dòng)化驗(yàn)證方法研究[D].成都:電子科技大學(xué),2012.
[6] 田耕,許文波.Xilinx ISE design suite 10.x FPGA 開(kāi)發(fā)指南[M].北京:人民郵電出版社,2008.