<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于FPGA的多軟核圖像處理系統設計

基于FPGA的多軟核圖像處理系統設計

作者: 時(shí)間:2017-06-05 來(lái)源:網(wǎng)絡(luò ) 收藏

本設計在A(yíng)ltera Cyclone II EP2C35F672C6芯片上實(shí)現,旨在利用芯片的并行處理結構以及兩個(gè)Nios II軟核處理器間的并行處理和協(xié)作,提升數字系統的性能。

本文引用地址:http://dyxdggzs.com/article/201706/349229.htm

1 CSC MegaCore IP核

Altera視頻組合是Altera公司提供的一組用于開(kāi)發(fā)視頻和的MegaCore IP核。這些MegaCore IP在涉及圖像處理和顯示的應用中有著(zhù)廣泛應用。這些IP核的功能包括:顏色空間轉換、色度重采樣、伽瑪校正、二維FIR濾波器、二維中值濾波器等[1]。

顏色空間是在三維坐標系下精確表示各種顏色的三維線(xiàn)性空間。不同的顏色空間采用不同的基色:RGB顏色空間采用紅、綠、藍三種顏色;CMY顏色空間采用青、品紅、黃三種顏色。不同的硬件設備使用不同的顏色空間,例如:計算機顯示器使用RGB顏色空間,數字電視使用YCbCr(亮度色度)顏色空間。將圖像數據在使用不同顏色空間的硬件設備間傳輸時(shí),通常都需要進(jìn)行顏色空間的轉換[2]。顏色空間轉換(CSC)MegaCore提供了靈活且高效的方式將圖像數據從一個(gè)顏色空間轉換到另一個(gè)顏色空間。

在兩個(gè)不同的顏色空間進(jìn)行圖像數據的轉換時(shí),需要提供一個(gè)特定的、具有12個(gè)系數的轉換矩陣。該矩陣中的系數由進(jìn)行轉換的兩個(gè)顏色空間決定。例如:din_0、din_1、din_2為被輸入的像素在原顏色空間下的坐標,[x0,x1,x2,…,x11]為轉換矩陣的系數,dout_0、dout_1、dout_2為輸入像素經(jīng)轉換后在目標顏色空間下的坐標,則計算方法如下:

dout_0=x0×din_0+x1×din_1+x2×din_2+x3

dout_1=x4×din_0+x5×din_1+x6×din_2+x7

dout_2=x8×din_0+x9×din_1+x10×din_2+x11

2 CSC MegaCore IP核與Nios II系統的接口設計

本設計的CSC MegaCore IP具有兩個(gè)Avalon端口:一個(gè)只寫(xiě)的Avalon從端口,用于接收Nios II軟核處理器通過(guò)Avalon總線(xiàn)傳來(lái)的輸入數據;另一個(gè)Avalon主端口,將經(jīng)過(guò)CSC MegaCore IP處理后的數據通過(guò)Avalon總線(xiàn)寫(xiě)到存儲器中。

完成上述兩個(gè)Avalon接口的功能,需要CSC MegaCore IP對外提供如下幾個(gè)必備的Avalon總線(xiàn)信號:reset、clock信號用于系統復位和時(shí)鐘信號;write、writedata信號用于只寫(xiě)的Avalon從端口;write、writedata、address信號用于A(yíng)valon主端口(用于A(yíng)valon主端口和用于只寫(xiě)的Avalon從端口的write、writedata是不同的信號,只是名稱(chēng)相同)。

由于定制的CSC MegaCore IP沒(méi)有提供Avalon主端口需要的address信號,所以在本設計中需要增加地址生成邏輯功能。增加該功能有兩種方式:第一種方式是對由定制自動(dòng)生成的CSC MegaCore IP的頂層設計進(jìn)行更改,在CSC頂層設計文件對外提供的接口中增加address信號,并且在CSC頂層設計文件中加入生成address信號的VHDL代碼。另一種方式是用VHDL語(yǔ)言實(shí)現一個(gè)接口,CSC MegaCore IP只向該接口提供與應用相關(guān)的信號,address信號由在該接口設計文件中的VHDL代碼生成。

本設計對兩種設計方案都進(jìn)行了嘗試,最終采用了第二種方法。因為單獨設立一個(gè)接口一方面可以解決address信號的生成問(wèn)題,另一方面設立該接口文件可以使設計的層次更加清晰且具有靈活性和通用性。

設立這樣一個(gè)接口后,可以將該接口封裝為SoPC自定義組件加入Nios II系統中。這樣,CSC MegaCore IP就成為了Nios II系統的外圍組件,在設計中與Nios II系統處于同一個(gè)頂層。而且,由于A(yíng)ltera視頻圖像處理組合中其他的IP核都具有與CSC MegaCore IP相似的對外接口[1],這樣一個(gè)接口的設立也解決了Altera視頻圖像處理組合中其他的IP核與Nios II系統的連接問(wèn)題。

3 的設計

目前,隨著(zhù)業(yè)界對計算機芯片的組織和體系結構研究的不斷深入,簡(jiǎn)單地通過(guò)提高系統時(shí)鐘頻率、增加Cache容量以及處理器指令的超標量化和流水化等方式實(shí)現系統性能提升的策略已經(jīng)到達了回報減小點(diǎn)。傳統方式對系統性能的提升遇到了瓶頸,有學(xué)者已經(jīng)指出,在單一處理器的條件下,系統性能的提高大致正比于復雜度提高的平方根[3]。

隨著(zhù)SoPC技術(shù)的發(fā)展,設計者普遍采用了一種新辦法來(lái)改善性能:在同一芯片上安排多個(gè)軟核處理器并帶有大的共享Cache。同一芯片上多個(gè)處理器的使用,亦稱(chēng)為多核(multiple cores)。在中采用多個(gè)軟核處理器,根據時(shí)間和功耗要求劃分任務(wù),可以更高效地利用器件的資源、提升器件的處理效率,從而提升系統整體性能。

硬件資源共享是多核系統的強大功能之一,在多核系統中最普遍的共享資源是存儲器。共享存儲器的數據從端口需要與共享存儲器的軟核處理器的數據主端口連接。如果某一處理器正在對共享存儲器的特定區域進(jìn)行寫(xiě)操作,而同時(shí)另一個(gè)處理器正在對同一區域進(jìn)行讀或寫(xiě)操作,則很可能出現數據錯誤。因此,在共享存儲器時(shí)需要通過(guò)使用Mutex核或Mailbox核通知其他處理器何時(shí)正在使用共享資源,以便處理器之間不會(huì )相互干擾。

圖1為本設計中兩個(gè)Nios II軟核處理器與共享存儲器的連接框圖。其中:SDRAM為共享的程序存儲器,用于存放兩個(gè)處理器的代碼;Flash存儲器為共享的啟動(dòng)存儲器;On_chip_memory是利用片上資源實(shí)現的雙口RAM,在系統中是共享的數據存儲器,用于存放圖像數據。

由于兩個(gè)Nios II CPU使用同一個(gè)SDRAM作為程序存儲器,因此需要用SoPC Builder提供的存儲器分區功能來(lái)指定每個(gè)Nios II CPU使用的存儲器區域。SoPC Builder的分區功能使用處理器的異常地址來(lái)定義不同處理器之間代碼存放的分界,每個(gè)處理器的異常地址用來(lái)決定處理器代碼存放的基地址,其末地址由下一個(gè)異常地址或存儲器的末地址決定。每個(gè)Nios II CPU有5個(gè)主要的代碼段需要被鏈接到存儲器中,它們分別是: .text、.rodata、.rwdata、heap和stack段。在對程序存儲器分區時(shí),必須為每個(gè)處理器的heap和stack段提供足夠的地址空間,否則heap和stack段可能溢出,進(jìn)而破壞處理器的代碼運行。

本設計中的兩個(gè)Nios II CPU還共享了一個(gè)Flash存儲器,作為啟動(dòng)存儲器。與程序存儲器類(lèi)似,在多Nios II軟核處理器系統中,每個(gè)處理器必須從自己獨立的存儲區域啟動(dòng),多個(gè)處理器不能從同一非易失存儲器的同一地址啟動(dòng)。SoPC Builder對啟動(dòng)存儲器提供了與程序存儲器類(lèi)似的分區功能,用處理器的復位地址來(lái)定義不同處理器之間啟動(dòng)代碼的分界。

在本設計中,的所有硬件資源通過(guò)SoPC Builder連接矩陣的互聯(lián)情況如圖2所示。Mutex核用于兩個(gè)Nios II CPU對On_chip_memory的互斥訪(fǎng)問(wèn)。兩個(gè)Nios II CPU通過(guò)SoPC Builder中的連接矩陣與這些資源相連接,實(shí)現了資源共享。此外,本設計中每個(gè)Nios II CPU都有獨立的cpu_timer(計時(shí)器)、custom_comp(自定義CSC MegaCore IP接口)外設。


圖2 多軟核系統中硬件資源通過(guò)連接矩陣的互聯(lián)情況

Nios II IDE具有在片上對多處理器同時(shí)進(jìn)行調試的能力。Nios II IDE multiprocessor collection支持在片上對多軟核系統的軟件進(jìn)行調試。Nios II IDE下載軟件代碼到每一個(gè)處理器,然后運行軟件。在multiprocessor collection中不同處理器的啟動(dòng)并不是在同一個(gè)時(shí)鐘周期開(kāi)始的,只要一個(gè)處理器對應的代碼下載完畢,該處理器就開(kāi)始執行代碼。

運行在兩個(gè)Nios II處理器上的軟件通過(guò)硬件Mutex核協(xié)調對共享片上數據存儲器的訪(fǎng)問(wèn)。運行在兩個(gè)Nios II CPU上的程序各負責一半的圖像數據處理任務(wù),并將處理后的圖像數據寫(xiě)入共享數據存儲器中。最后由一個(gè)Nios II CPU將結果數據從共享緩存中讀出,并輸出到結果文件中。

此外,軟核處理器上運行的代碼通過(guò)Altera公司提供的Altera Host Based File System文件系統對存儲在計算機上的文件進(jìn)行讀寫(xiě)操作。Altera Host Based File System文件系統與Altera Zip Read-Only File System只讀文件系統相比,可以對文件進(jìn)行寫(xiě)操作,更加符合本設計的需求。加入Altera Host Based File System后即可在代碼中使用ANSI C對存儲在計算機上的文件進(jìn)行訪(fǎng)問(wèn),代碼如下:

FILE*fp_bin=NULL;

fp_bin=fopen(″/mnt/host/hostfs_read_binary.bin″,″r″);

fread(buffer,1,BUF_SIZE,fp_bin);

for(i=0;i P>

{

printf(″%X″,buffer[i]);

}

設計中進(jìn)行讀/寫(xiě)的文件是BMP位圖文件。BMP位圖文件由四個(gè)部分組成:位圖文件頭、位圖信息頭、調色板數據和圖像數據區。為了對設計進(jìn)行簡(jiǎn)化,假設處理的BMP位圖文件為非壓縮且沒(méi)有調色板的位圖文件。在這類(lèi)文件中圖像數據區開(kāi)始于0036h,使用ANSI C中的fseek( )函數即可讀到圖像數據實(shí)體。

4 多核系統與單核系統的性能對比

由于本設計為多軟核系統,為了與單Nios II軟核系統進(jìn)行比較,在軟件設計中加入了監測軟件執行時(shí)間的代碼。對不同像素數的圖像進(jìn)行處理時(shí),單核系統與多核系統的程序執行時(shí)間如表1所示。

對表1中的數據進(jìn)行分析可知,由于在多核系統中,CPU之間進(jìn)行通信需要一定的時(shí)間開(kāi)銷(xiāo),在待處理數據量不大時(shí),如1 024像素,單Nios II軟核系統(單Nios II 軟核CPU帶一個(gè)CSC MegaCore IP)與雙Nios II軟核系統(雙Nios II軟核CPU帶雙CSC MegaCore IP)在處理耗時(shí)上的差別并不明顯。當處理的圖像數據量增大時(shí),雙Nios II軟核系統對性能的提升逐漸顯示,如圖3所示。

以一幅64×64的BMP位圖的處理時(shí)間為例,雙核系統的處理時(shí)間為3 961 ms,與之配置相同的單核系統的處理時(shí)間為4 656 ms,多軟核系統的性能提高約為15%。

經(jīng)過(guò)對Quartus II軟件綜合報告進(jìn)行分析,單核系統對FPGA片上的邏輯單元(LE)占用為17%,多核系統對FPGA片上的邏輯單元(LE)占用為27%,多占用了10%的邏輯資源。因此,可以說(shuō)在設計中用器件的邏輯資源換取了程序執行時(shí)間,而且系統性能的提升量是邏輯資源消耗量的1.5倍,達到了設計的預期目標。

本設計基于FPGA實(shí)現了圖像顏色空間轉換的多核系統。利用SoPC Builder軟件完成硬件系統的搭建,成功地將硬件系統下載到DE2開(kāi)發(fā)版,并且在軟件設計中實(shí)現了對共享數據存儲器的訪(fǎng)問(wèn)控制以及程序執行時(shí)間的監測。為CSC MegaCore IP核與Nios II系統間設計的接口使得本設計具有一定的靈活性,CSC MegaCore IP核可以用Altera視頻圖像處理組合中的任一個(gè)IP核替換。

本設計利用多個(gè)軟核(包括兩個(gè)Nios II軟核處理器和兩個(gè)CSC MegaCore IP)并行對圖像進(jìn)行顏色空間的轉換。與單核系統相比較,多軟核系統性能有較大提高且沒(méi)有過(guò)多地占用邏輯資源。



關(guān)鍵詞: 圖像處理 多軟核系統 FPGA

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>