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

16
專專專專專專專 ARM 專 Binary code 專 Verilog code 專專 專專 專專專專專專專專專專 專專專專專專 專專專 專專專專專專專專專專

description

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

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

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

專題成果報告書ARM 的 Binary code 轉 Verilog code 之翻譯器元智大學資訊工程學系

組員︰張立蓉、李佳珉

指導教授︰楊正仁教授

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

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

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

Cont.

• 在此專題計畫中,我們將設計一個程式碼翻譯器– 針對沒有任何輔助資訊的二元碼,轉換成 FPGA 上的硬體描述語言。

– 幫助系統開發工程師能夠迅速地將一些現有的應用軟體轉換到 FPGA 平台上,獲得可重組態硬體加速的效能提昇。

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

研究動機• 若直接使用硬體描述語言撰寫 FPG

A 的 bitstream – 開發人員必須要有不短的撰寫經驗– 其程式設計概念迴異於一般所熟知的程

式設計語言,其學習門檻不低• 為了加速系統開發,會使用一些軟

體工具,將高階語言所撰寫的軟體轉譯成硬體描述語言來進行移植。

• 系統開發者沒有軟體原來的高階語言程式碼,在軟體移植上,必須將其執行檔先進行反組譯,再由開發人員針對這些組合語言進行分析與轉譯。

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

Cont.

• 開發者的兩個挑戰– 需對二元碼的計算架構非常熟悉– 能夠完全地掌握二元碼的演算法流程

• 這兩個挑戰將使得系統開發耗費人力與時間,同時所移植的應用程式,也存在許多潛在的錯誤。

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

研究問題 • 探討如何針對沒有任何輔助資訊或 metadata 的二元碼,來進行 FPGA 上硬體描述語言的轉譯工作。

• 同時為了充分利用 FPGA 的硬體特性,這個轉譯器將對所分析出來的二元程式碼執行緒,做效能最佳化的平行設計。使轉譯後之 FPGA 運算核心,能夠得到很高的執行效能。

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

系統軟硬體平台• 硬體平台

– Altera 公司的 DE2 開發實驗板

• 軟體平台– Quartus II– Metrowerks CodeWarrior for ARM Developer Suite

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

系統實作流程Binary Code

Parsing

Find basic block

Verilog code generator

Remove data dependency

Parallel Analyzer

Verilog Code

Part 1

Part 2

Part 3

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

實作範例• 範例 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;}

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

實作:第一部份• 編譯完 FIR 濾波器程式碼產生執行檔後,

將執行檔反組譯,出現下列二元程式碼︰

• 依迴圈判斷結果將其分割成基本區塊。

…0x0000001c: e1540006 ..T. CMP r4,r60x00000020: aa000008 .... BGE {pc} + 0x28 ; 0x48...0x00000044: eafffff4 .... B {pc} - 0x28 ; 0x1c…

10x0000004c0x00000000

20x000000440x0000001c

巢狀迴圈所屬層級終止位址開始位址

基本區塊對照表• 依照基本區塊分割,並做第一次的Verilog程式碼翻譯動作。

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

實作:第二部份 .• 繼續第二階段的 Verilog 程式碼

翻譯,流程如下:1.對最外層主程式 .tmp 檔之程式碼進

行指令的切割,並逐行放進已定義之陣列。

2.每讀進一行即進行指令之分析。3.當遇到指令碼 “ call funcation: tm

pX ”之內容時,即跳入遞迴函式對 X.tmp 檔進行程式碼轉換。

4.步驟2、步驟3持續進行直到未遇到要翻之 .tmp 檔即跳出遞迴

5.跳回最外層主程式 .tmp 檔後,再繼續分析,直到翻完中途可能遇到之其餘 .tmp 檔,當外層主程式亦翻畢後,即完成 Verilog 程式碼的翻譯。

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

實作:第三部份• 完成第二部份的翻譯後,所面臨的問題是資料相依所造成的傳遞延遲問題。為了解決此問題,因此我們必須將不必要的程式碼移除。

for(i=0; i<50; i=i+1 )begint0 <= 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 )begint0 <= r8[r4];t1 <= r7[r4];t3 <= t1 * t0;

t4 <= t4 + t3;

r4 <= r4 + 1;End

移除後

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

Cont.

• 將不必要的部份去除後,最後即是 Loop unrolling 的動作。

for(i=0; i<50; i=i+1 )begint0 <= 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

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

實作:測試結果• 做 Loop unrolling 前

• 做完 Loop unrolling 後

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

Cont.

• 實作測試結果

Test case

Unrolling展開數FIR濾波器 矩陣

Inner Product

1 270 250

2 150 130

3 110 90

4 90 70

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

謝謝指教 !