??? 摘 要: 3D" title="3D">3D圖形硬件加速中,紋理映射屬于像素處理階段,透視校正中的紋理地址計算的特點是計算量大,且有實時性要求。本文設計了一個流水線脈動陣列" title="脈動陣列">脈動陣列結構來提高數據吞吐量。陣列的處理器單元(PE)為基于IEEE 754單精度" title="單精度">單精度的32位浮點乘累加器" title="累加器">累加器,同時計算紋理坐標的除法電路也為單精度。
??? 關鍵詞: 脈動陣列? 處理單元? 紋理映射? FPGA
?
??? 3D圖形處理芯片的性能比任何一種計算芯片的發(fā)展都要快,幾乎所有的PC系統(tǒng)都包括了3D圖形硬件加速技術,以實現(xiàn)游戲、CAD或可視化等應用。隨著移動電子產品市場的發(fā)展,諸如PDA、手機等產品已開始具有3D游戲等功能,使3D圖形的硬件加速應用領域更為廣泛。
??? 計算機圖形計算量都很大,人們尋求各種加速算法來提高運算速度。傳統(tǒng)的方法是用更快的處理器,并行算法或專用硬件。隨著數字技術的發(fā)展,尤其是可編程邏輯門陣列(FPGAs)的發(fā)展,提供了一種新的加速方法。最近的FGGAs在密度和性能上都有突破性的發(fā)展,加上可重復編程的特點,使得它在高性能、柔性應用平臺上非常有吸引力[1][2][7]。
??? 在圖形加速運算中,紋理貼圖屬于光柵化處理流水線進程,這一進程的主要特點是要處理大量的像素,數據吞吐量大。對實時處理系統(tǒng)來說,轉換速度是一個關鍵參數,為獲得轉換速度,流水線結構的選擇顯得很重要。
??? 脈動陣列在大吞吐量加速運算中是個很好的方案,對特定的重復計算工作,以數據并行結構方式,混合空間時間計算,流水線處理,局部通訊來獲得最大可能性能。有規(guī)則的脈動陣列結構可以縮短設計時間,對特定目的能得到最優(yōu)化結果,相對于普通的結構,可以獲得較好的開銷與性能比。
??? 本文設計了一個用于3D紋理映射中的透視校正紋理地址計算的高性能、全并行浮點數運算脈動陣列電路,包含32位單精度浮點乘累加器和除法器,并給出最終的實驗結果和性能分析。
1 透視校正紋理映射
1.1 紋理映射技術
??? 紋理映射是給計算機產生的3D圖形表面貼上各種紋理圖像,以提高圖形的真實感。
??? 在各種紋理映射方法中,一個主要的運算就是找出屏幕空間像素(x,y,z)在紋理空間所對應的紋理元素所在存儲空間的地址(Row,Col),然后將所選中的紋理元素顏色進行濾波,并用這個值替換屏幕空間的像素顏色值,從而完成紋理映射。這個過程通常稱為兩步紋理映射方法。也就是說,先將屏幕空間的像素坐標轉換到參數空間(U,V),再由參數空間轉換到紋理圖像空間。圖1就是一個給墻壁貼磚紋理的過程。
????????????????
1.2 紋理映射單元的矩陣運算
??? 本文只考慮由屏幕空間到紋理空間的轉換,它是一個全浮點運算,參數空間到紋理空間的轉換則是兩個定點乘運算。
??? 最典型的紋理映射是透視映射,映射函數一般用式(1)表示[1]:
???
??? 式(1)中:(x,y)為二維屏幕像素坐標;(U,V)為二維紋理參數空間的坐標,一般也稱為紋理地址;A~I為轉換系數,對于透視映射,I值為1。
??? 這種運算通常是用像素矩陣與轉換矩陣相乘來計算紋理元素地址的。矩陣形式表示為式(2),式(3)為坐標轉換。
???
??? 式(2)中:(x,y,z)和(u,v,w)分別為屏幕像素地址和紋理空間地址的齊次坐標,透視映射時,z值為1。矩陣M為3×3轉換矩陣,矩陣元素mij分別對應參數A~I。各紋理地址的計算事實上是一個(A×B+C)的乘累加計算。
??? 紋理地址的計算是一個連續(xù)增量掃描屏幕空間像素的過程。設像素坐標為(xi,yi,zi),對應的紋理坐標則為(ui,vi,wi)。
2 矩陣運算的陣列結構
??? 對于光柵化處理流水線進程,為獲得大的數據吞吐量和滿足實時處理要求的轉換速度,基于流水線結構的矩陣電路是一種極好的選擇。
2.1 陣列結構
??? 正交脈動陣列能很好地完成正方形矩陣乘操作。一個M×N的矩陣A=[Aij](1ij]( 1ij]為M×P矩陣,用循環(huán)式表示為[2]:
???
??? 如果矩陣的維數為n,需要n2個微處理器單元(PE)。對于紋理地址計算,相乘矩陣的維數分別是3×3和3×1,所以矩陣陣列為3×3,共9個PE單元,如圖2。處理器單元PEij是單精度浮點乘累加器,完成矩陣元素乘及與前一級輸出的累加。圖2中(xi,yi,zi)的輸入方式,事實上是通過FIFO堆棧,對應周期依序輸入(x1,0,0),(x2,y1,0),(x3,y2,z1)……。
???????????????
??? 3×3陣列完成齊次坐標(u,v,w)計算后,還要再完成笛卡爾坐標轉換(U,V)=(u/w,v/w),所以最后還要兩個單精度的浮點除法器(Div)。
2.2 PE單元[2]
??? PE單元的結構圖如圖3所示,主要單元是由兩個IEEE754 32位單精度浮點乘法器" title="乘法器">乘法器和累加器組成,乘法器完成A×B運算,再由累加完成A×B+C運算。用一個寄存器來控制各PE單元之間數據傳輸節(jié)奏。寄存器的數據是在Enable信號有效時輸出,以保證流水線的節(jié)奏。Enable信號的產生是通過對時鐘信號進行計數得到的。這里乘法器和加法器同樣采用流水線結構,乘法器一個周期,累加器兩個周期,所以Enable信號在三個周期結束后發(fā)出有效信號,PE運算結果輸出到下一級PE單元Cin。
????????????????????
??? 在圖2的陣列結構中,PE單元的Ain、Bin和Cin分別與x(或y、z)、m及c對應。圖4所示為PE單元的仿真波形。結果顯示,每個PE單元輸出結果要三個周期。表1為測試輸入輸出數據,便于比較。
?????????????????????
3 結果及分析
??? 整個電路用VHDL設計,設計仿真平臺為Xilinx的ISE 7.1i,使用VitrtexE xcv1000efg900-8器件,綜合工具用XST。數據采用IEEE 754的32位單精度浮點數標準。
3.1 性能分析
??? 表2為電路綜合后所耗資源,各單元的頻率綜合結果見表3,乘累加模塊的頻率最低,為41.145MHz,共有9個PE單元,則可以達到740.61MFlop/s及82.29MPixels/s數據吞吐量。脈動陣列每一行數據從輸入到輸出共需12個周期。如果一個屏幕分辨率為1280×720,每秒刷新60幀[6],則所需的運算速度僅為55.296MPixels/s,因此最終的設計在速度上滿足實時性的要求。
??????????????????????
3.2 仿真結果
??? 圖5為整個電路的仿真結果,輸入輸出數據以32位浮點格式表示,mij為轉換矩陣的元素,x、y、z為像素坐標,U、V為紋理坐標。從表3及圖5可以看出,每個PE單元需3個周期,每陣列行為3個PE單元,加上除法器3個周期,這樣整個流水線共需12個周期完成。輸入的驗證矩陣為式(5),輸出結果U=0.0471,V=0.0391。
????????????
???? 本文設計了基于IEEE 754單精度32位浮點數運算的脈動陣列,用于3D圖形硬件加速中的紋理透視校正的紋理地址計算,最后給出了FPGA的硬件實現(xiàn)方案。仿真綜合的結果表明電路可以在41.145MHz頻率下運行,達到740.61MFlop/s及82.29MPixel/s數據吞吐量,流水線輸入輸出共12個周期。
參考文獻
[1] Tomas Akenine-Moller著,普建濤譯.實時計算機圖形學(第二版)[M].北京:北京大學出版社,2004.
[2] GEORGE M,PAPADOURAKIS,GEORGE N.B.The design?of a systolic architecture to implement graphic transformations[J],CompEuro′91.′Advanced Computer Technology,Reliable Systems and Applications′.5th Annual Europe?Computer Conference. Proceedings.13-16 1991(5).
[3] John P.Uyemurq著,周潤德譯.超大規(guī)模集成電路與系統(tǒng)導論[M].北京:電子工業(yè)出版社,2004.
[4] 吳金,應征.高速浮點乘法器設計[J].電路與系統(tǒng)學報,2005,10(6).
[5] SEIDEL P M,EVEN G,Delay-Optimized Implementation of IEEE Floating-Point Addition[J].IEEE Transactions on?Computers,2004,53(2).
[6] Fadi Chehim,Paul Coulton,Reuben Edwards,Evolution of?3D games on mobile phones[J].Proceedings of the international conference on mobile business(ICMB′05),2005(6),11-13.