【導(dǎo)讀】目前,嵌入式系統(tǒng)數(shù)字化產(chǎn)品成為繼PC機(jī)后的信息處理工具。隨著嵌入式技術(shù)的發(fā)展,圖形處理也從2D圖形向3D圖形轉(zhuǎn)變。本文采用OpenGL作為系統(tǒng)的圖形API,選取21條基本API命令,定義命令字編碼和渲染列表格式作為IP核的設(shè)計(jì)規(guī)約。
本項(xiàng)目通過(guò)在FPGA上用Verilog語(yǔ)言實(shí)現(xiàn)3D影像在LCD的成像,具有以下優(yōu)勢(shì):
1、采用可編程的FPGA進(jìn)行設(shè)計(jì),便于設(shè)計(jì)的更新與升級(jí),節(jié)約成本。
2、緩解CPU在圖形處理方面的負(fù)擔(dān)。
3、滿足廣大消費(fèi)者對(duì)3D影像的需求
4、LCD體積小、質(zhì)量輕、功耗低,可以用大規(guī)模集成電路直接驅(qū)動(dòng),可以在明亮環(huán)境下顯示,不含射線傷害。
一、實(shí)現(xiàn)功能
將IP核劃分為四部分,這里我們分別稱之為FPGA1模塊、FPGA2模塊FPGA3和模塊FPGA4模塊,模擬CPU發(fā)送數(shù)據(jù)的cpu_module需要我們用Verilog HDL設(shè)計(jì)。Cpu_module和IP核的幾何變換模塊屬于FPGA1模塊,IP核的光照模塊屬于FPGS2模塊,F(xiàn)PGA3模塊則包含了IP核圖形管線的圖元裝配模塊,剔除剪切模塊、背面剔除模塊和投影模塊,IP核圖形管線最后兩個(gè)模塊光柵化和片段處理屬于PFGA4模塊。
二、硬件設(shè)計(jì)
通過(guò)上面對(duì)整個(gè)系統(tǒng)功能要求, 性能要求的分析, 我們可以確定系統(tǒng)的基本硬件結(jié)構(gòu), 其組成框圖如下所示:
圖1: IP核圖形管線的組成
圖中的cpu module模塊用來(lái)模擬圖形應(yīng)用程序經(jīng)CPU處理得到渲染列表的過(guò)程,它將渲染列表命令以GPU方言的形式送到GPU,并等待圖形管線中8級(jí)流水線的處理。整個(gè)圖形管線分為兩部分,幾何部分和光柵部分,圖中的前6個(gè)模塊幾何變換、光照、圖元裝配、裁剪、背面剔除、投影屬于幾何部分,后2個(gè)模塊光柵化和片段處理屬于光柵部分。
三、模塊功能概述
首先是對(duì)cpu module送來(lái)的數(shù)據(jù)進(jìn)行幾何變換,一個(gè)三角形圖元由三個(gè)頂點(diǎn)構(gòu)成,每個(gè)頂點(diǎn)包含的信息有位置信息、法線信息、顏色信息等。由于三維空間中的物體都是以頂點(diǎn)的形式描述,所以幾何變換模塊主要是對(duì)舀Begin和glEnd之間的頂點(diǎn)數(shù)據(jù)流和相關(guān)命令的處理,所做的工作包含對(duì)頂點(diǎn)坐標(biāo)的平移、旋轉(zhuǎn)、縮放。
然后是對(duì)頂點(diǎn)顏色的計(jì)算,每個(gè)頂點(diǎn)都可以有自己的顏色。影響物體顏色的因素有幾個(gè)方面,一是環(huán)境光照的影響,二是物體材質(zhì)本身對(duì)光源進(jìn)行調(diào)制,三是光源的位置,因此該級(jí)模塊有很多需要根據(jù)渲染列表中的命令設(shè)置相應(yīng)的參數(shù),然后按照光照原理和各個(gè)模型參數(shù)計(jì)算出頂點(diǎn)的顏色。頂點(diǎn)的坐標(biāo)位置和顏色信息有了以后就需要將單獨(dú)的頂點(diǎn)數(shù)據(jù)組裝成一個(gè)個(gè)圖元,OpenGL支持的圖元有點(diǎn)、線、三角形、折線、線環(huán)、三角形帶和三角形扇等。我們的IP核目前只考慮了對(duì)三角形圖元的處理,因?yàn)槿切问亲罨镜膱D元,其它圖元只要在圖元裝配一級(jí)做一些處理就可以轉(zhuǎn)化為對(duì)三角形圖元的處理,點(diǎn)和線段的處理比三角形的處理簡(jiǎn)單,只是在光柵化一級(jí)稍有不同,而一些復(fù)雜圖元?jiǎng)t可以分解成三角形圖元來(lái)處理。
圖元裝配完成以后就應(yīng)該對(duì)不在視景體內(nèi)的圖元進(jìn)行剔除,對(duì)部分在視景體內(nèi)的圖元進(jìn)行剪切。由于視野的限制,人不可能同時(shí)看到所有的物體,舉例來(lái)說(shuō),你不可能看到自己背后是什么物體,因此在圖形學(xué)中用視景體來(lái)模擬視野的限制,將一些不顯示的圖元剔除剪切掉,以避免后級(jí)不必要的計(jì)算,減輕后級(jí)的負(fù)擔(dān)。
背面剔除模塊的工作是判斷圖元的正反面,根據(jù)需要顯示我們希望看到的那一面。因?yàn)殡m然在視景體外面的圖元被剪切掉了,但是并不意味著所有剩下的圖元都會(huì)被顯示出來(lái),比如一枚硬幣,當(dāng)印有人頭的一面對(duì)著我們的時(shí)候,另一面的字就不能呈現(xiàn)在我們面前,后級(jí)的處理也就不需要考慮有字的那一面。
前面五級(jí)的處理對(duì)象都是三維空間中的頂點(diǎn)數(shù)據(jù),但我們的顯示設(shè)備只是二維的,這就需要我們將視景體中的三維圖元映射到二維平面上,投影交換模塊的作用就在于此。至此三維圖元就變成了二維的圖元,后面兩級(jí)就只需要對(duì)二維圖元進(jìn)行處理。
光柵化一級(jí)需要將二維圖元的坐標(biāo)變換成整數(shù),因?yàn)轱@示設(shè)備的光柵是離散的點(diǎn)陣,該級(jí)還需要做的工作是填充圖元的內(nèi)部,另外圖元邊緣的反走樣也需要在該級(jí)完成。經(jīng)過(guò)該級(jí)的處理,二元圖元就變成了離散的片元數(shù)據(jù),即人們常說(shuō)的像素?cái)?shù)據(jù),每個(gè)像素?cái)?shù)據(jù)都和顯示設(shè)備光柵上的某個(gè)點(diǎn)一一對(duì)應(yīng)。
最后一級(jí)是片段處理,它的工作就是在像素?cái)?shù)據(jù)送到幀緩沖區(qū)之前再對(duì)像素?cái)?shù)據(jù)進(jìn)行篩選,因?yàn)橹挥蟹蠗l件的才會(huì)被寫入到幀緩沖區(qū)中。比如有一扇門,當(dāng)門關(guān)起來(lái)的時(shí)候我們就看不見門里的物體,這時(shí)只需將描述門的像素?cái)?shù)據(jù)送到幀緩沖區(qū)中,門后面的物體是被門擋住了的,不應(yīng)該將描述門后物體的像素?cái)?shù)據(jù)送到幀緩沖區(qū)。而當(dāng)門開著的時(shí)候,我們需要將描述門后物體的像素?cái)?shù)據(jù)送到幀緩沖區(qū)中。同時(shí)如果需要Alpha混合,則還需要將兩個(gè)物體的重疊部分的像素的顏色值做混合處理。
這8個(gè)模塊是3D圖形處理器IP核的核心所在,我們的工作就是在課題組已有工作的基礎(chǔ)上,在4塊FPGAJ2用Verilog HDL來(lái)設(shè)計(jì)完善這8個(gè)模塊。
四、IP核的驗(yàn)證平臺(tái)
驗(yàn)證平臺(tái)的結(jié)構(gòu)示意圖如圖所示。
圖2:驗(yàn)證平臺(tái)的結(jié)構(gòu)示意圖
驗(yàn)證平臺(tái)所使用的4片F(xiàn)PGA芯片是EP2C20Q240C8,它有18752個(gè)邏輯單元和239616BitSMemory,芯片之間采用級(jí)聯(lián)的形式,按先后順序我們分別用FPGAl、FPGA2、FPGA3、FPGA4來(lái)表示。
IP核的8個(gè)模塊需要按照?qǐng)D形管線的結(jié)構(gòu)分別映射到4片F(xiàn)PGA中,根據(jù)圖形管線各模塊所做的工作,每個(gè)模塊在FPGA中的分配如圖3所示。
圖3:IP核各模塊在FPGA中的分配
按照?qǐng)D中的劃分,我們可以看作是將IP核劃分成了4部分,這里我們分別稱之為FPGAl模塊、FPGA2模塊、FPGA3模塊和FPGA4模塊。由于條件限制,用來(lái)模擬CPU發(fā)送數(shù)據(jù)的epu.module也需要我們用Verilog HDL設(shè)計(jì),epu 和IP核的幾何變換模塊屬于模塊,口核的光_module FPGAl照模塊屬于FPGA2模塊,F(xiàn)PGA3模塊則包含了IP核圖形管線的圖元裝配模塊、剔除剪切模塊、背面剔除模塊和投影模塊,IP核圖形管線最后兩個(gè)模塊光柵化和片段處理屬于FPGA4模塊。
相關(guān)閱讀:
技術(shù)分享:基于FPGA的水聲信號(hào)采集與存儲(chǔ)系統(tǒng)設(shè)計(jì)
淺析以FLASH和反熔絲技術(shù)為基礎(chǔ)的FPGA
基于FPGA復(fù)位的可靠性設(shè)計(jì)方法講解