- 相關推薦
采用Nios定制指令的嵌入式系統優化設計
摘要:Altera公司的Nios軟核處理器以其低成本,設計靈活等特點,在嵌入式應用領域得到廣泛的應用。采用Nios處理器的定制指令,可以把用戶自定義的功能直接添加到NiosCPU的算術邏輯單元中,加快專項任務的執行,以達到優化目的。本文在闡述Nios定制指令設計的基礎上,給出相應的設計例子說明。關鍵詞:Nios軟核定制指令嵌入式處理器MP3
引言
Nios處理器是Altera公司推出的一個32/16位精簡指令信處理器軟核。在Altera公司推出的軟件SOPC中加載Nios核和相應的外圍接口以及與定義相應的自定義指令,然后對設計進行綜合,下載到FPGA中就可以方便地一個具有特定功能的嵌入式處理器。這種設計思路增加了系統設計的靈活性,加快系統運行速度,縮短產品研發和上市時間。
由硬件實現復雜的算法通常比軟件實現更高效。利用Altera的Niso嵌入式處理器的定制指令,可以把用戶自定義的功能直接添加到NisoCPU的算術邏輯單元(ALU)中(見圖1),來加快專項任務的執行,從而達到系統優化的目的。因此,設計者可以針對關鍵的內部循環和耗時算法,創建Nios嵌入式處理器的定制指令,把復雜的順序指令簡化為硬件實現的單指令,這樣就能夠大大提高系統性能。例如,NiosCPU執行浮點乘法運算要2800多個時鐘周期;而浮點乘法的定制指令采用了浮點單元(FPU),執行只需19個時鐘周期。
1定制指令
定制指令為Nios處理器的算術邏輯單元增加了定制邏輯,設計者通過定制指令,用快速高效的定制邏輯塊替代復雜耗時的軟件程序。在一個CPU中,可以運行多達五個組合或時序定制模塊,還可以訪問Nios系統模塊外的存儲器和/或邏輯。定制邏輯模塊在兩個寄存器Ra和Rb內容的基礎上執行用戶定義的操作,結果存放在寄存器Ra中。這些定制邏輯模塊的功能只受限于器件內邏輯單元(LE)和設計得的想象力。
定制硬件模塊能夠通過Nios嵌入式處理器指令集中的五個用戶定義操作碼來訪問。SOPCBuilder在生成系統期間會為任何定制指令創建宏,通過這些自動產生的C和匯編語言宏就可以方便地訪問自定義指令操作碼。
2實現定制指令
以Altera的Nios2.0版嵌入式處理器為例實現定制指令,同時點擊CustomInstructions標簽創建或編輯NiosCPU,如圖2。
CustomInstruction標簽是系統設計都連接定制邏輯和NiosCPU的ALU的界面。首先,選擇定制指令的操作碼,有USR0~USR4五個操作碼可供使用。然后,導入和掃描作為定制指令的HDL文件。DesignImportWizard掃描頂層模塊的端口,進行合適連接。DesignImportWizard可以接受以下類型的文件:VerilogHDL/VHDL/EDIF/VQM以接受以下類型的文件:VerilogHDL、VHDL、EDIF、VQM和AlteraQuartusII原理圖。導入設計文件之后,分配定制指令所需的CPU時鐘周期數目和定制指令名。
在系統生成期間,SOPCBuilder工具用作ALU一部分的定制邏輯來創建NiosCPU,受所選的操作碼控制軟件開發包用定制指令名創建在C/C++和匯編語言中使用的軟件宏。這些在定制軟件開發包ince下。
圖2定制指令設計界面
設計者通過創建的軟件宏訪問定制指令。在C/C++中,宏就像函數調用一樣使用。如果使用前綴端口,就要用前綴創建不同的宏。例如,為浮點單元(FPU)創建兩個C/C++宏。例如,為浮點單元(FPU)創建兩個C/C++宏是:
result=nm_fpu(data,datb);//不使用前綴
result=nm_fpu_pfx(prefix,data,data);//使用前綴
在匯編語言中,宏調用USR操作碼,按標準匯指令一樣使用。如果使用前綴,那么在宏之前必須有一個PFX指令。有關用戶定義操作碼(USR0~USR4)的詳細資料可參NiosSoftwareDevelopmentReferenceManual。
3MP3播放器的定制指令設計
以MP3播放器設計為例,采用定制指令對設計進行優化。該設計通過增加兩條定制指令,就能使系統執行性能提高大約3倍。圖為該MP3系統設計框圖。
(1)MP3解碼器
在大多數MP3播放器中,處理器是用來管理函數和傳輸數據的。專用MP3解碼器ASIC可用于執行密集計算量的解碼和傳數據給音頻器件。本例中,Altera的Nios處理器用于完成處理控制信號,傳輸數據和進行MP3解碼。通常,MP3解碼器流程如下:
①通過IDE接口從CF(CompactFlashcontroler)中讀取MP3數據;
②將MP3數據存入SPAM中緩存;
③對MP3數據解碼;
④將MP3邊帶合成到脈沖編碼調制(PCM)數據;
⑤把PCM數據傳給脈寬調制器PWM。
此外,播放器采用MPEGAudioDecoder(MAD)進行MP3解碼,是基于以下方面:
①100%定點(整數)計算;
②網上有可利用的源碼;
③在GNUCeneralPublicLicense(GPL)下發布。
(2)定制指令
我們知道在執行MP3解碼的過程中,大量時間花費在邊帶的合成上。因此,優化AlteraMP3的重點就落在函數mad_synth_frame上。我們可通過使用定制指令f_mul和DCT32來優化該函數。
F_mul
F_mul和mad_f_mul是MAD使用的宏,用整數乘法來模擬浮點乘法。定義如下:
#definemad_f_mul(x,y)
((((x)+0x00002000L)>>14)×(((y)+0x00002000L))>>14)
#definef_mul(x,y)
(((x)|0x0001FFFFL)((y)|0x0001FFFFL))
這些函數完成的功能是一組易被硬件實現的操作,包括移位、加法、乘法和邏輯或運算。在AlteraMP3的優化設計中,用硬件定制指令f_mul執行原先用軟件宏;還可利用前綴選項,把兩個宏合為一個單定制指令。以下就是用Altera的定制指令定義(f_mul和mad_f_mul):
#definef_mul(x,y)nm_fmul((x),(y));
#definemad_f_mul(x,y)nm_fmul_pfx(1,(x),(y));
DCT32
在MP3解碼中,DCT32完成離散余弦變換。MAD軟件用優化過的DVT來增強性能。從軟件角度來看,該優化算法比起一般DCT對提高性能具有重大意義。因為標準DCT需要1024個乘法,而用優化后的DCT只需80個乘法。
圖4DCT32與mad_synth_frame軟件流程
DCT32定制指令所用硬件由Celoxica提供,它是可重配置計算方案提供商,采用了基于HandelC的設計工具。Altera的DCT32定制指令按以下特點設計:
|①可以存儲32位輸入和32位輸出;
②在DCT計算時,能獨立于CPU工作;
③用前綴指令接受命令
——裝入/卸載
——啟動DCT計算
——輪詢是否完成。
因為定制指令可以輪詢,在DCT輸出前其它代碼可以并行運行。當需要DCT輸出時,定制指令被查詢,看是否已完成計算。如果完成,Nios處理器卸載輸出數據,同時裝入下組輸入數據。圖4給出了DCT32定制指令及mad_synth_frame的流程圖。
(3)優化前后比較
表1給出了三種情況下完成mad_synth_frame函數的比較結果。三種情況分別是只用硬件乘法指令,單用定制指令f_mul及f_mul和DCT32共用。
從表1中可以看出,f_mul是最有效的定制指令,系統規模僅僅增加3%,卻減少了77%的循環數目。規模增加很小是因為f_mul定制指令無需專用的硬件乘法器。
表1三種情況比較
所用硬件循環數目邏輯元件(IE)內存位只用硬件乘法1279000354226624f_mul293000364226624f_mul和DCT32并行231600433130528
DCT32指令運行在并行模式下,比起f_mul又減少了21%的循環數目,LE資源也只增加了18.9%。
把定制指令所需的額外資源和性能增加情況與只用硬件乘法的基準系統比較。用定制指令能減少執行mad_synth_frame函數時所需的80%循環數目而只增加系統22.3%的規模。該MP3是在Nios開發面板上設計并運行的,頻率為33MHz。在不增加時鐘頻率的情況下,所有性能符合指標。如果需進一步提高性能,還可通過增大時鐘頻率,加大內存,增加指令和數據緩存等方法來實現。
4結論
采用Nios定制指令,系統設計得能夠把一系列順序執行的指令簡化為通過硬件執行的單個指令,從而簡化系統軟件設計并且加快系統運行速度。同時充分利用了可編程邏輯器件通過硬件執行速度快的優點,和用于控制的Nios處理器進行了完美的結合。
【采用Nios定制指令的嵌入式系統優化設計】相關文章:
嵌入式系統的設計與開發08-06
基于Nios平臺的光信號采集片上系統設計08-06
采用USBN9602的數據采集系統設計08-06
面向對象的嵌入式系統設計方法08-06
UML 在嵌入式系統設計中的應用04-12
嵌入式系統中的線性Flash文件系統設計08-06
嵌入式系統的通信規約管理平臺設計08-06
嵌入式MPEG—4解碼系統的設計與實現08-06