楊宏來(lái),黃旻
(同濟(jì)大學(xué)電子科學(xué)與技術(shù)系,上海 201804)
多核處理器按照所集成的處理器核種類(lèi)可分為同構(gòu)多核處理器和異構(gòu)多核處理器。同構(gòu)多核處理器在一個(gè)芯片內(nèi)集成多個(gè)相同結(jié)構(gòu)的處理器核,多個(gè)處理器核執(zhí)行相同或相似的任務(wù)。異構(gòu)多核處理器在一個(gè)芯片內(nèi)集成多個(gè)不同結(jié)構(gòu)的處理器核,除了主處理器核心之外,多數(shù)情況下還集成了具有某些針對(duì)特定應(yīng)用設(shè)計(jì)的處理核心,如ASIP、DSP、GPU等。異構(gòu)多核處理器可將不同類(lèi)型的任務(wù)分配到不同類(lèi)型的處理器核上并行處理。面對(duì)不同應(yīng)用需求,它可以提供比較靈活、高效的處理機(jī)制[1~2]。
多處理器片上系統(tǒng)(MPSoC,Multi Processor System on Chip)將多個(gè)不同類(lèi)型的處理器核集成在同一個(gè)芯片中,構(gòu)成一個(gè)異構(gòu)多核片上系統(tǒng)。對(duì)于嵌入式系統(tǒng),MPSoC可以滿足其在性能、成本和功耗等多個(gè)方面的約束條件[3]。
數(shù)字圖像、音頻、視頻的多媒體處理技術(shù)應(yīng)用廣泛,目前處理算法通常是由軟件來(lái)完成的。隨著深亞微米工藝和大規(guī)模集成電路技術(shù)的發(fā)展,多媒體實(shí)時(shí)硬件處理成為一個(gè)新的發(fā)展趨勢(shì)?,F(xiàn)場(chǎng)可編程邏輯器件(FPGA)性能優(yōu)越,資源豐富,采用并行處理方式,在數(shù)字信號(hào)處理領(lǐng)域具有很大的優(yōu)勢(shì)。采用FPGA設(shè)計(jì)靈活,程序和模塊可移植性強(qiáng),可縮短設(shè)計(jì)周期,減少硬件投資風(fēng)險(xiǎn)[4]。本文提出了一種面向SoC的異構(gòu)多核的系統(tǒng)設(shè)計(jì),運(yùn)用System Generator進(jìn)行設(shè)計(jì)實(shí)現(xiàn),通過(guò)EDK Processor自動(dòng)生成Pcore,然后運(yùn)用EDK建立基于MicroBlaze的嵌入式系統(tǒng),最后把MicroBlaze和Pcore構(gòu)建成一個(gè)異構(gòu)多核片上系統(tǒng),該方法消減了大部分手動(dòng)硬件語(yǔ)言編寫(xiě),使設(shè)計(jì)流程趨于簡(jiǎn)化,在一定程度上提高了設(shè)計(jì)效率。
設(shè)有一成像系統(tǒng),輸入圖像為f(x,y),輸出為g(x,y),即g(x,y)=T[f(x,y)]。其中T為作用函數(shù),可以是線性的,也可以是非線性的。
在線性情況下,一幅圖像f(x,y)可以看作由一系列點(diǎn)源組成,由點(diǎn)源函數(shù)的卷積來(lái)表示為:
式中,δ函數(shù)為點(diǎn)源函數(shù),且有δ(x-α,y-β)=δ(x-α)δ(y-β),由此可得輸出圖像為:
式中,h(x,α,y,β)=T[δ(x-α,y-β)],稱(chēng)為系統(tǒng)的沖擊響應(yīng)。圖像退化正是由于系統(tǒng)的沖擊響應(yīng)是唯一不變的,此時(shí)h(x,α,y,β)=h(x-α,y-β),輸出圖像可表示為:
圖像退化除了成像系統(tǒng)本身的因素外,有時(shí)還受到噪聲的污染。一般假定噪聲n(x,y)為加性白噪聲。這時(shí)退化后的圖像為:
圖像的退化如圖1所示。
圖1 圖像的退化模型
圖像濾波復(fù)原的方法是通過(guò)某種方法尋找一個(gè)濾波器傳遞函數(shù),通過(guò)頻率域圖像濾波,得到復(fù)原圖像的傅里葉變換,然后再經(jīng)傅里葉反變換求得復(fù)原圖像,如圖2。
圖2 連續(xù)圖像的復(fù)原模型
這里根據(jù)逆濾波法闡述圖像復(fù)原模型,根據(jù)式(4),假設(shè)復(fù)原過(guò)程為一個(gè)線性空間不變系統(tǒng),若該系統(tǒng)的響應(yīng)為hT(x,y),則復(fù)原圖像可表示為:
由卷積定理知,對(duì)應(yīng)的傅里葉變換為:
設(shè)復(fù)原的濾波器傳遞函數(shù)為:
則式(6)可表示為:
整體系統(tǒng)架構(gòu)如圖3所示。
圖3 系統(tǒng)總體構(gòu)架圖
圖3所示系統(tǒng)總體構(gòu)架中MicroBlaze是Xilinx公司推出的一個(gè)高度靈活可以配置的軟核。MicroBlaze采用32位哈弗RISC架構(gòu),32位獨(dú)立的地址總線和數(shù)據(jù)總線。在采用緩存模式下,獨(dú)立的指令和數(shù)據(jù)可以緩存并通過(guò)XCL(Xilinx CacheLink)接口連接到內(nèi)存。在不采用緩存的機(jī)制下,地址和數(shù)據(jù)總線直接通過(guò)PLB訪問(wèn)內(nèi)存。用戶IP可以通過(guò)PLBv46總線或快速點(diǎn)對(duì)點(diǎn)連接(FSL)接入系統(tǒng)。其中PLB比較適合基于總線形式的用戶IP開(kāi)發(fā);FSL比較適合基于簡(jiǎn)單點(diǎn)對(duì)點(diǎn)輸入輸出的用戶IP開(kāi)發(fā)。
System Generator是Xilinx公司的系統(tǒng)級(jí)建模工具,在Match Works公司的Simulink平臺(tái)中運(yùn)行。SG提供了適合硬件設(shè)計(jì)的數(shù)字信號(hào)處理(DSP)建模環(huán)境,用戶只需要根據(jù)設(shè)計(jì)要求在Simulink下進(jìn)行系統(tǒng)建模,使用SG工具即可自動(dòng)產(chǎn)生可執(zhí)行比特文件、測(cè)試文件等,去掉了繁瑣的仿真、對(duì)比和驗(yàn)證過(guò)程。
在SG中,提供了3種將嵌入式處理器加入Simulink工程的實(shí)現(xiàn)方法:BlackBox、PicoBlaze微控制器以及EDK處理器模塊。其中EDK處理器模塊提供了MicroBlaze處理器的接口,允許將共享存儲(chǔ)器(包括From/To Register,F(xiàn)rom/To FIFO和Shared Memory)和MicroBlaze關(guān)聯(lián)起來(lái),一旦建立關(guān)聯(lián)關(guān)系,MicroBlaze就可以對(duì)它實(shí)現(xiàn)讀寫(xiě)控制[6]。
在FPGA設(shè)計(jì)中添加處理器Processor,涉及最多的問(wèn)題是處理器和外部邏輯的數(shù)據(jù)交換,一般來(lái)說(shuō)交換發(fā)生在總線上,協(xié)調(diào)處理其關(guān)系是一個(gè)非常繁瑣和繁重的工作。System Generator提供的EDK Processor模塊能自動(dòng)幫設(shè)計(jì)者完成上述所有問(wèn)題,可以通過(guò)在Processor和外部邏輯間使用共享存儲(chǔ)器來(lái)實(shí)現(xiàn),本文以設(shè)計(jì)Memory映射和硬件實(shí)現(xiàn)等問(wèn)題為例[7]。
3.2.1 Memory映射
圖4 Memory和硬件映射
EDK Processor模塊允許共享存儲(chǔ)器作為其Memory映射的一部分,這種情況下,EDK Processor模塊將自動(dòng)產(chǎn)生與Memory映射相關(guān)的控制邏輯,同時(shí)用總線控制器把Memory映射和Processor正確連接起來(lái)。其中共享存儲(chǔ)器用于軟件和硬件(MicroBlaze processor)的接口交互,硬件的當(dāng)前狀態(tài)(Status)寫(xiě)入Register,PC通過(guò)讀取Register當(dāng)前值獲取硬件狀態(tài),達(dá)到交互信息的目的。
3.2.2 硬件映射
EDK Processor模塊支持兩種模式的硬件實(shí)現(xiàn)方式:EDK Pcore Generation和HDL netlisting。這里采用第一種模式,System Generator將MicroBlaze外部的所有模塊綜合成Pcore,包括外圍設(shè)備的硬件描述、驅(qū)動(dòng)、總線連接和相應(yīng)文檔等。產(chǎn)生的Pcore可以導(dǎo)入EDK工程使用。
3.2.3 驅(qū)動(dòng)程序的產(chǎn)生和驗(yàn)證
當(dāng)Memory映射后都會(huì)自動(dòng)產(chǎn)生對(duì)應(yīng)的驅(qū)動(dòng)程序,并且在EDK XPS工具進(jìn)行軟件庫(kù)編譯時(shí)驗(yàn)證驅(qū)動(dòng)程序的正確性,軟件庫(kù)編譯成功后得到對(duì)應(yīng)驅(qū)動(dòng)的參考文檔。在驅(qū)動(dòng)程序中包括最基本的4個(gè)調(diào)用共享存儲(chǔ)器函數(shù),Read和Write分別表示讀寫(xiě)共享存儲(chǔ)器,單字節(jié)或者矢量讀寫(xiě)模式都支持。
這里采用的退化模型為圖像水平移動(dòng)模糊,即將圖像的行像素卷積上h,h=[1 1 1 1]。卷積公式可以簡(jiǎn)化為:
式中,α為原圖像像素值;g為退化后圖像像素值;l為卷積長(zhǎng)度,這里取值為4。
用System Generator系統(tǒng)搭建模型如圖5所示。模型中利用三個(gè)Register模塊來(lái)實(shí)現(xiàn)移位寄存器,從而完成了行卷積的操作。由于模型的卷積僅為行卷積,所以需要Control模塊負(fù)責(zé)產(chǎn)生Register模塊的清零信號(hào)。
圖5 圖像退化的SG實(shí)現(xiàn)
根據(jù)式(9)的退化模型,可以推導(dǎo)出與退化模型相對(duì)應(yīng)的時(shí)域反卷積模型公式,有:
式中,g為退化了的圖像像素;α’為復(fù)原后圖像像素;M為n/l向下取整;l為退化模型卷積長(zhǎng)度。
時(shí)域反卷積也可以變換成:
用System Generator系統(tǒng)按照式(10)搭建復(fù)原模型如圖6所示。
圖6 圖像復(fù)原的SG實(shí)現(xiàn)
運(yùn)用Xilinx Platform Studio(XPS)來(lái)創(chuàng)建一個(gè)嵌入式系統(tǒng)工程。XPS支持基于MicroBlaze的嵌入式系統(tǒng)的軟件和硬件開(kāi)發(fā)。使用Base System Builder Wizard,自動(dòng)創(chuàng)建一個(gè)處理器系統(tǒng),它由以下處理器IP組成:MicroBlaze、opb_mdm、OPB bus、LMB BRAM、BRAM、UART。本次設(shè)計(jì)采用的目標(biāo)板是Xilinx的Virtex-II PRO FPGA開(kāi)發(fā)板。
運(yùn)用EDK Processor模塊產(chǎn)生Pcore導(dǎo)入XPS工程。EDK Processor會(huì)自動(dòng)為每一個(gè)共享存儲(chǔ)器產(chǎn)生Memory映射,設(shè)置Compilation標(biāo)簽為Export as a pcore to EDK,選擇目標(biāo)板的芯片類(lèi)型,然后在工程目錄下生成一個(gè)Pcore文件夾,包含Pcore相關(guān)的所有文件。把System Generator產(chǎn)生的所有文件復(fù)制到XPS工程中,將其添加進(jìn)MicroBlaze系統(tǒng)中。
進(jìn)行系統(tǒng)搭建的同時(shí)可以進(jìn)行仿真驗(yàn)證,System Generator中的Blockset工具庫(kù)中,WaveScope可以查看系統(tǒng)仿真的波形。圖7和圖8分別顯示了圖像退化和復(fù)原的仿真波形圖,通過(guò)WaveScope Block我們可以查看仿真模型中任意信號(hào)線中的信號(hào)變化,結(jié)果顯示本文設(shè)計(jì)的系統(tǒng)能夠?qū)崿F(xiàn)圖像的退化和復(fù)原。
設(shè)計(jì)在Xilinx的Virtex-II PRO開(kāi)發(fā)板上進(jìn)行了驗(yàn)證,在Xilinx的嵌入式系統(tǒng)開(kāi)發(fā)平臺(tái)EDK中對(duì)系統(tǒng)進(jìn)行了構(gòu)建,主核采用MicroBlaze軟核,時(shí)鐘頻率選擇50MHz,使用PlatGen功能,生成硬件網(wǎng)表,最后生成比特流文件,將其下載到FPGA開(kāi)發(fā)板中進(jìn)行功能驗(yàn)證。驗(yàn)證結(jié)果顯示功能正確,但是對(duì)圖像數(shù)據(jù)的輸入輸出處理還不完善,在后期的SoC實(shí)現(xiàn)中應(yīng)主要完成這方面的改進(jìn)。
圖7 圖像退化模型的仿真結(jié)果
圖8 圖像復(fù)原模型的仿真結(jié)果
本文提出了一種面向SoC的異構(gòu)多核的系統(tǒng)設(shè)計(jì),可以方便地實(shí)現(xiàn)圖像處理。System Generator在很多方面擴(kuò)展了MathWorks公司的Simulink平臺(tái),提供了適合硬件設(shè)計(jì)的數(shù)字信號(hào)處理建模環(huán)境,加速、簡(jiǎn)化了FPGA的DSP系統(tǒng)級(jí)硬件設(shè)計(jì),結(jié)合Xilinx的EDK開(kāi)發(fā)工具,可以方便快速地搭建面向SoC的異構(gòu)多核系統(tǒng),表1給出了基于SG的SoC設(shè)計(jì)和SoC傳統(tǒng)的Top-Down設(shè)計(jì)方法的對(duì)比。從表1可以清晰看到System Generator簡(jiǎn)化了SoC的設(shè)計(jì)流程,提高了設(shè)計(jì)效率。
表1 基于SG的SoC設(shè)計(jì)和Top-Down設(shè)計(jì)流程對(duì)比
本文運(yùn)用System Generator實(shí)現(xiàn)了圖像的退化和復(fù)原的基本算法,生成Pcore協(xié)處理器核,在FPGA中進(jìn)行嵌入式設(shè)計(jì),運(yùn)用軟硬件協(xié)同設(shè)計(jì)的方法,實(shí)現(xiàn)了基于System Generator的異構(gòu)多核片上系統(tǒng)設(shè)計(jì)。該方法消減了大部分手動(dòng)硬件語(yǔ)言編寫(xiě),使設(shè)計(jì)流程趨于簡(jiǎn)化,在一定程度上提高了設(shè)計(jì)效率,在教學(xué)實(shí)踐和工程實(shí)際中都能夠發(fā)揮重要作用。
[1]陳芳園,張冬松,王志英.異構(gòu)多核處理器體系結(jié)構(gòu)設(shè)計(jì)研究[J].計(jì)算機(jī)工程與科學(xué),2011,33(12):28-29.
[2]岳虹.嵌入式異構(gòu)多核處理器設(shè)計(jì)與實(shí)現(xiàn)關(guān)鍵技術(shù)研究[D]. 國(guó)防科學(xué)技術(shù)大學(xué).2006:5-12.
[3]Jerraya A, Wolf W. Multiprocessor systems-on-chips[M].SanFrancisco, USA:Morgan Kaufmann Publishers, 2004.
[4]Harding, B F, R C Cofer. Rapid system prototyping with FPGAs-Embedded technology series[M]. Amsterdam:Elsevier/Newnes, 2006. 301.
[5]薛良峰,齊歡.圖像復(fù)原的逆濾波器技術(shù)探討[J].自動(dòng)檢測(cè)技術(shù),2002,21(5):46-47.
[6]Castleman K R. Digital Imagine Processing[M]. 北京:電子工業(yè)出版社,2008. 325-329.
[7]XILINX. System Generator for DSP Getting Started Guide[EB/OL]. http ://china.xilinx.com/support/documentation/dt_sysgendsp_sysgen10-1.htm, 2008-4-29.
[8]Alba M Sanchez G., Ricardo Alvarez G., Sully Sanchez G. Architexture for fi ltering images using Xilinx System Generator[J]. International Journal of Mathematics and Computers in Simulation.2007,2(1).