【正文】
下面詳細介紹 ALU的工作原理,及電路結構。 ALU操作主要包括加、減、加 l、減 與、或、非、異或等幾類。 EXE 級 EXE 級包括 ALU 算數邏輯運算模塊。 如圖 所示,指令 instruction_wire 3239。 I RD E C O D E R i m m ef u n co p c o d eI m m e _ o u tA l u _ o pr s 1r s 2r di m m eW r i t e _ p cL o a d _ o p e nE x e _ z e r oL o a d _ o p e nW r i t e _ p cr e g f i l e so p a 1o p b 1s e l l o a dw m e mw r e gw r e gw z e r oE x e _ r dE x e _ s l ds e l i m m eW r i t e _ p u s hW r i t e _ p o pM e m _ w r e g s 圖 ID級結構圖 基于 MIPS 精簡指令集的 32 位微處理器設計 24 ID 級 的 設計與仿真 圖 ID級仿真圖 instruction_wire 被用來譯碼,輸 出 opcode_wire 和 func_wire 控制信號和源寄存器rs1, rs2,目的寄存器 rd,立即數 imme_wire。 ID 級 的工作原理 指令 譯碼溢出操作數 opcode, func 和 aluop, 源操作寄存器地址 rs1, rs2 和目的寄 存器地址 rd,并輸出 經過位擴展為 32 位的 imme 數據 。 ID 級包括 IR 模塊, DECODER 模塊。 圖 函數返回的 PC值仿真 圖 由 仿真結果 ,在 SELBRANCH 為 011 時, 當前指令 為 ret 指令,從 PC 棧中彈出一個值并賦給 PC_MOVE,然后 在下一個時鐘周期 PC_MOVE 的值被打入到 PC 中,實現了指令的跳轉(函數的返回)。 在有條件跳轉 JG 時計算得 zero為 10 即比較結果為大于,即將跳轉。 圖 PC累加 仿真圖 指令地址寄存器 PC 在, SELBRANCH 無效時,每次加一,然后輸出 ROM 中的指令,并送到指令總線 ,供下一級產生控制信號 。 R O MPCN e w _ p c _ a d d r+P c _ a d d rA d d r e s sD a t a O u tI n s t r u c t i o n1c l kW R I T E P CS E L B R A N C HP C _ M O V EW R I T E I R 圖 IF級結構圖 IF 級 的設計與仿真 測試 程序存儲器包括一個基本的 ROM 模塊以及一個寄存器 陣列和一個三態(tài)控制器。如果 SELBRANCH 不為 0,則指令要發(fā)生跳轉 , PC 把 PC_MOVE 的地址裝入 PC 中,實現指令地址的跳轉 。 取指令 的功能就是: 在時鐘控制下,每周期將 PC 加一。 IF 級 完成對 PC 的累加和 根據當前執(zhí)行的指令情況,對程序指針 PC 進行適當的調整,以提供對程序存儲器進行提取操作所需要的地址碼。將 WB級劃分為 MUX3模塊,INTERFACE5 模塊。在 sw 指令下,數據存儲器根據地址和輸入數據更新存儲器的值。將 ID 級 REGFILE 模塊, MUX1 模塊, IR 模塊, DECODER 模塊; EXE 級 根據輸入的數據和指令碼進行運算,并將結果輸出。 將 IF 級劃分為 劃分為 PC 模塊, ROM 模塊, PC_ADDER 模塊; ID 級 解析指令,更新各個控制信號線的狀態(tài)。 根據五級流水 線每級的功能 , 劃分了 流水線處理機 相應 的模塊,模塊 圖如下。第四章 流水線結構 MCU 模塊設計 19 第四章 流水線結構 MCU模塊設計 在本章中, 先 根據五級流水線劃分出相應的模塊,做出了相應的模塊圖。 5) WB 級 WB 級把指令結果寫回到寄存器堆。 4) MEM 級 存儲器訪問級專門為 訪存 指令而設 。 ALU 根據 運算類型的指令在本級計算出結果,并把它打入 結果暫存中 , 同時 ALU的 需要置相應的標志位 如為零標志位,上溢 ,下溢 。如果是 棧操作 ,則 還需要 保存或取出 堆棧中 通用寄存器的值。轉移指令將在本級結束。 目的寄存器號要保存在流水線寄存器中,以便在 WB級指定把 WB級指定把結果寫入到那個寄存器中。 2) ID 級 指令譯碼 ID 指令執(zhí)行 EXE 存儲器讀寫 MEM 寄存器寫回 WB 取指令 IF 基于 MIPS 精簡指令集的 32 位微處理器設計 18 指令譯碼級有兩件事情要做:第一件是數據路徑要完成的操作,主要是從寄存器堆中讀寄存器操作數和對指令 部分進行符號擴展;第二件工作由控制部件完成。新的 PC 計算有兩種情況:程序不發(fā)生轉移時,新的 PC 地址由當前 PC 值加 1 得到指的是指令字偏移量,相當于字節(jié)地址偏移量的,即指向下一條順序的指令 。 1) IF 級 在第一級處理機使用 PC 的內容訪問指令存儲器,取出指令,并在該級結束時,把指令打入 IR 寄存器。但有兩處從右向左的例外:一處是 WB 級,它把運算結果寫回中間靠左位置的寄存器堆中;另一處是 IF 級,它把經過運算的下一條指令的地址寫入程序計數器 PC 中。根據指令執(zhí)行的階段, 可以劃分流水線為 5 級。這就是流水線處理機中 單 條指令執(zhí)行時間變長將對性能造成很小影響的原因。因此流水線處理機平均每條指令所需的 準確 的時鐘周期為: 1=p mnCPI n?? 式 (32) 例如,當 n=1, m=5 時, 10 00 04 / 10 00 00 1pC PI ??=5,它與非流水線處理機是一第三章 M I P S 指令集 與流水線技術 17 樣的。從流水線處理機的時序中可以看出,每個時鐘周期處理機取出一條指令加以執(zhí)行。 A L U 指 令s t o r e 指 令l o a d 指 令轉 移 指 令指 令 存 儲 器指 令 存 儲 器指 令 存 儲 器指 令 存 儲 器寄 存 器 堆寄 存 器 堆寄 存 器 堆加 法 器( 1 0 )A L UA L UA L U加 法 器( 1 0 )數 據 存 儲 器數 據 存 儲 器 寄 存 器 堆寄 存 器 堆5 05 04 02 01 01 01 01 01 0n s 圖 流水線處理機個指 令執(zhí)行所需的時間 基于 MIPS 精簡指令集的 32 位微處理器設計 16 I F I D E X EI F1 0 n sM E M W BI D E X E M E M W BI F I D E X E M E M W BI F I D E X E M E M W BI F I D E X E M E M W B1 0 n s 1 0 n s 1 0 n s 1 0 n s1 0 n s 1 0 n s 1 0 n sIF ID E XE M E M WBIF ID E XE WBIF ID50 ns 40 ns 20 nsl o a da d db r a n c hIF ID E X E M E M WBIF ID E X E M E M WBIF ID E X E M E M WB40 ns40 ns 40 ns( b ) 多 周 期 處 理 機( a ) 單 周 期 處 理 機( c ) 流 水 線 處 理 機 處 理 機 圖 單周期處理機、多周期處理機、流水線處理劑指令執(zhí)行比較 3 種處理機的指令執(zhí)行時序如圖 所示。假設流水線處理機的時鐘周期也定義為 10ns,流水線技術是 5 級。以上的指令系統中 load 指令執(zhí)行,需要 40ns,因此我們定義時鐘周期長度為40ns。 表 列出了各指令執(zhí)行時所需要的時間。由于指令的重疊操作,我們必須把每一級的操作結果用寄存器保存下來。則每隔 10ns 才能從指令存儲器取出一條指令,或者每個 10ns 才能讀寫一次數據存儲器。指令存儲器以及數據存儲器也有這樣的限制。這意味著流水線每級中的執(zhí)行部件都要有能力在每個時鐘周期接收一條新的指令的執(zhí)行。 但是 把流水線級數分得 并不是越多越好 , 實際的情況往往要受很多條件的限制。 T 是每個時鐘周期的時間長度,假設它在兩種處理機也是相同的。因為流水線處理機把一條指令的執(zhí)行時間理想地分成了 m 級,有 m 條指令在同時(重疊)執(zhí)行,則 /np pCPI CPI m? 。 CPI 是每條指令總體平均所需的時鐘周期數。流水線處理機在這種理想的情況下,與非流水線處理機的性能加速比為: pn p n pC P ImpI C P I T C P ISmI C P I T??? ? ? 式 (31) 其中, I 為一個程序被執(zhí)行的總的指令條數。如果分級分得好的話,那么每一級都沒有時間上的浪費。在每個時鐘周期,處理機啟動執(zhí)行一條指令?!?[1] 基于 MIPS 精簡指令集的 32 位微處理器設計 14 流水線處理機把一條指令執(zhí)行分為幾個步驟,或稱級( stages)。而流水線處理機執(zhí)行一條指令可能需要 5 個時鐘周期,但由于多條指令,例如 5 條,可以重疊操作,總體上平均每條指令所花費的指令所花費的時間大之外 1 個時鐘周期。試想,非流水線多周期處理機執(zhí)行一條指令平均要花費大約 4 個時鐘周期。但從整體來看,產品的 出產 率卻大大提高了。每道工序只完成生產中的一小部分操作,即送往俠義道供需。尤其是現在,幾乎所有的現代化工廠的生產線采用流水線技術。 流水線技術并不是處理機領域所獨有的。 1 pop_R 指令 111001 rs rt rd 00000 000000 從棧 2 中取出 數保存到 通用寄存器 rs。 1 pop 指令 010001 rs rt rd 00000 000000 從棧 1 中取出 數存到 通用寄存器 rs 中 。 pc= Stack[point]。PC immediate[7:0]。 1 call 指令 110011 rs rt immediate Stack[point]=pc。 2) Itype addi 指令 001000 rs rt immediate rt rs + (signextend)immediate ;其中 rt=$1,rs=$2 subi 指令 001110 rs rt immediate rt rs amp。 xor 指令 00 r r r 0 1001基于 MIPS 精簡指令集的 32 位微處理器設計 12 0000 s t d 0000 10 rd rs + rt ;其中 rs= $2, rt=$3, rd=$1,無符號數 。 and 指令 000000 rs rt rd 00000 100100 rd rs + rt ;其中 rs= $2, rt=$3, rd=$1,無符號數 。 sub 指令 000000 rs rt rd 00000 100010 rd rs + rt ;其中 rs= $2, rt=$3, rd=$1,無符號數 。 第三章 M I P S 指令集 與流水線技術 11 1) Rtype 指令 add 指令 00000 rs rt rd 00000 100000 rd rs + rt ;其中 rs= $2, rt=$3, rd=$1。 MIPS 指令的尋址方式非常簡單,每條指令的操作也非常簡單。③易于編譯器的開發(fā)。②易于流水線 CPU的設計。所有的計算類型的指令均從寄存器堆中讀取數據并把結果寫入寄存器堆中。 M I P S 指令集 MIPS 指令集具有以下特點。 協處理器指令。 特殊指令。 條件轉移。 邏輯運算。該類型指令使用一個 26 位的立即數作為跳轉的目標地址( target address)。該類型指令使用一個 16 位的立即數作為一個源操作數。該類型指令從寄存器堆( register file)中讀取兩個源操作數,計算結果寫回寄存器堆。該項目命名為 MIPS(主要是無內鎖流水段微型計算機的關鍵短語的縮略 )同時也是 每秒百萬條指令數 的雙關語。 從生產 專用集成電路核心 (ASIC Cores)的廠家 (LSI Logic,Toshiba, Philips, NEC)到生產低成本 CPU 的廠家 (NEC, Toshiba,和 IDT),從低端 64 位處理器生產廠家(IDT, NKK, NEC)到高端 64 位處理器生