• 沒有找到結果。

第四章 智慧型 DMA 控制器與 RISC 處理器的整合

4.1 RISC 處理器

實驗室發展的 RISC 訊號處理器擁有九級管線架構的設計[20][21],為一個 Unit-core 和 Multi-Ram 的處理器 IP[22][23]。當一個指令透過程式計數器

(Program counter)抓取進入處理器內部後,會先對該指令進行解碼,接著到 暫存器提取所需要的資料到 ALU 中執行,最後將結果存回暫存器或記憶體中。周 邊裝置的存取透過智慧型 DMA 來規劃,組譯器及處理器直接支援智慧型 DMA 的設 定及使用[24],周邊裝置(或 IP)可利用標準的 APB 規格掛上匯流排[25],將外 部的取樣訊號透過智慧型 DMA,將資料儲存在內部記憶體,或內部運算的結果送 到周邊裝置上輸出[26]。

4.1.1 RISC 處理器核心

RISC 架構處理器擁有 9 級管線架構,9 級管線包含程式計數與跳躍判斷模 組、指令抓取模組、程式碼記憶體模組、指令預測模組、指令解碼模組、暫存器 模組、及算數邏輯單元模組,以下分別描述其主要的工作簡述如下:

1. PC Counter/Branch Protect:在硬體架構最上層,目的是把程式計數

器加一,並處理跳躍,最後決定程式計數器的值,並送到下一級指令抓 取(Instruction fetch)。

2. Cache:將 PC 位址傳到快取記憶體去抓指令,其中 PC 的位址線為 16-bit,傳回 RISC 指令為 32-bit,快取記憶體控制器架構為三級,因 此若搭配此 RISC 訊號處理器,則總級數為九級。

3. Instruction Fetch:這一級的目的是把程式計數器的值,轉成程式記 憶體的位址,送進下一級的程式記憶體去抓取指令。其中,由於有些指 令在 ALU 級時會需要處理中指令的程式計數器值,所以必須把程式計數 器值一級一級地傳下去,因此,程式計數器值會傳進下一級的暫存器。

在處理跳躍指令時,為了避免浪費跳躍指令發生後一個指令被抓取,設 定兩個訊號做為防止跳躍發生時的指標,用以表示現在的管線是否在 Stall 狀態,決定要不要執行該級動作。

4. Program Memory:將程式記憶體的位址經由硬體最上層的腳位傳到外部 的唯讀記憶體去抓指令,其中位址線為 16-bit,傳回 RISC 指令為 32-bit。

5. Instruction Decoder:這一級的目的是把指令依照對應的指令碼去做 解碼,指令中有兩個來源暫存器的位置,一個目的暫存器的位置。這些 位置可以對下一級的暫存器組取得來源運算元並提供未來 ALU 級寫回 的目的位置。內建兩組處理核心,所以也提供了指令去從兩個處理核心 中互相提取對方暫存器組的資料,方便資料的直接交換。

6. Register File : 處理核心有 32 個通用暫存器。設計有 13 個中斷暫存 器來處理外部中斷,暫存器組為 2 讀 1 寫的格式,負責提供解碼器所解 碼出的來源運算元值,並將 ALU 級算出的目的運算元寫回。在此模組 中,有很多連接 ALU 級模組的輸出信號,目的是把這些 ALU 級要用到的

7. ALU:本級功能是計算出邏輯或運算值,為了 Data forwarding 的實作,

Data memory 及 Write back 這兩級隱含在 ALU 級內。Data forwarding 的機制是利用前面一級一級傳回的信號實作而成,目的是為了減少 RAW hazard。

除了以上基本的管線模組設計外,還有一些特殊硬體設計需求被強調出來 [27],包含以下五種說明:

1. 一個指令週期完成乘加運算。

2. Regular Loop Prediction: 數位訊號處理運算中有很多固定次數迴圈 的運算,利用一個良好的跳躍預測(Branch prediction),使處理器不 會有 Control hazard 造成的不必要 Stall。

3. 良好的 Data Forwarding 機制。

4. Condition Branch:預測採用 Prediction-untaken 方法設計。

4.1.2 RISC 處理器指令集

RISC 處理器指令集共分五大類:資料搬移、算數邏輯運算、跳躍指令、其 他類指令、智慧型 DMAC 控制類,列表如下:

„ 資料搬移指令 :

表 4-1:資料搬移指令列表

Instruction Opcode Example Mode MOVRC 000001 MOV rd,data Direct MOVRR 000010 MOV rd,rs Reg-Reg MOVRM 000011 MOV rd,address Direct MOVMR 000100 MOV address,rs Direct MOVMRR 000101 MOV @rs2,rs Indirect

MOVRRM 000110 MOV rd,@rs Indirect MOVB 101111 MOVB rd,base(rs) Displacement MOVI 110000 MOVI rd,rs1(rs2) Index

MOVRMB 110001 MOV rd,address Direct-Second Ram MOVMRB 110010 MOV address,rs Direct-Second Ram MOVMRRB 110011 MOV @rs2,rs Indirect-

Second Ram MOVRRMB 110100 MOV rd,@rs Indirect-

Second Ram

RISC 處理器共提供 Direct、Reg to Reg、Indirect、Displacement (base add)、Index 五大類的定址模式。

„ 算數與邏輯運算指令 :

表 4-2:算數邏輯運算指令列表 Instruction Opcode Example

ADDRR 001000 ADD rd,rs1,rs2 SUBRR 001010 SUB rd,rs1,rs2 MULRR 001100 MUL rd,rs1,rs2 ADDRC 000111 ADD rd,data SUBRC 001001 SUB rd,data MULRC 001011 MUL rd,data MACR 100111 MAC rd,rs1,rs2 MACC 110001 MAC rd,rs1,data ANDRR 001110 AND rd,rs1,rs2

XORRR 010000 XOR rd,rs1,rs2 INVR 010001 INV rd,rs

„ 跳躍指令 :

表 4-3:跳躍指令列表 Instruction Opcode Example JMP 010010 JMP address

JMPR 010011 JMP @rs

JBE 010100 JBE rs1,address JNE 010101 JNE rs1,address JMB 010110 JMB rs1,address JLB 010111 JLB rs1,address JBER 011000 JBER rs1,rs2,address JNER 011001 JNBR rs1,rs2,address JMBR 011010 JMBR rs1,rs2,address JLBR 011011 JLBR rs1,rs2,address CALL 100011 CALL address

RET 011110 RET

Address 的部分也可以是 Label,組譯器會自動轉換成對應的位址。

„ 其他指令:

表 4-4:其他指令列表 Instruction Opcode Example

SET 011100 SET A,rs

INTOK 011101 INTOK

SHR 100000 SHR rs

SHL 100001 SHL rs

Instruction Opcode Example

ENDC 011111 ENDC

SET 指令是當 RISC 處理器沒有連接匯流排時,利用這指令可以設定兩個 16-bit 的 I/O port ,與外界溝通;INTOK 是處理軟體中斷的指令,利用這指令 可發出軟體中斷;SHR 將 rs 向右移一位元;SHL 將 rs 向左移一位元。

„ 智慧型 DMA 控制相關指令 :

表 4-5:智慧型 DMAC 控制指令列表 Instruction Opcode Example SDMAD 100100 SDMAD data SDMAR 100101 SDMAR rs

GDMA 100110 GDMA rd

DMAOK 101001 DMAOK

GDMAR 101110 GDMAR rd,address

相關文件