1 / 16

專題成果報告書 ARM 的 Binary code 轉 Verilog code 之翻譯器

專題成果報告書 ARM 的 Binary code 轉 Verilog code 之翻譯器. 元智大學資訊工程學系 組員 ︰ 張立蓉、李佳珉 指導教授 ︰ 楊正仁教授. 摘要. 利用 FPGA (Field Programmable Gate Array) 增強電腦計算效能中,將程式移植到 FPGA 平台的過程 耗費人力 耗費時間. Cont. 在此專題計畫中,我們將設計一個程式碼翻譯器 針對沒有任何輔助資訊的二元碼,轉換成 FPGA 上的硬體描述語言。

Download Presentation

專題成果報告書 ARM 的 Binary code 轉 Verilog code 之翻譯器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 專題成果報告書ARM 的 Binary code 轉 Verilog code 之翻譯器 元智大學資訊工程學系 組員︰張立蓉、李佳珉 指導教授︰楊正仁教授

  2. 摘要 • 利用 FPGA (Field Programmable Gate Array) 增強電腦計算效能中,將程式移植到 FPGA 平台的過程 • 耗費人力 • 耗費時間

  3. Cont. • 在此專題計畫中,我們將設計一個程式碼翻譯器 • 針對沒有任何輔助資訊的二元碼,轉換成FPGA上的硬體描述語言。 • 幫助系統開發工程師能夠迅速地將一些現有的應用軟體轉換到 FPGA 平台上,獲得可重組態硬體加速的效能提昇。

  4. 研究動機 • 若直接使用硬體描述語言撰寫 FPGA 的 bitstream • 開發人員必須要有不短的撰寫經驗 • 其程式設計概念迴異於一般所熟知的程式設計語言,其學習門檻不低 • 為了加速系統開發,會使用一些軟體工具,將高階語言所撰寫的軟體轉譯成硬體描述語言來進行移植。 • 系統開發者沒有軟體原來的高階語言程式碼,在軟體移植上,必須將其執行檔先進行反組譯,再由開發人員針對這些組合語言進行分析與轉譯。

  5. Cont. • 開發者的兩個挑戰 • 需對二元碼的計算架構非常熟悉 • 能夠完全地掌握二元碼的演算法流程 • 這兩個挑戰將使得系統開發耗費人力與時間,同時所移植的應用程式,也存在許多潛在的錯誤。

  6. 研究問題 • 探討如何針對沒有任何輔助資訊或 metadata 的二元碼,來進行 FPGA 上硬體描述語言的轉譯工作。 • 同時為了充分利用 FPGA 的硬體特性,這個轉譯器將對所分析出來的二元程式碼執行緒,做效能最佳化的平行設計。使轉譯後之FPGA運算核心,能夠得到很高的執行效能。

  7. 系統軟硬體平台 • 硬體平台 • Altera 公司的 DE2 開發實驗板 • 軟體平台 • Quartus II • Metrowerks CodeWarrior for ARM Developer Suite

  8. Binary Code Parsing Part 1 Find basic block Part 2 Verilog code generator Remove data dependency Part 3 Parallel Analyzer Verilog Code 系統實作流程

  9. 實作範例 • 範例 FIR 濾波器的 C 程式碼︰ float FIR( int N, float c[], float x[] ) { int i=0; float f=0; while(i<N){ f = f + c[i]*x[i]; i++;} return f; }

  10. 開始位址 終止位址 巢狀迴圈所屬層級 0x0000001c 0x00000044 2 0x00000000 0x0000004c 1 基本區塊對照表 實作:第一部份 • 編譯完 FIR 濾波器程式碼產生執行檔後,將執行檔反組譯,出現下列二元程式碼︰ • 依迴圈判斷結果將其分割成基本區塊。 • … • 0x0000001c: e1540006 ..T. CMP r4,r6 • 0x00000020: aa000008 .... BGE {pc} + 0x28 ; 0x48 • ... • 0x00000044: eafffff4 .... B {pc} - 0x28 ; 0x1c • … • 依照基本區塊分割,並做第一次的Verilog程式碼翻譯動作。

  11. 實作:第二部份. • 繼續第二階段的 Verilog 程式碼翻譯,流程如下: • 對最外層主程式 .tmp 檔之程式碼進行指令的切割,並逐行放進已定義之陣列。 • 每讀進一行即進行指令之分析。 • 當遇到指令碼 “call funcation: tmpX ”之內容時,即跳入遞迴函式對 X.tmp 檔進行程式碼轉換。 • 步驟2、步驟3持續進行直到未遇到要翻之 .tmp 檔即跳出遞迴 • 跳回最外層主程式 .tmp 檔後,再繼續分析,直到翻完中途可能遇到之其餘 .tmp 檔,當外層主程式亦翻畢後,即完成 Verilog 程式碼的翻譯。

  12. 實作:第三部份 • 完成第二部份的翻譯後,所面臨的問題是資料相依所造成的傳遞延遲問題。為了解決此問題,因此我們必須將不必要的程式碼移除。 • for(i=0; i<50; i=i+1 ) • begin • t0 <= r8[r4]; • t1 <= r7[r4]; • t3 <= t1 * t0; • r9 <= t3; • t2 <= r5; • t4 <= t2 + r9; • r5 <= t4; • r4 <= r4+1; • End • 移除前 • for(i=0; i<50; i=i+1 ) • begin • t0 <= r8[r4]; • t1 <= r7[r4]; • t3 <= t1 * t0; • t4 <=t4 + t3; • r4 <= r4 + 1; • End • 移除後

  13. Cont. • 將不必要的部份去除後,最後即是 Loop unrolling 的動作。 for(i=0; i<50; i=i+1 ) begin t0 <= r8[r4]; t1 <= r7[r4]; t3 <= t1 * t0; tmp0_t0 <= r8[ r4 + 1 ]; tmp0_t1 <= r7[ r4 + 1 ]; tmp0_t3 <= tmp0_t1 * tmp0_t0; t4 <= t4 + t3 + tmp0_t3; r4 <= r4+2; end

  14. 實作:測試結果 • 做 Loop unrolling 前 • 做完 Loop unrolling 後

  15. Cont. • 實作測試結果

  16. 謝謝指教!

More Related