《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于ARM和FPGA架構(gòu)的三維圖形加速系統(tǒng)
基于ARM和FPGA架構(gòu)的三維圖形加速系統(tǒng)
摘要: 本文設(shè)計(jì)了基于ARM和FPGA的嵌入式圖形系統(tǒng),使用FPGA在硬件上實(shí)現(xiàn)三維圖形處理,緩解嵌入式CPU在處理三維圖形時(shí)因計(jì)算量過大而導(dǎo)致系統(tǒng)效率降低的問題。圖像顯示符合人眼對(duì)圖像連續(xù)性的要求。
關(guān)鍵詞: FPGA ARM 圖形加速
Abstract:
Key words :
 

  引言

  隨著圖形處理的巨額運(yùn)算量,CPU變得不堪重負(fù)。此時(shí),需要使用特定的硬件設(shè)備來為嵌入式CPU承擔(dān)圖形處理的任務(wù)。

  具有三維圖形硬件加速能力的ARM+FPGA架構(gòu)嵌入式圖形系統(tǒng)就是其中一種解決方案。其中,ARM處理器負(fù)責(zé)運(yùn)行嵌入式操作系統(tǒng)、執(zhí)行上層圖形應(yīng)用程序,而三維圖形處理所需的大量運(yùn)算則由FPGA實(shí)現(xiàn)的GPU(圖形處理單元)進(jìn)行。 

  圖形API簡介

  在圖形系統(tǒng)中預(yù)先定義了一組圖形API,作為一個(gè)抽象層將圖形應(yīng)用程序和圖形系統(tǒng)的具體實(shí)現(xiàn)隔離開來。具體的圖形應(yīng)用程序都將通過這些圖形API來完成所有與繪制圖形相關(guān)的工作。這樣,同樣的應(yīng)用程序就可以在不同的目標(biāo)圖形系統(tǒng)上運(yùn)行。

  目前應(yīng)用較為廣泛的標(biāo)準(zhǔn)圖形API主要有Direct3D和OpenGL。OpenGL定義了與具體硬件實(shí)現(xiàn)無關(guān)的軟件接口,并且不受制于具體的窗體系統(tǒng)。

  本文選用23條OpenGL中最常用的API作為本系統(tǒng)的圖形API。在執(zhí)行應(yīng)用程序時(shí),具體的圖形API被轉(zhuǎn)換成GPU可以處理的渲染列表數(shù)據(jù)格式,從而將計(jì)算任務(wù)轉(zhuǎn)交由GPU完成,實(shí)現(xiàn)對(duì)三維圖形處理的硬件加速。

  系統(tǒng)硬件設(shè)計(jì)

  系統(tǒng)硬件結(jié)構(gòu)

  本文設(shè)計(jì)的嵌入式圖形系統(tǒng)由基于ARM處理器的最小系統(tǒng)、FPGA實(shí)現(xiàn)的圖形加速、LCD控制器等功能模塊,以及常用外設(shè)接口電路組成,如圖1所示?! ?/p>

基于ARM+FPGA架構(gòu)的三維圖形加速系統(tǒng)硬件圖
 
圖1 系統(tǒng)硬件結(jié)構(gòu)

  基于ARM處理器的最小系統(tǒng)是本系統(tǒng)的核心模塊,主要由嵌入式處理器、系統(tǒng)內(nèi)存SDRAM和FLASH存儲(chǔ)器組成。SDRAM為處理器運(yùn)行操作系統(tǒng)和執(zhí)行應(yīng)用程序提供內(nèi)存空間,F(xiàn)LASH用來存放系統(tǒng)引導(dǎo)代碼、操作系統(tǒng)內(nèi)核和應(yīng)用程序。

  圖形加速模塊是使用FPGA實(shí)現(xiàn)的嵌入式GPU,是系統(tǒng)能夠?qū)崿F(xiàn)硬件加速的關(guān)鍵部件。它通過內(nèi)部圖形處理流水線處理CPU生成的渲染列表,并最終形成像素?cái)?shù)據(jù)寫入幀緩沖SRAM中供LCD進(jìn)行顯示。該模塊在三維圖形處理中使用固定功能的圖形處理流水線,如圖2所示?! ?/p>

圖形處理流水線示意圖
 
圖2 圖形處理流水線示意圖

  圖形加速模塊在一片SRAM中生成完整幀數(shù)據(jù)后將其控制權(quán)交給LCD控制器,并使用另一片SRAM繼續(xù)下一幀數(shù)據(jù)的計(jì)算。在新的一幀數(shù)據(jù)完成后便再次與LCD控制器交換控制權(quán)。LCD控制器通過SRAM仲裁模塊從當(dāng)前顯示的幀緩存中讀出幀數(shù)據(jù),生成符合LCD顯示屏要求的時(shí)序,完成三維數(shù)據(jù)的顯示。

  系統(tǒng)中存在兩組LCD總線。一組是ARM處理器提供的LCD總線,用來顯示嵌入式操作系統(tǒng)的圖形用戶界面;另一組是進(jìn)行三維圖像顯示的LCD控制器的LCD總線??偩€切換模塊負(fù)責(zé)兩類總線的切換,將合適的LCD總線掛接到LCD屏上進(jìn)行顯示。

  系統(tǒng)硬件實(shí)現(xiàn)

  本文選用S3C2410嵌入式處理器和Cyclone II系列FPGA實(shí)現(xiàn)圖形加速以及其他功能模塊,輔以LCD屏、串口等外圍電路實(shí)現(xiàn)整個(gè)圖形系統(tǒng)。

  電源設(shè)計(jì)

  本系統(tǒng)需要多個(gè)不同電壓值的直流電源供電,包括5V、3.3V、1.8V和1.2V。其中5V電源從外部直流電源直接引入,而其他電壓值則由5V電壓變換得到。

  S3C2410的內(nèi)核電壓為1.8V,外部I/O和存儲(chǔ)器電壓為3.3V。系統(tǒng)選用低壓差穩(wěn)壓器AS1117實(shí)現(xiàn)這兩種電壓的轉(zhuǎn)換,固定輸出時(shí)只需三個(gè)引腳,如圖3所示?! ?/p>

1.8V電源電路
 
圖3 1.8V電源電路

  本文使用TPS70345為FPGA提供1.2V內(nèi)核電壓和3.3V IO電壓。

  ARM與FPGA接口電路

  生成三維圖形時(shí),嵌入式微處理器上運(yùn)行的圖形應(yīng)用程序生成三維圖形的渲染列表,并將渲染列表寫入到FPGA的渲染列表緩沖區(qū)中,等待圖形加速模塊的處理。ARM與FPGA接口電路既要保證可以完成渲染列表的寫操作,又要能夠?qū)PGA中總線接口模塊、圖形加速模塊、LCD控制器等的內(nèi)部寄存器進(jìn)行讀寫操作。接口電路如圖4所示?! ?/p>

 ARM與FPGA接口電路
 
圖4 ARM與FPGA接口電路

  系統(tǒng)軟件設(shè)計(jì)

  系統(tǒng)軟件架構(gòu)

  本文使用FPGA實(shí)現(xiàn)整個(gè)三維圖形處理流水線,由硬件完成三維圖形生成和處理。運(yùn)行在操作系統(tǒng)上的圖形應(yīng)用程序通過調(diào)用圖形API實(shí)現(xiàn)具體應(yīng)用,而驅(qū)動(dòng)程序?qū)D形API的調(diào)用轉(zhuǎn)換成渲染列表,從而將具體的三維圖形處理任務(wù)交給硬件完成,如圖5所示?! ?/p>

基于ARM+FPGA架構(gòu)的三維圖形加速系統(tǒng)流程
 
圖5 系統(tǒng)軟件架構(gòu)

  考慮到嵌入式圖形系統(tǒng)除了進(jìn)行三維圖形處理之外,還應(yīng)當(dāng)能夠?yàn)橛脩籼峁┯押玫挠脩魣D形操作界面,本文采用了Windows CE操作系統(tǒng)。

  驅(qū)動(dòng)程序設(shè)計(jì)

  設(shè)備驅(qū)動(dòng)程序在操作系統(tǒng)和硬件設(shè)備之間建立了一個(gè)橋梁,讓操作系統(tǒng)能夠識(shí)別設(shè)備并為應(yīng)用程序提供設(shè)備服務(wù)。

  本文中FPGA實(shí)現(xiàn)的圖形加速模塊作為一個(gè)設(shè)備掛接在系統(tǒng)中。系統(tǒng)在軟件上只需要將渲染列表寫到該設(shè)備的地址空間,因此本文使用了簡單的流式接口驅(qū)動(dòng),所有的流接口驅(qū)動(dòng)程序都使用相同的一組流接口函數(shù)。

  渲染列表的傳遞是不需要反饋的,系統(tǒng)將渲染列表寫入設(shè)備(GPU)后并不需要從設(shè)備中獲取數(shù)據(jù),因此流接口函數(shù)GPU_Read()并不需要實(shí)現(xiàn)具體功能,只在GPU_Write()中將渲染列表寫入到設(shè)備中。另外,系統(tǒng)在普通圖形界面和三維顯示兩種顯示模式下使用的是不同的LCD控制器。前者使用S3C2410中集成的LCD控制器,而后者使用的是FPGA模塊中實(shí)現(xiàn)的LCD控制器,兩種模式下通過LCD總線切換模塊進(jìn)行切換。

  結(jié)語

  本文設(shè)計(jì)了基于ARM和FPGA的嵌入式圖形系統(tǒng),使用FPGA在硬件上實(shí)現(xiàn)三維圖形處理,緩解嵌入式CPU在處理三維圖形時(shí)因計(jì)算量過大而導(dǎo)致系統(tǒng)效率降低的問題。圖像顯示符合人眼對(duì)圖像連續(xù)性的要求。



 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。