采用Spartan-6 FPGA加速紋理映射:這種要求嚴苛的圖形流程曾經是定制ASIC內核的應用,而如今卻成為低成本FPGA的天下。
作為一種以 FPGA 為構建基礎,而非采用專業多媒體片上系統的手持設備,Milkymist One 無須計算機的輔助即能為聚會和音樂會提供視頻特效。在 Milkymist One 中,Spartan-6 FPGA 基本可實現系統的整個數字化部分。另外,FPGA 的強大功能還足以處理紋理映射,這種高端圖形功能代表了系統必須執行的最密集的數據處理任務。在傳統上,紋理映射屬于 ASIC 圖形處理單元的領地,而在更早以前則是高端工作站的屬地。
新應用領域的出色表現
無論是音樂節目主持人、綜藝節目主持人還是其他活動的組織者都能在音樂會、節日以及俱樂部中使用Milymist One(見圖1)營造出具有極強娛樂性的視頻效果。將攝像頭與視頻投影儀連接在一起,按下電源按鈕,數秒鐘后拍攝的一切就變成栩栩如生、似幻似真的光色效果。將攝像頭聚焦于舞臺上的舞者,指向參加聚會的人群乃至玩具或其他對象,讓觀眾為這種特效營造的效果如癡如醉。如果沒有攝像系統的加入,Milymist One可以單純地根據環境聲響生成效果,特別適用于希望能以交鑰匙解決方案實現簡單視覺效果的樂隊、俱樂部和聚會組織者。
該器件可支持來自多個源頭的輸入:MIDI鍵盤、USB計算機鍵盤、DMX桌面以及OpenSoundControl (OSC)客戶端。用戶甚至能夠使用智能手機與視覺效果無線地互動,只需要將一個WiFi路由器連接至以太網端口即可。另一個選擇是使用廣受青睞的 Arduino 電路板,利用其大量的傳感器界面來通過MIDI對Milymist One進行控制。
我們必須克服設計這種器件的重大挑戰。我們的處理算法要求將相當數量的計算功能和存儲器帶寬用于處理高幀率和低時延的視頻。另外,器件還必須與多種I/O協議實現接口相連。就本應用而言,包含CPU和圖形加速功能的多媒體片上系統是許多工程師的首選。然后,他們會選用一些外部芯片來處理所有的接口。通過充分發揮賽靈思器件的功能和靈活性,我們能夠在單個Spartan-6 FPGA中實現我們系統幾乎全部的數字部分,從而既可以降低成本、精減芯片數量,又能夠顯著提升靈活性。
Milymist One的硬件
Milkymist One系統電路板的核心是一塊賽靈思XC6SLX45(見圖2)。該FPGA包含我們系統的所有數字邏輯,如軟核CPU、存儲器控制器、硬件加速器以及I/O外設等。
通過使用Spartan-6的“主BPI”模式,FPGA 可從NOR閃存芯片中讀取配置數據。該閃存芯片隨后使用“現場執行 (execute-in-place)”方案運行引導載入程序,即一邊從NOR閃存獲取處理器指令,一邊對其進行執行。引導載入程序隨后激活 SDRAM,并加載應用軟件。該閃存芯片還負責存儲這類應用軟件,并保留使用YAFFS2的用戶數據。YAFFS2 是一種可提供損耗均衡和日志功能的閃存優化型文件系統。
我們的應用軟件能夠從互聯網下載 FPGA 數據流更新,并將它們寫入閃存中。拜Spartan-6 FPGA所具有的多重載入 (MultiBoot)特性所賜,如果某個失效的更新會導致錯誤的數據流,則系統能夠進行失效保護。
與FPGA直接連接的一對DDR SDRAM芯片可提供128MB的系統存儲器。為有助于滿足該接口嚴格的時序要求,Spartan-6 FPGA可為其提供雙數據速率I/O寄存器、運行時間可編程延遲鎖相環(帶DCM)以及I/O延遲元件。
我們的器件可支持兩個全速的USB主機端口。FPGA在此處再一次負責提供大部分硬件。Spartan 6可直接驅動模擬收發器芯片,以便輕松將LVCMOS 3.3V電平轉換為能夠完美符合USB標準的信號。串行接口引擎和主控制器邏輯采用FPGA架構實現。在原型設計階段,甚至能夠僅使用電阻和USB連接器與賽靈思ML401開發板的I/O擴展連接器相連,就能成功地將USB器件直接與FPGA相連。
在視頻輸出方面,FPGA可驅動一個3通道數模轉換器,以生成VGA端口的RGB分量。Spartan-6中包含的DCM CLKGEN原語具有高度的靈活性,能夠針對像素時鐘將多種不同頻率進行綜合,從而使器件能夠支持大量的視頻模式。
此外,如何對由VGA端口輸出的復合視頻信號(CVBS)進行綜合也在研究中。市面上已經有一些計算機圖形卡,能夠使用低成本的無源適配器將CVBC器件與VGA輸出相連接。不過,在一套采用FPGA的系統上生成原色分量也是完全可行的。我們僅需要使用數字信號處理技術實現CVBS信號發生器,然后將生成的數據送給VGA數模轉換器即可。這樣,我們的器件就能輕松地與音樂以及現場表演場地仍然大量使用的傳統視頻投影儀和視頻混合控制臺相連接。
我們的設計可將Spartan 6與一對RS485收發器相連接,為DMX512提供支持。該協議可用于進行舞臺上的燈光控制,能夠讓器件將周邊的燈光與可視效果進行同步。在此,整個DMX512信號發送系統也是采用FPGA來實現的,而外部組件基本都是模擬組件。
此外,為了能與常用的控制器和傳感器進行交互,我們的系統還支持MIDI。我們的設計實現與DMX512類似,只有模擬外部組件。我們還支持以太網(僅使用一顆PHY芯片)、音頻(通過通用的AC97編解碼器)以及PAL、SECAM和NTSC擊JJ式視頻輸入。
這些外設大多數都能從FPGA獲取時鐘,而FPGA則使用其數字時鐘管理器(DCM)從統一的50MHz時鐘源將必要的頻率進行綜合。我們的電路板上只有兩個額外的晶振,而且為進一步減少成本,正在考慮在將來的PCB版本中使用更多FPGA生成的時鐘將其更換。
何謂紋理映射?
在所有Milkymist器件的FPGA必須執行的數據處理任務中,紋理映射是密集程度最高的。紋理映射是OpenGL及DirectX等已加速3D API的一種通用計算機圖形運算,通常用于在屏幕上繪制帶紋理的3D多邊形。此外,其還能扭曲圖像(見圖3),而且我們也常將其用于此目的。
通用的圖形處理單元在三角形上執行紋理映射,并且將更加復雜的多邊形分解為一系列的三角形。輸入到算法中的是待填充的三角形3個頂點的2D位置(也可能是原始3D坐標的投影),以及這3個頂點的2D紋理坐標。之后,該算法再逐像素繪制有紋理的三角形,方法是為每個像素線性地內插紋理坐標,然后復制這些坐標處的紋理像素(也稱為紋理元素)。
通過簡單地改變各頂點的位置或者每個頂點的紋理坐標的位置,紋理映射能夠實現縮放、旋轉或者比例尺變化等圖像處理運算。但常見的問題是線性內插的結果并非整數,這就意味著應該在四個相鄰的像素(見圖4)中對紋理進行采樣。在這種情況下,為了實現更理想的渲染,應讀取四個像素,并將其色彩值進行平均(根據比例取不同的權重),這個流程被稱為雙線性濾波。我們的應用需要雙線性濾波來實現理想的可視結果。
紋理映射,是一個計算強度大以及所需存儲器非常密集的進程,這從性能的角度即決定了軟件實現的不可行,在需要雙線性濾波的時候尤為如此。
FPGA實現
預計用于讀取幀緩沖器的存儲器延遲將成為性能制約因素。我們沒有采用高級預獲取技術等復雜且資源密集的技術來降低存儲延遲,而是簡單地采用直接映射的像素元素高速緩存,不僅簡單而且還能快速命中。另外,在設計紋理映射單元其余部分的時候,還需要注意讓存儲器讀取延遲成為唯一的制約因素。
采用這種高速緩存可實現高達90%的命中率,以每個周期命中一次,每9個周期失的一次計算,存儲器的平均存取時間為1.8個周期。采用80MHz的系統時鐘,則此類高速緩存的每秒吞吐能力為44M像素,足以滿足我們的應用所需。
為確保存儲器存取時間是唯一的制約因素,我們在設計系統其余部分時,使之能夠支持每個時鐘周期大約一個輸出像素的處理能力。與之相對應,算法的實現以占用空間為主(硬件組件很少或者根本沒有基于時間的資源共享),但不要求復制資源密集的大型硬件單元。以空間為主的實現所用面積比時間共享的大,但更簡單明了,需要的多路復用器數量越少,也能夠更好地避免走線擁塞,從而更加簡便地實現FPGA的時序收斂。為此,我們為紋理映射算法選擇了深度流水線實現。
流水線的頭幾級用于從存儲器中獲取低帶寬的頂點信息,然后使用某種Bresenham算法的變體計算內插紋理坐標與目標坐標。我們通過采用行為Verilog HDL來實現這些級,隨后使用免費的XST綜合器(1SE WebPACK設計套件的組成部分)進行處理以生成經優化的網表。地址生成器能夠充分利用Spartan—6 FPGA的DSP48A1 Slice提供的硬件乘法器,高效率地計算與內插坐標對應的紋理幀緩沖器中的存儲器地址。XST綜合器能夠根據HDL源代碼中乘法運算符自動推導硬件乘法器,從而使其使用方法既簡單又方便。
若要從存儲器中獲取紋理元素數據,則會變得更加復雜。在每個時鐘周期,我們都需要從高速緩存中獲取4個不同的像素。準備4個不同的高速緩存沒有必要,因為雙線性濾波器的不同通道通常使用來自同一高速緩存線路的數據。因此我們需要一個4端口SRAM,但這看似在FPGA中比較困難。
幸運的是,Spartan-6 FPGA中真正的雙端口SRAM可提供理想的解決方案。我們通過使用兩個原始的雙端口SRAM復制數據,以適當的代價實現了4端口SRAM。在正常運行狀態下(命中),每個端口為一個通道服務。在失的后重新填充高速緩存的時候,讀取被禁用,而且可將兩個端口(每個原始雙端MSRAM各一個)用于將數據送給存儲器。
圖6是紋理元素高速緩存的簡化方框圖。在每個時鐘周期中,紋理元素高速緩存均以流水線的方式處理來自每個通道的存儲器地址。如果這些存儲器地址命中高速緩存,并且“命中”信號始終保持高電平,那么流水線就會一直運行。
如果發生失的,“命中”信號會轉為低電平(流水線停頓),隨即由優先級編碼器和多路復用器(mux)選擇失的的地址之一(可以是1個,也可以是多個)。存儲器總線主系統發出一個存儲器交易事務以從系統存儲器中檢索數據,然后替換高速緩存線路的內容,并對標簽進行重寫。該地址現在變成命中高速緩存狀態。如果沒有其他地址未命中高速緩存,紋理元素高速緩存就已經成功地處理該4通道交易事務,而且“命中”信號會再次轉為高電平,以進行到下一個周期的處理。否則,該流程將重復進行,直到所有的地址都命中高速緩存為止。
可以看到,在現代FPGA中,只要將用于存儲的Block RAM的數量翻倍,同時輔以合理數量的控制邏輯,就能夠實現理想的4端口高速緩存系統。
緊隨紋理元素高速緩存之后,雙線性濾波器將4個獲取到的紋理元素的結果混合在一起。在此,我們的設計再次充分發揮了Spartan 6中DSP48A1Slice的性能,能夠迅速計算出加權和。最后,可使用寫入緩沖器將結果存儲到基于SDRAM的系統存儲器中。
一旦與我們的軟核片上系統相集成后,我們的紋理映射單元就會僅使用低成本Spartan 6 FPGA的一小部分資源,卻能提供每秒7000萬像素的峰值填充速率以及每秒3700萬像素的平均填充速率。與純軟件相比,即便是與使用運行在高性能(及高能耗)ASIC CPU的軟件相比,性能也是一大飛躍,能夠充分滿足我們應用的要求。
高度靈活的單芯片
采用高性能可重配置 FPGA,可在高度靈活的單芯片中將過去只有ASIC才能處理的繁重圖形處理功能與非常特定的I/O接口結合在一起。
Milkymist系統能夠充分利用Spartan 6 FPGA的眾多特性:I/O延遲組、DDR寄存器、大型真雙端口Block RAM、DSP Slice、靈活的DCM CLKGEN組件,能夠從NOR閃存進行配置以及多重引導功能。我們的完整設計僅使用了FPGA資源的大約一半,為將來的改良和特性預留了充裕的空間。這對成本像XC6SLX45這樣低的芯片來說是非常了不起的。
對于未來的功能改進而言,整個FPGA設計是屬于開源的,而且其許可和開發模式與Linux內核一樣。設計人員能夠使用免費的ISE WebPACK設計軟件(同時提供Linux版和Windows版)重新構建完整的比特流。
最后需要指出的是,該器件的總功耗不足5W,從而不僅充分凸現了以單芯片FPGA為核心的解決方案的又一優勢所在,同時還進一步推翻了所有FPGA系統都是高功耗系統的錯誤認識。
評論
查看更多