摘 要:通過對硬件加速器的目的和原理作詳細(xì)介紹,以sobel硬件加速器的設(shè)計為研究內(nèi)容,設(shè)計硬件加速器由計算單元、地址產(chǎn)生器、從機(jī)接口和控制狀態(tài)機(jī)等構(gòu)成,將各模塊連接驗證進(jìn)行測試。系統(tǒng)連接通過對圖像進(jìn)行邊緣檢測處理,使系統(tǒng)總處理時間降低,從而優(yōu)化復(fù)雜系統(tǒng)設(shè)計。
關(guān)鍵詞:sobel硬件加速器;研究;驗證;優(yōu)化
中圖分類號:TP332.2
1 硬件加速器的目的
隨著待處理信息量和算法復(fù)雜度的日益劇增,單核處理器已經(jīng)不能勝任某些實時系統(tǒng)的需求。例如處理高清視頻是需要采用DSP+FPGA的系統(tǒng)策略,將視頻壓縮標(biāo)準(zhǔn)H.264壓縮算法中耗時大的部分交給FPGA處理,以達(dá)到硬件加速的目的。不僅視頻圖像,在許多其它系統(tǒng)中,對處理器要求高的,需編寫專用的嵌入式軟件,采用高檔的處理器芯片有時無法達(dá)到系統(tǒng)對算法運算速度的要求,即使能達(dá)到,性能比較差,因此需要設(shè)計專用硬件。
2 硬件加速器器的基本原理
硬件加速的實質(zhì)是通過增加運算并行性達(dá)到加速目的。常采用硬件復(fù)制和流水線的方法。將設(shè)計的處理流程分為若干步驟,整個數(shù)據(jù)處理是“單流向”的,前一個步驟的輸出是下一個步驟的輸入,采用流水線設(shè)計方法來提高系統(tǒng)的工作頻率,如圖1所示。流水線各步驟的處理由各單元完成,當(dāng)數(shù)據(jù)沿流水線方向依次通過所有功能單元時,即完成了所有數(shù)據(jù)處理并輸出到寄存器。由于流水線上各功能單元能夠并行工作,因此只要保證下一功能單元的輸入是上一功能單元的輸出,則所有功能單元并行工作可以保證整個流水線正常工作,而無須等到整個流水線處理結(jié)束后才開始下一份數(shù)據(jù)的處理,從而保證數(shù)據(jù)充滿所有功能單元,提高處理速率。
圖1 流水線處理步驟
在應(yīng)用中,選取硬件加速對象時,應(yīng)該對耗時大的算法進(jìn)行加速,從而降低其它處理器的負(fù)擔(dān)。
假設(shè)執(zhí)行算法核心所占的時間比例為 f,則執(zhí)行非算法核心的時間為(1- f ),因此有: (1)
加速器能把算法核心的處理速度提高到原來的s倍,則算法核心的處理時間就縮短到原來的1/s,總的運行時間為: (2)
總體性能的提高比例是原來的處理時間除以加速后的處理時間:
(3)
這個公式表明,加速處理核心算法所帶來的整體性能的提高,在很大程度上依賴于算法核心在整個算法執(zhí)行時間中所占的比例。
3 基于FPGA的Sobel硬件加速器設(shè)計
當(dāng)系統(tǒng)引入硬件加速器之后,需要對內(nèi)存等共享資源進(jìn)行訪問。由I/O控制器完成外部設(shè)備和系統(tǒng)之間的高速傳輸數(shù)據(jù),數(shù)據(jù)從外部設(shè)備讀入內(nèi)存,通過加速器處理,處理后的數(shù)據(jù)被寫到內(nèi)存。由此可見:處理器、加速器和I/O控制器都可能訪問內(nèi)存,這樣數(shù)據(jù)傳輸速度會很慢,如果讓I/O控制器和加速器直接對內(nèi)存訪問而不通過處理器,作為主設(shè)備給出讀寫內(nèi)存的地址和控制信號,可大大加快訪問內(nèi)存的速度。
在共同訪問內(nèi)存時,須避免由于多個主設(shè)備同時訪問內(nèi)存而引起的沖突。在系統(tǒng)中引入仲裁器,系統(tǒng)中的主設(shè)備在訪問內(nèi)存之前,須給仲裁器發(fā)出請求信號,仲裁器根據(jù)預(yù)先確定的仲裁策略,決定發(fā)出訪問內(nèi)存的準(zhǔn)許信號。當(dāng)該設(shè)備完成對內(nèi)存的訪問后,便撤消請求信號,仲裁器進(jìn)入新一輪的仲裁。
基于這一設(shè)計思想設(shè)計出圖像邊緣檢測系統(tǒng):CPU初始化加速器和硬件加速器存取RAM均需占用數(shù)據(jù)線、地址線和控制線。這三總線作為共享資源被 CPU 和硬件加速器競爭訪問,故引入仲裁器進(jìn)行仲裁。
Sobel硬件加速器功能模塊可劃分為:計算單元、地址產(chǎn)生器、從機(jī)接口和控制狀態(tài)機(jī)。其總體框圖如圖2所示。
圖2 加速器總體結(jié)構(gòu)設(shè)計圖
總線數(shù)據(jù)在Sobel加速器作為主從設(shè)備時均可訪問,CPU通過從機(jī)接口先對地址發(fā)生器進(jìn)行設(shè)置,再啟動控制狀態(tài)機(jī)跳出空閑狀態(tài),控制計算單元和地址發(fā)生器,依次從存儲器中讀取原圖像素、sobel邊緣檢測和導(dǎo)數(shù)圖像存儲。
構(gòu)建完Sobel加速器硬件后,要對其進(jìn)行驗證。為簡化驗證,采用逐個驗證Sobel加速器各子功能:從機(jī)總線操作、主機(jī)總線操作、地址產(chǎn)生和像素計算等。下面是驗證步驟:(1)驗證從機(jī)總線所有操作正常;(2)在步驟(1)驗證通過的基礎(chǔ)上,利用從機(jī)接口啟動計算過程,檢查計算單元能否按正確的時序完成計算、主機(jī)總線能否配合無誤地產(chǎn)生讀寫存儲器時序、地址發(fā)生器能否生成正確的地址、最后檢查像素值的計算是否正確等。
構(gòu)建一個測試平臺,該平臺用以模擬外掛加速器的嵌入式系統(tǒng)。該測試平臺包括:處理器CPU、存儲器和總線仲裁器。
處理器CPU完成的功能包括:(1)設(shè)置加速器原始圖像和導(dǎo)數(shù)圖像的起始存儲地址。本設(shè)計將這兩個起始地址分別選為0x008000和0x060000;(2)設(shè)置加速器中斷使能寄存器。(3)寫加速器啟動寄存器,啟動加速器開始邊緣檢測;(4)每10μs讀一次狀態(tài)寄存器,直到完成標(biāo)志位被設(shè)置為止,系統(tǒng)時鐘默認(rèn)為100Mhz。
存儲器???,在初始化階段將一幅原始圖像的像素值導(dǎo)入到存儲器中,以模擬攝像頭圖像采集功能;當(dāng)原始圖像完成邊緣檢測后,將導(dǎo)數(shù)像素值存入存儲器中,將其直接存為文件。當(dāng)外部電路產(chǎn)生讀寫時序時,將正確數(shù)據(jù)送往數(shù)據(jù)總線或完成數(shù)據(jù)總線上數(shù)據(jù)的存儲。如前所述,存儲器讀寫時序與Sobel從機(jī)接口讀寫時序一致。
總線仲裁器是防止共享總線的沖突訪問,在CPU利用總線訪問Sobel從機(jī)接口寄存器和sobel加速器利用總線訪問存儲器之間仲裁。設(shè)計中把Sobel加速器和CPU的片選輸出分別用作Sobel加速器和處理器的請求信號,仲裁器根據(jù)當(dāng)前總線使用情況分別產(chǎn)生批準(zhǔn)信號。
4 硬件加速器的驗證
完成所有sobel加速器和測試模型的建立,將這些模塊連接起來,進(jìn)行測試。主要連線是CPU與Sobel從機(jī)接口間的連接以及sobel主機(jī)接口與存儲器間的連接。由于這兩組接口一致,可讓這兩個接口共享一組總線,在設(shè)計共享總線的多路選通邏輯時,根據(jù)仲裁器仲裁,完成共享總線驅(qū)動源和被驅(qū)動源的選通。被驅(qū)動源為sobel從機(jī)接口和存儲器對應(yīng)的輸入端口,直接將其連接到sobel加速器和存儲器輸入接口即可。
將測試平臺下生成的導(dǎo)數(shù)文件轉(zhuǎn)換為bmp圖像的C程序,測試原始數(shù)據(jù)通過C程序讀取bmp圖像得到sobel邊緣檢測后的圖像。
5 小結(jié)
通過sobel硬件加速器的研究表明,加速器和高速I/O控制器采用DMA方式向存儲器寫入/讀出數(shù)據(jù),不需要處理器干預(yù)。當(dāng)多個設(shè)備競爭同一資源時,將該資源共享,通過仲裁器授予。加速器適用于處理存儲器中的數(shù)據(jù)塊,許多視頻和靜止圖像的處理應(yīng)用都是面向塊處理的。通過塊處理掌握硬件加速器設(shè)計原理使系統(tǒng)總處理時間降低,從而優(yōu)化復(fù)雜系統(tǒng)設(shè)計。
參考文獻(xiàn):
[1]王嘯林,李玉惠.基于FPGA的圖像處理系統(tǒng)研究[J].儀器儀表用戶,2006(13).
[2]王大千,費建軍,董雪.基于FPGA的視頻監(jiān)控系統(tǒng)的設(shè)計及研究[J].數(shù)控技術(shù),2012(9).
[3]徐飛,肖鐵軍等.基于FPGA的視頻圖像旋轉(zhuǎn)硬件加速器的設(shè)計與實現(xiàn)[J].傳感器與微系統(tǒng),2010(10).
[4]葉淑群,陳鴻鵬.實現(xiàn)基于FPGA的硬件算法加速器[J].寶雞文理學(xué)院學(xué)報,2006(6).
[5]薛明星.基于FPGA器件的Sobel算法實現(xiàn)[J].電子元器件應(yīng)用,2008(11).
基金項目:吉林省教育廳“十二五”科學(xué)技術(shù)研究項目“基于FPGA的GPRS圖像處理系統(tǒng)設(shè)計”項目合同號:2011453。