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