• 沒有找到結果。

Hardware Native Interface 之實作

第三章 Java 字串處理加速器設計

3.5 Hardware Native Interface

3.5.1 Hardware Native Interface 之實作

類別方法的呼叫是透過 invokevirtual 的指令碼,若是靜態方法的呼叫則使用 invokestatic。invoke 類型指令會啟動動態解析器,一開始動態解析器停留在 normal 狀態等待管線下的命令。一旦管線的 decode stage 解碼發現有一 j-code 需要動態 解析,將運算元及旗號傳遞給動態解析器,動態解析器根據 decode stage 給的旗 號來決定工作內容。一旦啟動後,動態解析器便開始解析 Class Symbol Table 與 Cross Reference Table 中的內容。Class Symbol Table 之 entry 編號是根據 bytecode 之 operand。Class Symbol Table 中的 entry 為一個 Cross Reference Table 的索引,

透過這個索引,動態解析器可以取得每個 method 的 method info。如圖 10 所示,

method info 之格式包含了兩個 word。non-native method 之 method info 包含了類 別 ID,實作類別 ID,參數個數,method ID 與 method list 之下一個 node 索引。

Dynamic Symbol Resolution Unit

Method Area

Bytecode Execution

Engine

Register File

Hardware Method Accelerator

IPC

RISC Core

Method ID Class ID Hardware Method ID ISR ID

arguments

PLB BUS Java bytecode

25

而 native method 之 method info 包含了類別 ID,參數個數,回傳值大小與 native method ID。8 位元的 native method ID 是根據最高有效位來判斷此 native method 是由 RISC-core 實作與否。也就是說,如果 native method ID 小於 128,此 method 便是 RISC-core 實作;若大於等於 128,此 method 是由 hardwired 電路邏輯或加 速器實作。此外,若 native method 為 RISC-core 實作,native method ID 為 ISR routine 之 ID;若為 hardware native,此 ID 代表 hardware native 之編號。

圖 10 method info 訪問過程與 method info 格式

動態解析器過程如圖 11 所示。Get_L1_XRT_ref 狀態是根據 decode stage 傳送 過來的運算原來決定讀取哪一個 Class Symbol Table 項目,而從 Class Symbol Table 讀到的內容會是一個 Cross Reference Table 的位址。L1_XRT_Access 狀態是從第 1 級的 Cross Reference Table 中讀取方法資訊。Class_Parsing 狀態是根據 Cross Reference Table 讀到的方法資訊來判斷此類別是否被解析過,若無則進入此狀態 發送 interrupt 及 ISR ID 給 RISC 核心,請求類別的解析服務。Native_start 狀態根 據方法資訊來決定要如何調整堆疊上的引數。Native_HW 狀態觸發及等待硬體方 Class ID Method ID

Next node ptr arg size

Class Symbol Table LV1 XRT

Class ID

Next node ptr flags

0xFF arg size ret size native mthd ID reserved

normal method info

native method info

26

圖 11 Hardware native method 在動態解析器內之狀態圖

承襲 IPC 介面實作原生方法之方式,我們建立了一個提供 JAIP 使用硬體方 法加速器介面,如下圖 12。其中 IPC 介面和硬體加速器的引數、回傳值的傳遞是 透過專用暫存器和第一級堆疊。由於第二級堆疊是以 BRAM 方式實作,若利用第 二級堆疊傳遞引數會使得每一個引數之讀取都得花費 1 個 cycle 時間。而第一級 堆疊目前只提供 3 個 32 bit 之暫存器,所以在林的研究中[20],提出以 5 個專用的 暫存器來傳遞引數。Exception 方面,hardware native 產生的 exception 是由 JAIP 上之 Exception Handling Unit 來處理。此電路邏輯是透過 exception ID 找尋 exception lookup table 上對應的 exception handler,並將 exception handler 載入 Method Area 並在 BEE 上執行。其 exception 物件產生過程不像 bytecode athrow 一 樣由 new 指令產生,而是給 Exception Handling Unit 一個 exception ID,由 Exception Handling Unit 自行產生例外物件。回傳值方面,部分 hardware native method 是有 回傳值的,hardware native 透過 JAIP 內部 memory access logic 對 first-level stack 進行 push 動作。也就是說,在不需要使用 bus 情況下,透過 local address 對 stack 進行 read-write 動作。而 second-level stack 上之參數之 pop 動作,是由動態解析器 根據解析出的參數個數及回傳值大小來進行的。

27

圖 12 Hardware Native Interface(i)

圖 13 Hardware Native Interface(ii) 2nd-level

1st-level Stack

argn-4

Hardware Native Interface

HW_native_xcptn_ID

Hardware Native Interface

Exception Handling Unit

ext_push

1st-level Stack

28