第三章 arm cpu 規劃設計rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/98955/3/n...第二節...

38
- 12 - 第三章 ARM CPU 規劃設計 第一節 ARM CPU 相關知識 ARM7 Advanced RISC Machine(ARM)的家族系列晶片之一,以 ARMv4T 架構為基礎的一個處理器,也是一個典型的 32 位元 RISC Reduced Instruction Set Computer)嵌入式微處理器,低耗電的特點與 少量的邏輯閘需求,ARM7 處理器本身體積很小,容易整合到晶片中, 產業界廣泛的將使用在手持式設備以及嵌入式系統中,ARM7 是使用三 階管線(3-stage pipeline)的方式,來對指令作控制,三級分別指令讀取 Fetch)、指令解碼(Decoder)、指令執行(Execute),ARM7 內部架構 包含以下各個部分所組成[26]132 位元的算術運算邏輯單元含有基本的 32 位元加法器。 232 × 32 的乘法器、移位器(Barry Shifter)、位址累加器。 332 位元暫存器則組包含位址暫存器、資料暫存器、可程式控 制的 31 32 位元暫存器組與 6 個狀態暫存器。 ARM7 對於記憶體內的資料存取是以 Byte 為單位,由 0 開始線性向 上存取,例如儲存第一個字元(word)為 Byte0~Byte3,第二個字元為 Byte4~Byte7 依序類推, ARM7 記憶體格式可分為 Big endian 格式與 Little endian 格式,在 Big endian 格式中,一個 word 裡的最大有效位元組會儲 存到記憶體的最低的位元組裡,最小有效位元組會儲存到記憶體的最高 位元組裡,反之,在 Little endian 格式中,一個 word 裡的最小有效位元 組會儲存到記憶體的最低的位元組裡,最大有效位元組會儲存到記憶體 的最高位元組裡。

Upload: others

Post on 02-Feb-2021

6 views

Category:

Documents


0 download

TRANSCRIPT

  • - 12 -

    第三章 ARM CPU 規劃設計

    第一節 ARM CPU 相關知識

    ARM7 是 Advanced RISC Machine(ARM)的家族系列晶片之一,以

    ARMv4T 架構為基礎的一個處理器,也是一個典型的 32 位元 RISC

    (Reduced Instruction Set Computer)嵌入式微處理器,低耗電的特點與

    少量的邏輯閘需求,ARM7 處理器本身體積很小,容易整合到晶片中,

    產業界廣泛的將使用在手持式設備以及嵌入式系統中,ARM7 是使用三

    階管線(3-stage pipeline)的方式,來對指令作控制,三級分別指令讀取

    (Fetch)、指令解碼(Decoder)、指令執行(Execute),ARM7 內部架構

    包含以下各個部分所組成[26]:

    (1)32 位元的算術運算邏輯單元含有基本的 32 位元加法器。

    (2)32 × 32 的乘法器、移位器(Barry Shifter)、位址累加器。

    (3)32 位元暫存器則組包含位址暫存器、資料暫存器、可程式控

    制的 31 個 32 位元暫存器組與 6 個狀態暫存器。

    ARM7 對於記憶體內的資料存取是以 Byte 為單位,由 0 開始線性向

    上存取,例如儲存第一個字元(word)為 Byte0~Byte3,第二個字元為

    Byte4~Byte7依序類推,ARM7記憶體格式可分為Big endian格式與Little

    endian 格式,在 Big endian 格式中,一個 word 裡的最大有效位元組會儲

    存到記憶體的最低的位元組裡,最小有效位元組會儲存到記憶體的最高

    位元組裡,反之,在 Little endian 格式中,一個 word 裡的最小有效位元

    組會儲存到記憶體的最低的位元組裡,最大有效位元組會儲存到記憶體

    的最高位元組裡。

  • - 13 -

    圖 3-1 Big-endian 格式

    圖 3-2 Little-endian 格式

    ARM7 處理器提供了 37 個暫存器,包含 31 個一般暫存器和 6 個狀

    態暫存器,這些暫存器不會同時被使用,依據處理器的狀態與操作模式

    來決定需使用哪些暫存器,ARM 狀態中,每個操作模式都有 16 個一般

    暫存器與 1~2 個狀態暫存器,User Mode / System Mode 中內含 16 個直

    接存取暫存器(R0~R15),R0~R14 為一般功能暫存器,R15 為程式計數器

    (Program Counter, PC)用來計數執行程式的位址,R14 除了當一般功能

    暫存器外,如果是執行“BL"(Branch with Link)指令時,R14當作副

    程式的連結暫存器(Subroutine Link Register),用來儲存 R15的值,可使

    程式在執行完副程式畢後可以再回到原來的位址,繼續往下執行程式。

    除了以上暫存器外還有 R16 程式現況暫存器(CPSR:Current Program

    Status Register)與 R17程式狀態保存暫存器(SPSR:Saved Program Status

    Register),R16 內含狀態標與目前模式位元,R17 用來儲存狀態旗標與目

    前模式位元,即當切換模式時,用來備份 CPSR 的內含值。

    7

    3

    6

    2

    5

    1

    4

    0

    11 10 9 8

    0

    4

    8

    Address

    01531 16Word Address

    4

    0

    5

    1

    6

    2

    7

    3

    8 9 10 11

    0

    4

    8

    Address

    01531 16Word Address

  • - 14 -

    圖 3-3 ARM 狀態下暫存器組

    ARM7 的指令集可分類為:

    (1) 分支指令(Branch Instructions)

    (2) 資料處理指令(Data-processing Instructions)

    (3) 載入/存回指令(Load / Store Instructions)

    (4) 程式狀態暫存器轉換指令(Program Status Register Transfer

    Instructions)

    (5) 協同處理器指令(Coprocessor Instructions)

    (6) 例外指令(Exception Instructions)

    表 3-1 ARM7 指令集

    Mnemonic Instruction ActionAND AND Rd:=Rn AND Op2EOR Exclusive OR Rd:=Rn OR Op2SUB Subtract Rd:=Rn-Op2RSB Reverse Subtract Rd:= Op2-RnADD Add Rd:= Rn+Op2ADC Add with carry Rd:= Rn+Op2+carrySBC Subtract with carry Rd:= Rn-Op2-1+carryRSC Reverse Subtract with carry Rd:= Op2-Rn-1+carry

    R0R1R2R3R4R5R6R7R8R9R10R11R12R13R14

    R15(PC)

    CPSR

    User /System ModeR0R1R2R3R4R5R6R7

    R8_fiqR9_fiqR10_fiqR11_fiqR12_fiqR13_fiqR14_fiqR15(PC)

    CPSR

    FIQ ModeR0R1R2R3R4R5R6R7R8R9R10R11R12

    R13_svcR14_svcR15(PC)

    CPSR

    R0R1R2R3R4R5R6R7R8R9

    R10R11R12

    R13_abtR14_abtR15(PC)

    CPSR

    R0R1R2R3R4R5R6R7R8R9R10R11R12

    R13_irqR14_irqR15(PC)

    CPSR

    R0R1R2R3R4R5R6R7R8R9R10R11R12

    R13_undR14_undR15(PC)

    CPSR

    SVC Mode About Mode IRQ Mode Undefinded Mode

    SPSR_fiq SPSR_svc SPSR_abt SPSR_irq SPSR_und

  • - 15 -

    TST Test bits CPSR flags:= Rn EOR Op2TEQ Test bitwise equality CPSR flags:= Rn AND Op2CMP Compare CPSR flags:= Rn-Op2CMN Compare Negative CPSR flags:= Rn+Op2ORR OR Rd:= Rn OR Op2MOV Move Register or constant Rd:= Op2BIC Bit Clear Rd:= Rn AND NOT Op2MVN Move negative register Rd:= 0xFFFFFFFF EOR Op2MUL Multiply Rd:= Rm*RsMLA Multiply Accumulate Rd:= (Rm*Rs)+RnLDR Load register form memory Rd:= (address)LDM Load multiple register Stack manipulation (Pop)STR Store register to memory := RdSTM Store Multiple Stack manipulation (Push)B Branch R15:= addressBL Branch with link R14:= R15, R15:=addressBX Branch and Exchange R15:= Rn, T bit: Rn[0]MRS Move PSR status/flags to register Rn:= PSRMSR Move register to PSR status/flags PSR:= RmCDP Coprocessor Data Processing (Coprocessor-specific)

    MCR Move CPU register to coprocessorregistercRn:= rRn {cRm}

    MRC Move form coprocessor register toCPU registerRn:= cRn {cRm}

    LDC Load coprocessor form memory Coprocessor load

    STC Store coprocessor register tomemory:= Rd

    SWI Software Interrupt OS callSWP Software register with meory Rd:= [Rn], [Rn]:=Rm

    有條件執行是 ARM 的指令特色之一,在 ARM 模式中,所有的指

    令都會附帶有條件的執行,只有指定的條件滿足 CPSR 中的狀態旗標,

    指令才會被執行,否則程式順序會忽略該指令,不會執行。

    表 3-2 ARM7 條件碼

    Code Suffix Flags Meaning0000 EQ Z set equal0001 NE Z clear not equal0010 CS C set unsigned higher or same0011 CC C clear unsigned lower0100 MI N set negative0101 PL N clear positive or zero0110 VS V set overflow0111 VC V clear not overflow1000 HI C set and Z clear unsigned lower or same

  • - 16 -

    1001 LS C clear and Z set unsigned lower1010 GE N equals V greater or equal1011 LT N not equal to V less than1100 GT Z clear and (N equals V) greater than1101 LE Z set OR (N not equals to V) less than or equal1110 AL (ignored) always

    第二節 ARM CPU 設計

    壹、ARM CPU 模組架構規劃

    本研究的 ARM CPU 是以 VHDL 硬體描述語言作設計,採用 Top

    Down Modeling 設計,把整個 ARM CPU 電路由上而下分割為多個功能

    不同的模組,如圖 3-4 所示。

    圖 3-4 ARM CPU 模組架構圖

    32 bits ARM CPU 電路模組包含資料路徑(Data path)、控制單元

    (Control Unit)、資料處理單元(Data Processing Unit, DPU)、記憶體單元

    (Memory Unit)、指令暫存器單元(Instruction Register)、暫存器組(Register

    Bank)、浮點運算單元(Floating Point Unit)、算術邏輯單元(ALU)、乘

    32-Bits ARM CPU

    Data_Path

    DataProcessing Unit

    Control Unit

    ALUBarrelShifter

    4-Mem.xcoMULT

    InstructionRegister

    MemoryRegisterBank

    Floating PointUnit

  • - 17 -

    法器(multiplier)、移位器(Barry Shifter),各模組定義如下:

    一、資料處理單元(Data Processing Unit, DPU):

    DPU 模組內含 ALU、乘法器、移位器,根據指令集設計,具有

    16 種資料處理指令,含加減運算、邏輯運算、比較運算、搬移

    (Move)與測試(Test)運算。

    二、指令暫存器單元(Instruction Register):

    暫存由記憶體取出的指令,將指令的每個位元所代表的意義,依

    下級運算所需將指令依指令格式分別送至下級模組,構成的基本

    元件為 D 型正反器。

    三、記憶體單元(Memory Unit):

    記憶體為指令及資料儲存所在,可以選擇以位元組或字元組的方

    式儲存或輸出,本單元中由四個 256 × 8 Bits 大小之 Block RAM

    所組成,Block RAM 因利用 Xilinx ISE 中之 Core Generator 產生,

    故有四個 Mem.xco 檔。

    四、暫存器組(Register Bank,RGB):

    ARM CPU 主要之暫存器組,包含 16 個 32 位元的一般暫存器

    (R0~R15),其中 R15為程式計數器(PC)。

    五、浮點運算單元(Floating Point Unit):

    支援浮點運算指令,含浮點加法、減法、乘法、除法運算。

    貳、實作指令集

    本研究中實作的指令集包含資料處理指令 (Data-processing

    instruction)、分支指令(branch instruction)、載入/存回指令(Load/store

    Instruction)、交換指令(Swap memory and register instructions)、浮點

    運算指令(Floating-point Instruction)共 33 個指令,主要參考 ARM 指

    令集編碼與設定格式去作設計,實作指令表如表所示。

  • - 18 -

    表 3-3 實作指令集

    Mnemonic Instruction ActionAND AND Rd:=Rn AND Op2EOR Exclusive OR Rd:=Rn OR Op2SUB Subtract Rd:=Rn-Op2RSB Reverse Subtract Rd:= Op2-RnADD Add Rd:= Rn+Op2ADC Add with carry Rd:= Rn+Op2+carrySBC Subtract with carry Rd:= Rn-Op2-1+carryRSC Reverse Subtract with carry Rd:= Op2-Rn-1+carryTST Test bits CPSR flags:= Rn EOR Op2TEQ Test bitwise equality CPSR flags:= Rn AND Op2CMP Compare CPSR flags:= Rn-Op2CMN Compare Negative CPSR flags:= Rn+Op2ORR OR Rd:= Rn OR Op2MOV Move Register or constant Rd:= Op2BIC Bit Clear Rd:= Rn AND NOT Op2MVN Move negative register Rd:= 0xFFFFFFFF EOR Op2MUL Multiply Rd:= Rm*RsMLA Multiply Accumulate Rd:= (Rm*Rs)+RnUMULL Unsigned multiply long RdHi:RdLo:=Rm*RsUMLAL Unsigned multiply-accumulate long RdHi:RdLo=Rm*Rs + RdHi:RdLoSMULL Signed multiply long RdHi:RdLo:=Rm*RsSMLAL Signed multiply-accumulate long RdHi:RdLo=Rm*Rs + RdHi:RdLoLDR Load register form memory Rd:= (address)LDM Load multiple register Stack manipulation (Pop)STR Store register to memory := RdSTM Store Multiple Stack manipulation (Push)SWP Software register with meory Rd:= [Rn], [Rn]:=RmB Branch R15:= addressBL Branch with link R14:= R15, R15:=addressFADD Floating-point ADD Rd:= Rn+RmFSUB Floating-point SUB Rd:= Rn-RmFMUL Floating-point MUL Rd:= Rn*RmFDIV Floating-point DIV Rd:= Rn/Rm

    參、Data Processing Unit (DPU) 設計

    由第一節介紹得知,ARM 所有的指令都會附帶有條件的執行,只有

    指定的條件滿足 CPSR 中的狀態旗標,指令才會被執行,否則程式順序

    會忽略該指令,不會執行。設計在 DPU 中的指令可分為 Data Processing

  • - 19 -

    指令(執行算術邏輯運算)、Multiply 指令(執行乘法運算)兩大類,指

    令格式與定義如下:

    一、 Data Processing 指令:

    Data Processing 指令主要執行一個或兩個運算元作指定的算

    術或邏輯運算,來獲得一個結果並將運算完的結果存入目的暫存器

    (Rd)中,其中第一個運算元固定為暫存器(Rn),第二個運算元

    可以是另一個已經過移位之暫存器(Rm)的內含值,或是經過旋轉

    右移的 8 位元立即值,此兩種情形的選擇可由指令中第 25 個位元來

    決定的。Data Processing 指令格式與定義如下圖 3-5 所示:

    圖 3-5 Data Processing 指令之格式

    destination registerfirst operand registerset condition codes

    125 11 8

    operand2RdRnS#0 0cond31 28 27 26 25 24 2223 2021 19 16 15 12 11 0

    opcode

    arithmetic/logic function

    025

    #shift Sh 0 Rm11 7 6 5 4 3 0

    Rs Sh 1 Rm11 8 6 5 4 3 0

    07

    7 0

    8-bit immediate#rot

    immediate alignment

    immediate shift length

    shift typesecond operand register

    register shift length

  • - 20 -

    Data Processing 指令的形式只要有 16 種如下表 3-3 所示:

    表 3-4 Data Processing 指令之種類

    CPSR 暫存器裡面的旗標值可由指令中第 20 個位元來決定是否

    根據指令執行後的結果來進行更新或保留,TST、TEQ、CMP、CMN

    不需設定第 20 個位元,因為此四個指令執行運算完的結果並不會儲

    存資料到目的暫存器,純粹作測試用,待指令執行完畢後,會自動

    更新 CPSR 暫存器裡面的旗標值,所以此四個指令裡的第 20 位元會

    自動設定為“1”。當第二個運算元需要進行移位時,可由指令的第 6

    和第 5 個位元決定移位的種類(00:邏輯左移,01:邏輯右移,10:

    算術右移,11:旋轉右移),至於移位的數目可由指令的第 7 至第

    11 位元之值決定或是由另一個移位暫存器(RS)的最低一個位元組

    (Byte)來決定。

    二、 Multiply and Multiply Long 指令

    乘法指令只要分為 Multiply and Multiply Long 兩大類,主要

    是執行 32×32bit 的乘法,來獲得一個 64 位元的乘積,此兩類主要

    Opcode Mnemonic Meaning Action0000 AND Logical bit-wise AND Rd := Rn AND Op20001 EOR Logical bit-wise exclusive OR Rd := Rn EOR Op20010 SUB Subtract Rd := Rn - Op20011 RSB Reverse subtract Rd := Op2 - Rn0100 ADD Add Rd := Rn + Op20101 ADC Add with carry Rd := Rn + Op2 + C0110 SBC Subtract with carry Rd := Rn - Op2 + C - 10111 RSC Reverse subtract with carry Rd := Op2 - Rn + C - 11000 TST Test Scc on Rn AND Op21001 TEQ Test equivalence Scc on Rn EOR Op21010 CMP Compare Scc on Rn - Op21011 CMN Compare negated Scc on Rn + Op21100 ORR Logical bit-wise OR Rd := Rn OR Op21101 MOV Move Rd := Op21110 BIC Bit clear Rd := Rn AND NOT Op21111 MVN Move negated Rd := NOT Op2

  • - 21 -

    的差異是在於運算結果的儲存格式,Multiply 指令運算結果的儲存

    格式是將 64 位元乘積的最低 32 位元儲存到目的暫存器(Rd),而

    Multiply Long指令運算結果的儲存格式是將64位元乘積分成兩個

    32 位元,分別儲存於兩個目的暫存器(RdHi、RdLo)中,Multiply

    Long 指令指令格式如圖 3-7 所示:

    圖 3-7 Multiply and Multiply Long 指令格式

    Multiply and Multiply Long 此兩大類指令可細分為以下六個指令如表

    3-5 所示:

    表 3-5 Multiply and Multiply Long 指令運算種類

    Opcode

    [23:21]Mnemonic Meaning Action

    000 MUL Multiply(32-bit result) Rd:=(Rm*Rs)[31:0]

    001 MLA Multiply-accumulate(32-bit result) Rd:=(Rm*Rs+Rn)[31:0]

    100 UMULL Unsigned multiply long RdHi:RdLo:=Rm*Rs

    101 UMLAL Unsigned multiply-accumulate long RdHi:RdLo=Rm*Rs+ RdHi:RdLo

    110 SMULL signed multiply long RdHi:RdLo:=Rm*Rs

    111 SMLAL signed multiply-accumulate long RdHi:RdLo=Rm*Rs+ RdHi:RdLo

    其中MLA 運算結果還要再加上暫存器Rn的內含值(32位元)

    後,再將結果中最低 32 位元儲存到目的暫存器(Rd)中,UMULL、

    SMULL 指令運算結果的儲存格式是將 64 位元乘積分成兩個 32

    位元,分別儲存於兩個目的暫存器(RdHi、RdLo)中,UMLAL、

    SMLAL 指令結果還要再加上一個 64 位元的數值,產生一個 64

    位元的結果,此 64 位元的數值中最低 32 位元由 RdLo 暫存器提

    Rd/RdHiS0 0 0 0cond31 28 27 24 23 2021 19 16

    mul Rs RmRn/RdLo 1 0 0 13 07 411 815 12

  • - 22 -

    供,最高 32 位元由 RdHi 暫存器提供,最後運算結果的最低 32

    位元會存入 RdLo 暫存器,最高 32 位元會存入 RdHi 暫存器中。

    三、 Data Processing Unit (DPU) 內部電路架構

    DPU 電路依據上述介紹的指令格來設計,內部電路包含算術

    邏輯單元(ALU)、移位器(Barrel Shifter, BSH)、乘法器(Multiply,

    MPY)三個部分,利用算術邏輯單元(ALU)來執行算術與邏輯

    運算,具 16 種運算,由 Opcode[24:21]來決定執行哪一種運算,

    利用移位器來執行運算元的位移,具 5 種位移方式並由指令第 6

    ~5 位元來決定位移方式,乘法器用來執行 32×32bits 的乘法運

    算,具 6 種乘法指令,由 Opcode[23:31]來決定使用哪一種乘法指

    令,DPU 電路設計,模組設計順序為 ALU、移位器(Barrel Shifter)、

    乘法器,三個模組皆完成功能模擬與測試後,再將此三個模組組

    合成一個模組即為 DPU 電路,在進行完整功能模擬與測試正確

    後,及完成 DPU 電路。如圖 3-8 為 DPU 之規劃示意圖,Rn、Rs

    及 Rm 是指由 Register Banks 提供的運算資料,在 Data Processing

    指令中 Rn 之值與指令 I[7:0]位移後之值做算數或邏輯運算,經

    由 Dpu_out 輸出,圖 3-9 為 DPU 內部實際的架構圖。

    圖 3-8 DPU 之規劃示意圖

    DPU

    Rs

    Rm

    Rn

    OthersInstructionDecoder

    DPU_out

  • - 23 -

    圖 3-9 DPU 內部實際的架構圖

    MPY

    A B

    EN

    M[63:32] M[31:0]

    ml

    BSHE1 1 0

    I25 0 1

    SHIFT

    OP

    O-EXT

    1 0

    I[11:7] (imm_shift_len)

    mpy 1 0

    1 0

    ALU

    mpyalu

    (alu_ctrl)

    I20NZCVOP

    EN

    I[24:21] (alu_op)

    cond I[31:28]

    R(RS) R(RM)

    I[6:5]

    I25(imm_operand)

    I[11:8]

    RS[3:0]

    I4 (imm_rs_bit) 1 0

    1

    0

    I25

    “11"

    cond

    0123....

    15

    .

    .

    .

    .

    Latch

    I[24:21]

    I27 I26OP I[31:28]

    Mlu_opI[23:21](mul_op)

    mpy

    0123456

    ml

    R(RN)

    I[7:0] (imm)

    AL[31:0]

    mul_op(2)

    Zero_ext_out

    mux_shift_in

    s_shift_out

    s_shift_type

    s_shift_count

    imm_rs_out

    max_alu_in2max_alu_in1

    mult_shift

    max_mult_out

    s_mult_out

    max_mult_out_bit

  • - 24 -

    肆、Memory 設計

    記憶體是儲存程式指令與資料的地方,提供使用者暫時或永久儲存

    大量的二進位資訊之用。這些二進位資訊必須能由記憶體被取出,送到

    指令指定的暫存器或其他邏輯電路所組合而成的硬體單元中,待處理完

    畢後再將結果送回原來的記憶體或其他的記憶裝置儲存。本論文的記憶

    體採用 ARM 中 Little-Endian 格式,記憶體中 32 位元的指令與資料存取

    方式,是由四個 256 × 8 Bits(約 8k bits)大小之 Block RAM 來進行處理,

    記憶體規劃架構示意圖,如圖 3-10 所示。

    圖 3-10 Memory 之規劃示意圖

    圖 3-10 中 ram_addr[9:0]為記憶體 address bus,用來選擇資料儲存或

    讀出之記憶體位址,當 ram_stroe=1,執行資料寫入, 反之,當

    ram_store=0,為記憶體資料輸出狀態,若 ram_sb=1,執行 Byte 運算、

    ram_sb=0,執行 Word 運算。ram_din[31:0]、ram_dout [31:0]為記憶體資

    料輸入、輸出匯流排。由於每 8 個位元資料被視為一個位址,所以 ram

    addr[1:0]用來指單筆 8 位元資料的位址,圖 3-11 為記憶體電路架構圖。

    ran_addr[9:0]MEM32

    ram_dout[31:0]

    ram_sbram_store

    ram_din[31:0]

  • - 25 -

    圖 3-11 記憶體電路實際架構圖

    RAM3 RAM0RAM1RAM2

    s_ram_dout[7:0]

    S1S0

    s_ram_dout [31:0]

    ram_we

    31 8 7 0

    ram_dout [31:0]

    byte_dout [31:0]

    s_ram_dout[15:8]s_ram_dout[23:16]s_ram_dout[31:24]

    ram_addr(1)

    ram_addr(0)

    ram_addr(1)

    ram_addr(0)

    000000000000000000000000

    Mux

    Mux

    01

    ram_din[16:23]01

    ram_din[24:31]

    ram_din[7:0]

    01

    ram_din[15:8]

    ram_sb ram_we ram_we ram_we

    ram_store

    ram_sb

    ram_sb ram_sb

    ram_sb

    ram_din[7:0]

    ram_din[7:0]

    ram_din[7:0]

    ram_din ram_din ram_din ram_din

    ram_addr ram_addr ram_addr ram_addr

    ram_addr[9:2] ram_addr[9:2] ram_addr[9:2] ram_addr[9:2]

  • - 26 -

    伍、暫存器組電路設計

    暫存運算執行過程中的運算值。暫存器是數位系統中的基本元件,

    資料在暫存器中傳遞及處理。由正反器及相關電路形成的循序邏輯電路

    都可稱為暫存器。對儲存於暫存器中的資料進行運算稱為微運算

    (micro-operations),例如把資料從一個暫存器移到另一個暫存器中、將

    兩個暫存器的值相加及將暫存器的值加 1⋯等。執行微運算時,所需的

    來源暫存器(Source Register)內容被送到 ALU 的輸入,ALU 執行某些運

    算後再把結果回存入目的暫存器(Destination Register, Rd)中。因為 ALU

    為組合邏輯電路,所以整個暫存器資料轉移過程,從來源暫存器到 ALU

    再到目的暫存器可在一個時脈中完成(Mano & Charles, 2000)。

    本研究的暫存器組由 16 個 32 位元的暫存器組成(R0~R15),R15

    為程式計數器(Program Counter),程式計數器的電路設計上,由於記

    憶體的設計是以 8bits 為一個儲存單位,因此當要儲存或輸出完整的 32

    位元指令時,必須將程式計數器固定加 4。圖 3-11 為暫存器組的規劃示

    意圖。

    圖 3-11 暫存器組的規劃示意圖

    RegisterBank

    en INC

    PC(R15)

    PC+4

    Rd_outRm_out

    Rs_outRn_out

    Rs

    Rm

    Rn

    Rd

    Di

  • - 27 -

    圖 3-12 為暫存器組內部示意圖,由圖中得知 Rd_out、Rn_out、

    Rs_out、Rm_out 所輸出的值皆為 16 個暫存器提供,利用四個多工

    器並以 Rd_addr、Rn_addr、Rs_addr、Rm_addr 為多工器選擇線,選

    擇 Rd_out、Rn_out、Rs_out、Rm_out 所要輸出的值

    圖 3-12 為暫存器組內部示意圖

    R0

    R1

    R2

    R15

    R14

    Register Banks

    R0

    R14

    R2

    R1

    R15

    R0

    R1

    R15

    DI[31:0]

    [31:0]Rm_out

    Rm_addr[3:0]

    R0

    R1

    R15

    Rs_addr[3:0]

    Rs_out[31:0]

    R0

    R1

    R15

    Rn_out[31:0]

    Rn_addr[31:0]

    R0

    R1

    R15

    Rd_addr[31:0]

    Rd_out[31:0]

  • - 28 -

    陸、資料路徑(Data Path)設計

    本研究中整個 32 bit ARM CPU 是由資料路徑與控制單元兩大單元

    所構成,將先前所設計的各功能模組,如 DPU、指令暫存器、暫存器組、

    記憶體等於資料路徑中整合,本研究中資料路徑是由漸進式的方式建構

    而成,基本的資料路徑如圖 3-13 所示,只提供資料運算單元指令,處理

    運算資料,經過測試無誤後,在逐步加入記憶體存取相關之指令(LDR、

    STR、LDM、STM、SWP…等)的資料路徑、Branch 指令(B、BL) 的

    資料路徑、浮點運算指令(FADDS、FSUBS、FMULS、FDIVS)的資料路

    徑,最後在進行完整資料路徑的整合。

  • - 29 -

    圖 3-13 DPU 指令資料路徑

    mul

    _op

    cond

    alu_

    op

    Reg

    iste

    rB

    ank

    en

    Mem

    ory

    ram

    _add

    r(7:

    0)

    ram

    _din

    ram

    _dou

    tC

    LK

    ram

    _str

    ore

    ram

    _sb

    DPU

    CLK

    CLK

    PC

    PC_E

    n

    inst

    _in

    0 1

    rn_a

    ddr

    rs_a

    ddr

    rm_a

    ddr

    rd_a

    ddr

    imm

    edsh

    amt

    shift

    rora

    tei4

    i27_

    24

    i7_4

    Inst

    _reg

    _we

    INC

    PC(R

    15)

    PC+4

    rd_o

    ut

    rm_o

    ut

    rs_o

    ut

    rn_o

    utrsrmrnrd

    0 1

    di

    I[15

    :12]

    I[19

    :16]

    Inst

    ruct

    ion

    Reg

    iste

    r

    rm

    mul

    _op

    cond

    alu_

    op

    rn rs imm

    imm

    _shi

    ft_l

    ensh

    ift_o

    pi1

    1_8

    imm

    _rs_

    bit

    alu_

    out C ZVN

    alu_

    ctrl

    alu_

    ene_

    one

    mpy

    imm

    _ope

    rand

    i25

    set_

    cond

    set_

    cond

    cu_a

    lu_c

    trl

    cu_a

    lu_e

    n

    cu_e

    _one

    cu_m

    py

    cu_r

    eg_w

    ecu

    _mpy

    +cu

    _e_o

    ne

    cu_m

    py

    cu_r

    am_s

    tror

    ecu

    _ram

    _sb

    i27_

    24i7

    _4m

    ul_o

    p(2)、

    mul

    _op(

    0)

    cu_p

    c_en

  • - 30 -

    一、 Branch(B/BL)指令電路設計

    B(Branch)指令是用來改變指令執行順序的一道指

    令,也就是用來改變目前程式計數器(PC)的值,將運算

    完新的PC值存入R15(PC)中,當執行BL(Branch With Link)

    指令時,Rn 會選擇 R15 暫存器將原本 PC 值送出,Rd 則選

    擇 R14 暫存器將 Rn 送出的 PC 值存入,之後 Rd 會選擇 R15

    再將運算完新的 PC 值存入,加入 Branch 指令後的資料路

    徑如圖 3-19 所示,指令格式如圖 3-14 所示。

    圖 3-14 Branch(B/BL)指令格式

    二、Signal Data Transfer(LDR/STR)與 Swap memory and Register

    Instructions(SWP)指令電路設計

    (1) LDR/STR 指令意義與格式

    LDR 指令是將所指定的記憶體位址的資料,載入 Rd 暫

    存器中,STR 指令將 Rd 暫存器中的值儲存到指定的記

    憶體位址中。指令格時如圖 3-15 所示。

    a. L=1,從記憶體取出(選用 LDR 指令)。

    L=0,儲存到記憶體(選用 STR 指令)。

    b. W=1,將新位址寫回 Rn。

    W=0,新位址不寫回 Rn。

    c. B=1,以 Byte 為單位進行資料存取。

    Cond

    31 28 27 25

    1 0 1 L

    24

    24-bits offset

    23 0

  • - 31 -

    B=0,以 Word 為單位進行資料存取。

    d. U=1,Rn 與 Offset 作相加運算。

    U=0,Rn 與 Offset 作相減運算。

    e. P=1,使用與Rn運算完後的記憶體位址來存取資料。

    P=0,用與 Rn 所對應的記憶體位址來存取資料。

    圖 3-15 LDR/STR 指令格式

    (2) SWP 指令定義與格式:

    SWP 主要功能是將暫存器的資料與記憶體的資料作交

    換,將 Rn 所對應的記憶體位址中的資料存入 Rd,再將

    Rn 中的資料存入 Rm 中,指令格式如下圖 3-16 所示。

    圖 3-16 SWP 指令格式

    source/destination registerbase registerload/storewrite-backunsigned byte/wordup/downpre/post-index

    025

    125

    12-bit immediate11 0

    offsetRdRnLWBUP#0 1cond31 28 27 26 25 24 2223 2021 19 16 15 12 11 0

    #shift Sh 0 Rm11 7 6 5 4 3 0

    0 0B0 0 0 1 0cond31 28 27 23 22 21 20 19 16

    Rd 0 0 0 0 1 0 0 1 11 415 12

    destination register

    base register

    Rn

    unsigned byte/word

    Rm3 0

    source register

  • - 32 -

    三、Multiple Register Transfer Instruction(LDM/STM)指令電路設計

    LDM/STM 指令與前面所介紹的 LDR/STR指令功能與動作程序

    都是對記憶體作存取的動作,兩類指令的不同點是 LDM/STM 指令

    功能是用來做暫存器與記憶體間多筆資料的存取功能,LDM 指令在

    一個指令下從記憶體載入多筆資料到暫存器中,STM 指令可以將多

    個暫存器資料在一個指令下寫入記憶體,LDM/STM 指令格式如下

    圖 3-17 所示,其中指令格式中的 Register List[15:0]用來選擇與記憶

    體作資料存取的暫存器。

    圖 3-17 LDM/STM 指令格式

    其中指令格式中的 Register List[15:0]用來選擇哪些要與記憶體

    作資料存取的暫存器,所以在資料路徑中需加入 Shift Control 電路

    如圖 3-18 所示,Shift Control 電路中指令 I[15:0]透過 right shift

    register 與 4bits up counter 配合,可得知到需要使用哪一個暫存器,

    例如當 I[15:0]的第 1 個 bits 為 1 時,則 MR[3:0]=0001,表示要使用

    R1 暫存器。

    base registerload/storewrite-backregister PSR and force user bitup/downpre/post-index

    register listRnLWSUP1 0 0cond31 28 27 25 24 2223 2021 19 16 15 0

  • - 33 -

    圖 3-18 Shift Control 電路

    圖 3-19 為加入 Branch 指令的資料路徑,圖 3-20 為加入

    LDR/STM+SWP+LDM/STM 指令的資料,其中虛線匡起來的部分為

    新加入的資料路徑,最後再將浮點運算單元加入如圖 3-21 為完整的

    資料路徑。

    Right_shf [15:0]

    RC [3:0]

    AC [4:0]

    I [15:0]

    CLK

    CLK

    CLK

    0

    1

    Right_shf_dout(1 bits)

    Right_shf_dout(1 bits)

    CLK

    MR[3:0]

    AC[4:0]

    ZZZZ

    EN

  • - 34 -

    圖 3-19 DPU + Branch 資料路徑架構

    mul

    _op

    cond

    alu_

    op

    Reg

    iste

    rB

    ank

    en

    Mem

    ory

    ram

    _add

    r(7:

    0)

    ram

    _din

    ram

    dout

    CLK

    ram

    _str

    ore

    ram

    _sb

    DPU

    CLK

    CLK

    PC

    PC_E

    n

    inst

    _in

    rn_a

    ddr

    rs_a

    ddr

    rm_a

    ddr

    rd_a

    ddr

    i27_

    24

    i7_4

    Inst

    _reg

    _we

    INC

    PC(R

    15)

    PC+4

    rd_o

    ut

    rm_o

    ut

    rs_o

    ut

    rn_o

    utrsrmrnrd

    0 1 2

    di

    I[15

    :12]

    I[19

    :16]

    Inst

    ruct

    ion

    Reg

    iste

    r

    rm

    mul

    _op

    cond

    alu_

    op

    rn rsal

    u_ou

    t C ZVN

    alu_

    ctrl

    alu_

    ene_

    one

    mpy

    cu_a

    lu_c

    trl

    cu_a

    lu_e

    n

    cu_e

    _one

    cu_m

    py

    cu_r

    eg_w

    eR

    d_se

    l

    cu_e

    1

    cu_r

    am_s

    tror

    ecu

    _ram

    _sb

    i27_

    24i7

    _4m

    ul_o

    p(2)、

    mul

    _op(

    0)

    cu_p

    c_en

    1 0

    Inst

    ruct

    ion

    Dec

    oder

    0 1

    cu_b

    l

    cu_b

    +cu

    _bl

    0 1 2 3

    1110

    cu_I

    nst_

    reg_

    we

    I[23

    :0]

    01

    s-ex

    t

    I[7:

    0]o-

    ext

    cu_b

    1111

    1111

    rn_o

    ut

  • - 35 -

    圖 3-20 DPU + Branch+(LDR/STR)+SWP+(LDM/STM)資料路徑架構

    mul

    _op

    cond

    alu_

    op

    Reg

    iste

    rB

    ank

    en

    Mem

    ory

    ram

    _add

    r(7:

    0)

    ram

    _din

    ram

    dout

    CLK

    ram

    _str

    ore

    ram

    _sb

    DPU

    CLK

    CLK

    PCPC

    _En

    inst

    _in

    rn_a

    ddr

    rs_a

    ddr

    rm_a

    ddr

    rd_a

    ddr

    i27_

    24

    i7_4

    Inst

    _reg

    _we

    INC

    PC(R

    15)

    PC+4

    rd_o

    utrm

    _out

    rs_o

    ut

    rn_o

    utrsrmrnrd d

    i

    Inst

    ruct

    ion

    Reg

    iste

    r

    rm

    mul

    _op

    cond

    alu_

    op

    rn rsal

    u_ou

    t C ZVN

    alu_

    ctrl

    alu_

    ene_

    one

    mpy

    cu_a

    lu_c

    trl

    cu_a

    lu_e

    n

    cu_e

    _one

    cu_m

    py

    cu_r

    eg_w

    eR

    d_se

    l

    cu_e

    1

    cu_r

    am_s

    tror

    ecu

    _ram

    _sb

    i27_

    24i7

    _4m

    ul_o

    p(2)、

    mul

    _op(

    0)

    cu_p

    c_en

    1 0

    Inst

    ruct

    ion

    Dec

    oder

    1 0

    0 1

    0 1

    rn_o

    utrd

    _out

    cu_b

    l

    cu_l

    s*cu

    _w

    cu_b

    +cu

    _bl+

    cu_l

    s_pc

    cu_l

    s_p

    0 1M

    R[3

    :0]

    cu_l

    dm

    cu_I

    nst_

    reg_

    we

    I[23

    :0]

    0101

    s-ex

    t

    I[11

    :0]

    I[7:

    0]

    01

    o-ex

    t

    Shift

    _Con

    trol

    ac[4

    :0]

    I[15

    :0]

    MR

    [3:0

    ]cu

    _ldm

    cu_l

    s

    cu_l

    dm+

    cu_b

    0 1 2

    I[15

    :12]

    I[19

    :16]0 1 2 3

    1110

    1111

    1111 rn_o

    ut

  • - 36 -

    柒、浮點運算單元(Floating-point Unit)(浮點運算指令設計)

    以上整體 ARM CPU 皆設計完畢與測試無誤,將再加入浮點運

    算指令,首先設計一個 32 位元的浮點運算處理器,後續再進行與

    ARM CPU 電路之連接。 以下將介紹 32 位元浮點運算器之設計:

    一、 IEEE754 浮點數格式

    IEEE754 是由美國電機電子工程協會(Institute of Electrical

    Electronic Engineers, IEEE) 針對浮點數的格式所制訂的一個標

    準,也是最廣泛被使用的浮點數標準,此標準格式有兩種格式,

    分別為三十二位元的「單倍精準度」 (Single Precision)與六十

    四位元的「雙倍精準度」(Double precision),本研究的浮點數是

    使用三十二位元的「單倍精準度」 (Single Precision)是式 3-1 所

    示。格式如圖 3-23 所示。

    )(exp2)1()1( biasonents dsignifican −×+×− …………………式 3-1

    s:為 sign bit,共 1bit,用來表示正負數用的。

    exponent:為指數部分,共 8its,指數範圍為 127126 2~2− 。

    singificand:為有效數字,共 23bits,放小數用的。

    bias:偏差值,IEEE754 單倍精度的偏差值為 127。

    圖 3-23 IEEE754 單倍精度浮點數格式

    有效數(Significand)指數(Exponent)符號(Sign)

    022233031

    1 Bits 8 Bits 23Bits

  • - 37 -

    二、 浮點加減法器設計

    在浮點的算術中,加減法的複雜度高於乘除法,是因為

    要先兩方變數的指數部分調整為一樣,才可以進行浮點加減

    法運算,浮點加減法演算法流程如圖 3-24[33],浮點加減法演

    算法有四個基本步驟:

    (1) 運算元零檢查

    兩個運算元中,當有任何一個運算元為零時,則運算

    結果可以直接輸出另一個非零運算元的值,若兩運算元皆

    為零,則運算結果即為零,不需運算。

    (2) 對齊有效數(校正指數)

    浮點數要進行加減法運算前,要先將兩方指數部分調整

    為一樣才可進行運算。

    (3) 加減法有效數

    指數調整完畢後,接下來進行有效數的加或減,運算

    完畢後需判斷結果(有效數)是否為零,以及有效數、指

    數是否有發生溢位,一旦發生必須離開整個浮點運算的流

    程。

    (4) 將運算結果正規化

    運算結束後,得到的結果可能以不符合 IEEE754 的浮

    點標準,因此必須將運算結果轉換為正規化的格式。

  • - 38 -

    圖 3-24 浮點加減法運算流程圖

    改變B的

    符號

    A=

    0?

    B=

    0?

    CB

    CA

    返回

    指數

    相等?

    遞增較小

    的指

    有效

    數右移

    有效數

    =0?

    放入其他

    數值於C

    將帶

    符號

    的有

    效數

    相加

    C0

    有效數

    =0?

    有效數

    溢位?

    指數

    遞增

    指數

    溢位

    回報

    溢位

    是 是

    結果

    正規

    化?

    有效數

    左移

    指數

    遞減

    指數

    欠位

    回報

    欠位

    結果

    作捨

    否返

    返回

    返回

    返回

    返回

    加法

    減法

    有效數

    右移

  • - 39 -

    根據圖 3-24浮點加減法運算流程圖來設計浮點加減法運算狀態機如圖

    3-25 所示,圖 3-26 為浮點加減法運算流狀態切割示意圖,狀態機中各

    個狀態說明如下:

    (1) FP_START:作加減法判斷以及運算元零檢查,若有運算元為

    零則直接進入 OUT_RT 狀態。

    (2) T0:此狀態主要作有效數(校正指數)、有效數的加減,說明

    如下:

    (i)判斷兩個運算元指數是否相等,若不相等就進行對齊有效

    數(校正指數)的動作、直到相等為止。

    (ii)兩運算元指數相等後進行有效數的加減,判斷加減完的有

    效數是否為零,若為零就進入 OUT_RT 狀態,不為零則判

    斷有效數是否溢位,若有效數溢位進入 T1 狀態,有效數

    沒有溢位則進入 Normal 狀態。

    (3) T1:此狀態進行,發生有效數溢位時有效數的調整,首先

    將有效數右移並將指數遞增,判斷指數是否溢位,若指數

    溢位就進入 OUT_RT 狀態,指數沒有溢位進入 Normal 狀

    態。

    (4) Normal:此狀態進行判斷運算結果是否正規化,若運算結果正

    規化則進入 OUT_RT 狀態,若運算結果無正規化則

    進行正規化的動作,直到結果正規化為止。正規化動

    作是將有效數左移並將指數遞減,判斷指數是否欠

    位,指數欠位則進入 OUT_RT 狀態,指數無欠位則

    判斷運算結果是否正規化。

  • - 40 -

    (5)OUT_RT:本狀態所進行動作為:

    正規化後的結果輸出、指數欠位回報、指數溢位回

    報。若有效數為零將結果輸出為零,運算元其中一

    個為零,則將結果輸出為不為零的運算元。

    由浮點加減法運算狀態機所知,進行浮點加減法運算需要 5個狀態完成。

    圖 3-25 浮點加減法狀態機(FP_Exec)

    FP_START

    T0

    T1

    Normal

    Out_RT

  • - 41 -

    圖 3-26 浮點加減法運算流狀態切割示意圖

    改變B的

    符號

    A=

    0?

    B=

    0?

    CB

    CA

    返回

    指數

    相等?

    遞增較

    小的

    指數

    有效

    數右

    有效數

    =0?

    放入其

    他數

    值於C

    將帶符

    號的

    有效數相

    C0

    有效數

    =0?

    有效數

    溢位?

    指數遞增

    指數

    溢位

    回報溢

    是 是

    結果

    正規

    化?

    有效

    數左

    指數

    遞減

    指數

    欠位?

    回報

    欠位

    結果

    作捨入

    否返

    返回

    返回

    返回

    返回

    加法

    減法

    有效數右

    T0

    T1

    T2

    OU

    T_R

    T

    OU

    T_R

    T

    IDL

    E

  • - 42 -

    三、 浮點乘除法器設計

    浮點乘法運算如圖 3-27 所示[33],首先如果任一運算

    元為零,結果便為零,下一步將指數相加,如果指數是

    以偏移值的形式儲存,則相加之後會使偏移植加倍,所

    以必須將指數相加完後的結果減去偏移植,若有發生指

    數欠位、溢位的情形,則離開整個浮點運算的流程,皆

    下來將有效數相乘,並將結果做正規化與捨入的動作。

    圖 3-27 浮點乘法運算流程圖

    A = 0 ?

    C 0

    乘法

    B= 0 ?

    否指數相加

    減去偏移量

    指數溢位?

    回報溢位是

    返回

    指數欠位?

    回報欠位

    正規化

    相乘有效數

    將結果捨入

    返回

    返回

  • - 43 -

    浮點除法運算如圖 3-28 所示[33],首先如果除數為零則回

    報錯誤,被除數為零則令結果為零,下一步將指數相減,這個

    動作會移走偏移值所以皆下來必須將偏移值加回去,然後測試

    指數是否發生欠位或溢位,最後將有效數相除,並做正規化與

    捨入的動作。

    圖 3-28 浮點除法運算流程圖

    A = 0 ?

    C 0

    除法

    B= 0 ?(除數)

    否指數相減

    加上偏移量

    指數溢位?

    回報溢位是

    返回

    指數欠位?

    回報欠位

    正規化

    相除有效數

    將結果捨入

    返回

    返回

    回報錯誤

  • - 44 -

    根據圖 3-27、圖 3-28 浮點乘除法運算流程圖來設計浮點乘除運算狀態

    機如圖 3-29 所示,狀態機中各個狀態說明如下:

    (1) FP_START:作乘除法判斷以及運算元零檢查,若有運算元為

    零則直接進入 OUT_RT 狀態。

    (2) T0:本狀態進行指數的加或減、加或減偏移量,若指數發生溢

    位或欠位則進入 OUT_RT 狀態。

    (3) MUL/DIV:本狀態進行有效數的乘或除。

    (4) Normal:本狀態將結果作正規化的動作。

    (5) OUT_RT:本狀態將正規化後的結果輸出,或是進行指數溢位、

    欠位回報,若兩運算元為其中一為零,則結果輸出為零。

    由浮點乘除運算狀態機所知,進行浮點乘除法運算需要 5 個狀態完成。

    圖 3-29 浮點乘除運算狀態機(FP_Exec)

    FP_SATRT

    Normal

    T0

    MUL/DIV

    Out_RT

  • - 45 -

    四、 浮點運算指令格式與定義:

    浮點運算指令是將 Rn 暫存器與 Rm 暫存器中浮點數值進

    行運算將運算結果存入 Rd 所指定的暫存器。指令格式如圖 3-27

    所示。指令格式中 bit[23-20],表浮點運算要進行哪一種運算的

    opcode,如表 3-6 所示:

    圖 3-27 浮點運算指令格式

    表 3-6 浮點運算編碼與功能

    FP OP 指令符號 功能 行為

    0001 FADD 浮點加法 Rd=Rn+Rm

    0010 FSUB 浮點減法 Rd=Rn-Rm

    0100 FMUL 浮點乘法 Rd=Rn*Rm

    1000 FDIV 浮點除法 Rd=Rn/Rm

    完成浮點運算器與指令格式定義設計後在將浮點運算單元如圖

    3-28 所示,加入資料路徑中, ARM PCU 完整的資料路徑如圖 3-29

    所示:

    圖 3-28 浮點運算單元之示意圖

    Floating-PointUnit

    X

    Y

    FAddFSubFMulFDiv

    XY_out

    rn_out

    rm_out

    Rn1110cond31 28 27 24 23 20 19 16

    FP OP RmRd3 05 411 15 12

    xxxx 0

  • - 46 -

    圖 3-9 加入浮點運算單元後之完整的資料路徑架構

    mul

    _op

    cond

    alu_

    op

    Reg

    iste

    rB

    ank

    en

    Mem

    ory

    ram

    _add

    r(7:

    0)

    ram

    _din

    ram

    dout

    CLK

    ram

    _str

    ore

    ram

    _sb

    DPU

    CLK

    CLK

    PC

    PC_E

    n

    inst

    _in

    rn_a

    ddr

    rs_a

    ddr

    rm_a

    ddr

    rd_a

    ddr

    i27_

    24

    i7_4

    Inst

    _reg

    _we

    INC

    PC(R

    15)

    PC+4

    rd_o

    ut

    rm_o

    ut

    rs_o

    ut

    rn_o

    utrsrmrnrd d

    i

    I[15

    :12]

    Inst

    ruct

    ion

    Reg

    iste

    r

    rm

    mul

    _op

    cond

    alu_

    op

    rn rsal

    u_ou

    t C ZVN

    alu_

    ctrl

    alu_

    ene_

    one

    mpy

    cu_a

    lu_c

    trl

    cu_a

    lu_e

    n

    cu_e

    _one

    cu_m

    py

    cu_r

    eg_w

    eR

    d_se

    l

    cu_e

    1

    cu_r

    am_s

    tror

    ecu

    _ram

    _sb

    i27_

    24i7

    _4m

    ul_o

    p(2)、

    mul

    _op(

    0)

    cu_p

    c_en

    1 0

    Inst

    ruct

    ion

    Dec

    oder

    1 0

    0 1

    0 1

    rn_o

    utrd

    _out

    cu_b

    l

    cu_l

    s*cu

    _w

    cu_b

    +cu

    _bl+

    cu_l

    s_pc

    cu_l

    s_p

    cu_l

    dm

    Floa

    ting-

    Poin

    tU

    nit

    X Y FAdd

    FSub

    FMul

    FDiv

    XY

    _out

    1 0

    cu_f

    p

    rn_o

    ut

    rm_o

    ut

    cu_A

    ddcu

    _Sub

    cu_M

    ulcu

    _Div

    CLK

    cu_I

    nst_

    reg_

    we

    I[23

    :0]

    0101

    s-ex

    t

    I[11

    :0]

    I[7:

    0]

    01

    o-ex

    t

    Shift

    _Con

    trol

    ac[4

    :0]

    I[15

    :0]

    MR

    [3:0

    ]cu

    _ldm

    cu_l

    s

    cu_l

    dm+

    cu_b

    0 1M

    R[3

    :0] 0 1 2

    I[15

    :12]

    I[19

    :16]0 1 2 3

    1110

    1111

    1111

    rn_o

    ut

  • - 47 -

    捌、控制單元(Control Unit)設計

    控制單元是 32 bit ARM CPU 運作的核心,產生各種時序控制訊號

    進行資料路徑資料傳送與運算控制單元是掌管整個ARM CPU的運作流

    程,根據不同指令的需求產生所有模組、資料路徑中所有多工器所需的

    控制訊號,多工器藉由所選擇的控制訊號來進行資料路徑的資料傳遞與

    運算。本研究所實作的指令有資料處理指令、分支指令、記憶體相關指

    令、浮點指令,控制單元接收到以上這些指令的解碼後,控制單元會送

    出不同指令所需適當的控制訊號至各個模組,然後再由各個模組取回狀

    態訊號(Status signals),這些狀態訊號反應各模組目前的狀態,使控制單

    元依這些狀態訊號來決定下一個應產生的運算次序。[15]

    圖 3-22 ARM CPU 控制單元狀態機

    BLMul_L

    Ld_weStr_weSwp_we

    Exec_1Exec_2

    LdrStrSwp

    Ldm、Stm

    LdmSTM

    t

    Exec Decoder

    Fetch

    Idle

    Dpu、B

    Start

    FP_we

    FP_Exec

    FP_INS

  • - 48 -

    本研究ARM CPU之控制單元採用有限狀態機(Finite State Machine)

    設計方式,在每一個對應狀態,產生該狀態運作功能相關控制訊號,控

    制單元設計方式與上節所介紹資料路徑相同,也是以漸進式的方式進

    行,先設計執行 DPU 指令的初步控制單元狀態機,經過測試正確後,

    再漸漸增加要加入的新指令所需之控制狀態,循序漸進,最後完成整體

    控制單元架構。如圖 3-22 所示。各狀態執行工作如下:

    一、Idle:閒置狀態,當 RESET=1 時,會重設整個 ARM CPU 所

    有的狀態與控制訊號。

    二、Fetch:指令擷取狀態,此狀態記憶體會載入所要執行的指令,

    並且將 PC 作遞增,所以在執行擷取指令時,也同時將

    PC 指向下一道指令所在的記憶體位址。

    三、Decoder:指令解碼/暫存器提取狀態,在此狀態的工作為判斷

    指令的類型為資料處理類、分支類、記憶體相關類、

    浮點類,以及取得指令中所指定暫存器的內容,並進

    行適當的運算。

    四、Exec:(1)資料處理指令:將 Rn 暫存器與 Operand2 的運算結果

    存入 Rd 所指定的暫存器。

    (2)乘法指令:將 Rm 暫存器與 Rs 暫存器相乘完的值

    Dpu_out[31:0] (64 位元乘積中較低 32 位元)存入 Rn

    所指定的暫存器。

    (3) Ldr/Str、Ldm/Stm 指令:進行記憶體位址計算。

  • - 49 -

    (4)SWP 指令:將 Rn 暫存器中的值所對應的記憶體位址

    的資料存入 Rd 所指定的暫存器中。

    (5)Branch 指令:若執行 B 指令,將計算出的分支位址存

    入 R15(PC)中,若執行 BL 指令將

    R15(PC)的值存入 R14 中。

    五、Exec1:長乘法指令:將 Rm 暫存器與 Rs 暫存器相乘完的值

    Dpu_out[63:32] (64 位元乘積中較高 32 位元)存入 Rd 所

    指定的暫存器。

    六、Exec2:將計算出的分支位址存入 R15(PC)中。

    七、Ldr_we/Str_we:從指定的記憶體位址提取資料並寫入 Rd 指定

    的暫存器/將資料存回指定的記憶體位址。

    八、Ldm/Stm:將一整個區塊記憶體資料存入指定的暫存器中/將一

    整個區塊暫存器資料存入記憶體中。

    九、Swp_we:將 Rn 暫存器中的值存入 Rm 所指定的暫存器中。

    十、FP_Exec:將 Rn 暫存器與 Rm 暫存器進行指定的浮點運算。若

    執行浮點加減法,本狀態將需要 5 個 CLOCK 完成,

    (因為是由上一節圖 3-25 中浮點加減運算狀態機所

    知,進行浮點加減法運算需要 5 個狀態完成)。

    若執行浮點乘除法則本狀態需 5 個 CLOCK 完成。(因

    為是由上一節圖 3-29 中浮點乘除運算狀態機所知,

    進行浮點乘除法運算需要 5 個狀態完成)

    十一、FP_we:將 Rn 暫存器與 Rm 暫存器的運算結果存入 Rd 所指

    定的暫存器。

    第三章ARM CPU 規劃設計第一節ARM CPU 相關知識第二節ARM CPU 設計