簡介
在多元化套用需求的推動下,半導體
製造工藝水平飛速發展,計算機系統的功能和性能極大地豐富和提高。圖形處理器( 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中不可或缺的關鍵模組,具有重要的研究價值和實用意義。
清除和累積操作單元
本模組處理的命令可分為配置信息命令、堆疊操作命令、清除緩衝區命令、累積緩衝區命令、片段數據和非本單元使用的命令6 種。所以將本模組劃分成6個部分來實現,如 “CAC 模組”所示。命令解析部分負責命令的初步解析和分派,配置信息部分負責配置信息命令的解析和保存,堆疊操作部分負責堆疊操作命令的解析和參數的存取,清除部分負責清除緩衝區命令的解析和清除處理,累積部分負責累積緩衝區命令的解析和累積操作,讀數據部分負責本模組和後續模組所需目標信息的讀取,傳送部分負責傳送處理好的數據和非本單元處理的命令。
配置信息命令由命令解析電路傳送到配置信息部分,配置信息電路對相應的參數解析並將信息保存到配置暫存器中供其他操作使用; 堆疊操作命令由命令解析電路傳送到堆疊操作部分,堆疊操作電路接收到堆疊操作命令後,會進行配置信息的保存( 壓棧) 或讀取( 出棧);清除操作命令由命令解析電路傳送到清除部分,由清除操作電路產生寫緩衝區的坐標地址和數據,並將數據傳送出去;累積操作命令由命令解析電路傳送到累積操作部分,由累積操作電路產生新的坐標地址和數據,並將數據傳送出去;當命令解析部分接收到片段數據時,若後續模組的處理需要目標片段值,則傳送到讀數據部分讀取目標片段,否則將命令直接傳送;不是本單元所需的命令將其直接傳送出去。以上所有的數據和命令最終都由傳送部分傳送到下一級流水線單元。
片段測試單元
本單元將接收到的命令分流成兩部分,一部分進行配置信息相關的操作,另一部分進行測試處理。這兩部分數據最終都將會以命令的形式傳送出去。另外,在參數配置的過程中會出現對配置信息的堆疊操作。將片段測試的處理劃分為輸入選擇、配置參數、片上存儲、測試處理和輸出控制5個功能模組。
輸入選擇模組負責對收到命令的初步解碼,把命令分流成兩路,一路進行片段測試處理,另一路進行參數配置。同時,為了確保命令的順序執行,若且唯若後續各模組都空閒時本模組才會接收新的命令。
配置參數模組會對接收到的命令進行進一步的解析,進行兩方面的處理。一方面提取命令中攜帶的配置信息保存到配置參數暫存器中; 另一方面當接收到壓棧命令時,將相應配置參數暫存器中的配置信息存儲到片上存儲中,當接收到出棧命令時,讀取片上存儲中的數據,更新配置參數暫存器。
測試處理模組會根據配置參數設定的處理環境對輸入的圖形片段進行測試,並將測試結果與輸入信息同時傳送到輸出控制模組。本模組會對片段進行裁剪測試、alpha 測試、深度測試和模板測試,另外在使用模板測試時,會根據模板測試和深度測試的結果更新模板緩衝區中對應位置的模板值。
經過分流處理的兩路命令在輸出控制模組選擇輸出。配置參數模組的輸出數據是後級流水線需要的配置信息時會直接輸出;測試處理模組的輸出將根據測試結果選擇性地輸出:若圖形片段的所有測試均通過,則將輸入圖形片段的命令輸出;若模板測試開啟,除深度/模板測試外的其他測試均通過,則不管是否通過深度/模板測試,結果都將輸入數據輸出,並標記為只寫模板值,此時的深度和顏色數據不會寫入幀快取中;若模板測試沒有開啟,則只要有一項測試失敗,輸入數據都不會傳送到下一級流水線單元。
混合和邏輯操作單元
本模組中的混合操作是對源片段的顏色和目標片段的顏色進行算數運算得到最終顏色。首先需要運用乘法運算採用混合因子對顏色成分進行縮放,然後再將源成分和目標成分進行混合。為了提高電路的處理速度,將乘法運算和混合分步處理,採用流水的方式實現,首先進行乘法運算(混合1) ,然後進行混合運算(混合2) 。由於邏輯操作和禁止緩衝區的實現均是一些邏輯運算,可以採用組合電路實現,在數據輸出控制部分完成。據此,將BDLM單元的設計畫分為5個單獨的模組,分別是命令解析模組、RAM模組、混合1模組、混合2模組和輸出控制模組。其中混合1模組和混合2模組分步實現混合操作的功能。各模組之間的連線關係和本單元總體結構“BDLM模組”。
命令解析模組提取並保存命令中的配置信息,並在接收到堆疊操作命令時對配置信息進行保存和更新。當接收到需要處理的片段信息時,將配置信息和片段信息同時傳送到相應的處理電路。
圖形片段數據依次經過混合1和混合2電路的處理完成混合操作。首先完成混合操作中的乘法運算,根據混合方式將源片段和目標像素分別乘以對應的混合因子,得出新的顏色值。然後根據混合方式將新的源片段和目標像素的顏色值進行加、減、取最大值或最小值,得到新的源片段值。混合操作後新生成的片段值在輸出控制模組完成邏輯操作和禁止處理。
至此,所有的數據處理完畢,生成的像素、深度和模板值即為最終要寫入幀快取的數據。片段處理單元寫入幀快取的數據寬度是128b,而處理產生的數據寬度是32b,所以對幀快取的一次寫操作能夠裝載4個數據。為了減少幀快取的訪問次數,增大頻寬利用率,在片段處理單元快取4個數據後再寫入幀快取,由“輸出控制”模組根據坐標連續的原則,將屬於同一地址的數據以4個為一組進行數據的合併輸出。
虛擬仿真與原型驗證
一方面,構建了虛擬仿真平台,並採用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) ,禁止紅色成分。則經過平滑著色產生的帶有紅綠藍成分的三角形經過禁止操作後只有綠色和藍色成分被顯示。