• 沒有找到結果。

在本節,只簡略介紹指令集的所有指令及其支援的運算功能,至於指令 詳細的格式及編碼(opcode)將於附錄中補述。指令結構為四路 VLIW (4 way VLIW),每個時脈都會發出以下四種運算單元的指令:

<<N ALU

Register File

Multiplier Register File

IO Register File Shifter Register File

Data Memory 4 x 4

Crossbar Router

Shrunk aligner

Shrunk normalizer

Distributed register files &

crossbar router

Functional units

3.2.1. 控制單元:

控制單元欄位的長度為 15 位元,同時控制 load/store 單元和 GPR 更新。

在 Load/Store 單元中可以使用的功能有:

„ LW:load word

指令格式為:LW Rs [Z][S shift]*

‹ Rs

當 Rs 為 R1~R8 或 R11~R14 時 為 間 接 定 址 (register indirect addressing),指令會把 data_memory(Rs)的值送到 Xbar。

當 Rs為 R9 或 R10 時為索引定址或自動索引定址,指令會 把 data_memory(Rs+ (counter << shift))的值送到 Xbar。當 使用自動索引定址時 counter 在定址後會自動增加。

當 Rs為 R0 時不動作。

‹ Z:重置計數器,計數器會在下個時脈被重置為 0。

‹ S shift:當使用 S 參數時,會把位移暫存器的值設定為為 shift 的值。

„ SW:store word

指令格式為:SW Rs Rt

‹ Rs Rt

Rs的定址模式和 LW 相同,定址時會把 Rt的值寫入定址的 位址,同時會把 Rt的值送到 Xbar。

和控制單元同一欄位的還有控制其專屬暫存器更新的指令及流程控制 的指令:

„ register update:

指令格式為:Os Rs

指示 Xbar 選擇一個運算結果更新(update) Rs的內容。

„ branch:

指令格式為:Os [J | JZ | JNZ | JC]

‹ J,JZ,JNZ,JC: 為程式流程的控制,自前至後分別表是 branch, branch if zero, branch if NOT zero, branch if carry。

這裡所使用的 zero 或 carry 的條件判斷均使用 ALU 單元的運 算結果來做依據。會把 R15(PC)的值更新為 Xbar 選擇的結果。

3.2.2. ALU 單元:

本欄位長度為 22 位元,且支援 SFP 運算。當運算元中的參數為設為 0 時,(如:(+,000))就和一般整數的運算的加減法相同。因此在指令的設 計中運算元並不特別指定是整數運算或純小數運算,只由運算元的參數值 來做決定。功能上,ALU 可使用加減法及位元邏輯運算:

„ 加、減法:把兩個運算子相加(減)送到 xbar,指令格式為:

[ADI|SUI] Imm ARx2 parameter [ADD|SUB] ARx1 ARx2 parameter

[ADL|SUL] Os AR ARx1 ARx2 parameter

*[ ] 表示可省略的參數或指令。

‹ ARx1 ARx2

可選用 AR0~AR15、及 R0,Ao,Mo,So,Io 等 21 種數值。

‹ Imm:immediate value

‹ parameter:有 3 個位元,為 2.4 節中為 SFP 定義的加法運算 元參數。

‹ [ADL|SUL]:在做加(減)法同時更新暫存器檔的值

指示 Xbar 選擇一個運算結果更新 AR 內容,其中 AR 可指 定 AR0~AR15 等 16 個暫存器。

3.2.3. 乘法器單元:

本欄位長度為 12 位元,可控制乘法器及乘法器的 DRF,但是因為欄位 長度的限制,在此欄位中只能控制運算單元或 DRF 其中一個的動作。即在 同一個時脈中,只能做一次乘法或更新一次乘法暫存器,兩者無法並行。

指令格式為:

„ 乘法:支援整數與純小數的有號數乘法,把兩個運算子相乘的結果 送到 Xbar。指令格式為:

[M|fM] MRx1 parameter MRx2

‹ [M|fM] parameter:M 為整數乘法;fM 為純小數乘法。1 位元 的 parameter,為 2.4 節中為 SFP 定義的乘法運算元參數。

‹ MRx1 MRx2

可選用 MR0~MR15、及 R0,Ao,Mo,So,Io 等 21 種數值。

„ 暫存器更新的指令格式為:

[LM Os|uM] MR

‹ LM 指令為更新暫存器,指令會用 Os 選擇的結果更新 MR,其 中 MR 可指定 MR0~MR15 等 16 個暫存器。

‹ uM:本指令不做乘法亦不做暫存器更新,只會把乘法暫存器 MR 的值直接送到 Xbar。

3.2.4. 位移器單元:

本欄位長度為 15 位元,功能為被動式的位移的功能。

„ 位移器的運算子一個為暫存器,另一個為一個立即值(immediate value),會把暫存器的值依立即值做位移的動作,指令格式為:

[S|SLA|SLM|SLI] SRx1 Imm SR

‹ [S|SLA|SLM|SLI] S 為只做位移,不更新暫存器;SLA,SLM,

SLI 除位移外,還會把 Ao,Mo 和 Io 的值更新到 SR 的暫存器。

‹ SRx1

可選用 SR0~SR15、及 R0,Ao,Mo,So,Io 等 21 種數值。

全部的運算單元的功能整理如下表 3-1。整體來看運算單位的功能並無 對 DSP 運算做任何特別的設計,但是此 DSP 處理器適合於 DSP 計算的重點 在於 DSP 運算路徑的合成,而非運算單元的功能本身。在下一節中,將以 實例來解說怎麼將 SIU 的觀念和這些運算單元整合成 DSP 的計算路徑。

表 3-1 instruction summary

相關文件