天天看點

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

目錄

  • 前言
  • 單周期資料通路
  • 算數邏輯指令(R 型指令)
    • 取指令階段
    • 譯碼階段
    • 執行階段
    • 記憶體通路階段
    • 寫回階段
    • 下一條指令
  • 記憶體通路指令
  • 分支跳轉指令
  • 總結(重要⚠)

前言

昨天複(yu)習了:計組複習(一):乘法器,除法器與浮點加法器,鞏固了硬體事如何實作運算操作的。

今天複習 cpu 資料通路,也是很複雜的圖。一步一步來吧。

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

唔。。。。現在是淩晨 1:42,人快蕪了,是以部落格内容可能會出現一些纰漏 dbq 我爬 Orz

才不是打了一天 lol 導緻沒時間複習。還有,有沒有懂哥知道男刀這版本怎麼玩?出暗爪還是幕刃還是渴血?征服者 or 電刑?

編輯下:我的我的 還真漏了。。。

課本上的圖有一個多路複用器 01 接口畫反了,但是我所有圖檔都是按照課本的圖描圖畫的,于是也反了,來不及改了,算了(擺爛

就是 Jump 控制信号對應的複用器:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

Jump 為 1 時才使用 Jump 的跳轉,否則使用 beq 或者 PC+4 作為下一條指令位址。

單周期資料通路

單周期即一個指令的執行,不包括流水線并行,是一種簡單(霧)的資料通路。由之前的學習知曉 mips 的指令也分為幾個階段:

  1. 取指令 IF
  2. 譯碼 ID
  3. 執行 EX
  4. 通路記憶體 MEM
  5. 寫回 WB

硬體正是根據這幾個步驟進行設計的,且看 cpu 如何實作。

按照慣例先上圖,盡管這個圖非常吓人,但是待會我們一步一步來分析它。

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

單周期資料通路的硬體從左到右對應了 mips 的 5 個階段:

  • 最左邊首先是位址記憶體,對應取指令與譯碼階段(IF / ID)
  • 随後是寄存器檔案和 ALU,對應執行階段(EX)
  • 再右邊是資料記憶體,對應記憶體通路階段(MEM)
  • 最後是寫回(RW)。

同樣的,資料按照從左到右的順序進行通路周遊,來啦來看就知道了↓

這裡以 R 型指令舉例。

算數邏輯指令(R 型指令)

算數邏輯指令一般指 add,and 這些指令。他們都是 R 型指令

注:

R 型指令一般指有三個操作寄存器的指令:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

這意味着我們需要從兩個源寄存器(rs,rt)讀取資料,同時将結果寫回目的寄存器(rd)。接下來看各個階段的資料通路:

取指令階段

首先是取指令階段,将指令取給控制單元,同時 PC+=4,如下圖:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

IF 階段不需要任何的控制資料。

譯碼階段

然後是譯碼階段,這裡需要用到 RegDst 控制信号,以确定目的寄存器是哪個。因為 R 型指令和資料存取指令有着不同的目的寄存器:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

通過 RegDst 置 1 控制信号(下圖黃色箭頭)指揮多路複用器(mux),我們取 [15-11] 作為目的寄存器:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

執行階段

然後是執行(EX)階段,首先從寄存器中讀取兩個操作數并且傳入 ALU。

此外,需要額外的控制信号(對應下圖黃色箭頭)來決定資料源是來自寄存器還是由指令給出的立即數給出。

值得注意的是,ALUOp 控制信号告訴 ALU 要執行何種運算,因為不同指令需要做不同的運算,比如 add 就是按位相加,and 就是按位與運算。

因為執行的是 R 型指令,這裡 ALUSrc 置 0 來確定從寄存器中讀取資料,而不是來自于立即數,如下圖:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

記憶體通路階段

再然後是記憶體通路階段(MEM),因為 R 型指令都是算數邏輯指令,不涉及記憶體通路,通過兩個控制信号:

  1. MemRead,置 0,表示不需要從記憶體中讀取資料
  2. MemWrite,置 0,表示不需要将資料寫入記憶體

通過兩個控制信号,直接跳過這個階段(對應下圖紅色箭頭繞路):

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

寫回階段

最後是寫回階段。這裡需要兩個控制信号:

  1. MemtoReg,置 0,表示寫回到寄存器的資料不是從記憶體中來
  2. RegWrite,置 1,表示需要将結果寫回寄存器

控制信号如下圖黃色箭頭所示:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

下一條指令

最後需要完成指令的跳轉,這裡通過控制信号:

  1. Branch,置 0,表示不需要進行分支跳轉
  2. Jump,置 0,表示這不是一條 j 指令,按照 beq 或者 PC+4 來跳轉
注:圖中 Jump 的複用器畫反了。

于是 PC+4 的值被寫回 PC,完成下一條指令的跳轉,如下圖:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

注:

這不是 mips 流水線裡面的一個階段

這裡單獨寫出來是因為不想把圖畫的太複雜,否則很難看清

事實上這應該發生在寫回階段,畢竟寫 PC 也是一種寫回(霧

記憶體通路指令

和上面的 R 型指令的推導過程類似,這裡我就不畫分解圖了 dbp 我是懶狗我爬,但是大體思路都是一緻的。

回想 mips 每一個階段都需要 贛神魔 幹什麼,就能很快得出答案!

首先來看 lw 指令。lw 指令需要 4 個關鍵的控制信号置 1,他們分别是:

  1. MemRead:置 1,需要讀取記憶體
  2. MemtoReg:置 1,需要将記憶體資料寫回寄存器
  3. RegWrite:置 1,需要寫寄存器
  4. ALUSrc:置 1,需要從指令立即數讀取 ALU 運算資料

四個關鍵控制信号由黃色箭頭标記,而紅色箭頭則表示了資料的流向,如下圖:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

再來看 sw 指令。sw 指令隻需兩個關鍵控制信号置 1 即可:

  1. ALUSrc:置 1,表示從立即數讀取操作數
  2. MemWrite:置 1,表示要向記憶體中寫資料

兩個關鍵控制信号由黃色箭頭标記,而紅色箭頭則表示了資料的流向,如下圖:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

分支跳轉指令

分支跳轉指令也需要兩個關鍵控制信号,他們分别是:

  1. Branch:置 1,表示需要執行分支跳轉
  2. Jump:置 0,表示這不是一條 j 指令,按照 beq 或者 PC+4 來跳轉
注:圖中 Jump 的複用器畫反了。

看圖:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

一步一步來看,就是:

  • 首先根據立即數,計算分支指令跳轉的目的位址(由上圖藍色箭頭表示),此外注意位址計算乘以 4,因為一條指令占 4 位元組
  • 然後 ALU 會判斷讀取的兩個寄存器(rs,rt)是否相等
  • 如果相等,則給出一個控制信号(上圖橙色箭頭),并且和 Branch 控制信号進行與運算,決定最終是否執行分支
  • 執行 beq / PC+4,寫回 PC

總結(重要⚠)

在了解了幾種指令的資料通路概要之後,老師給出的真值表似乎不那麼棘手了:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)
此外,附一張内鬼給的控制信号含義表:
計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

主要記憶兩個:

ALUSrc:為 0 表示第二個操作數來自寄存器 rt,為 1 表示來自立即數

RegDst:為 0 表示目的寄存器是 rt,為 1 表示目的寄存器号為 rd

此外,注意 ALUOp 是 2 bit 的控制信号,它告訴 ALU 該做什麼運算,加 or 減:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

控制信号真值表:

計組複習(二):單周期資料通路與控制信号前言單周期資料通路算數邏輯指令(R 型指令)記憶體通路指令分支跳轉指令總結(重要⚠)

繼續閱讀