【梳理】計算機組成與設計 第4章 處理器 第1節 數據通路(內附文檔高清截圖)

配套教材:
Computer Organization and Design: The Hardware / Software Interface (5th Edition)
建議先修課程:數字邏輯電路、C / C++、彙編語言。
這是專業必修課《計算機組成原理》的複習指引。建議將本複習指導與博客中的《簡明操作系統原理》配合複習。
在本文的最後附有複習指導的高清截圖。需要掌握的概念在文檔截圖中以藍色標識,並用可讀性更好的字體顯示 Linux 命令和代碼。代碼部分語法高亮。
計算機組成原理不是語言課,本複習指導對用到的編程語言的語法的講解也不會很細緻。如果不知道代碼中的一些關鍵字、指令或函數的具體用法,你應該自行查找相關資料。


第四章 處理器

第一節 數據通路

1、回憶在數字邏輯電路課程中學習到的內容:集成觸發器作爲計算機的各種芯片中的基本部件,常採用邊沿觸發(edge-trigger)方式進行工作:由專門的時鐘(clock)信號來控制數字電路的動作。只有時鐘在上升沿(正沿)或下降沿(負沿)時,讀寫等動作才被允許進行。這保證了在數字電路的動作期間,輸出結果不因輸入的波動而引起變化,大大提高了計算機的穩定性和抗干擾能力。

2、寄存器堆(register file)指的是多個寄存器組成的陣列通常由快速的靜態隨機讀寫存儲器(SRAM)實現。 這種RAM具有專門的讀端口與寫端口,可以多路併發訪問不同的寄存器。每個寄存器用寄存器號(register number)來唯一標識。

3、數據通路(datapath),指的是指令執行過程中,數據所經過的路徑,包括路徑中的部件。
下圖是一個數據通路的一部分。這部分用於實現程序計數器的自增(增加4)和取指令。取到的指令被數據通路的其它部分使用。
本節的圖和表格的內容不用背下來,能看着圖表流利說出不同的指令怎樣通過數據通路即可。

4、基於MIPS指令集架構的處理器中的一個處理分支指令beq的數據通路示例如下:

取指令後,指令中刻畫偏移的立即數進行帶符號擴展。由於MIPS的所有指令都按4字節對齊,所以刻畫偏移的立即數要左兩位。這不需要用到一整個功能完全的位移單元,因爲位移方向和位數都是固定的,所以可以只用高度簡化的硬件。加法器用於根據基址(取指令後爲PC的值+4)和偏移地址來計算出條件分支的目標地址。指令被按照指令格式分成若干部分,傳入相應的端口。Read Register端輸入的是寄存器號(5個bit),Read Data端用於輸出讀取到的數據。一個專門的ALU用於比較beq中的兩個數(從寄存器傳入)是否相等。比較的實現方式是相減,當兩數相等時輸出0。條件判定的結果會被輸出到分支控制邏輯,後者決定是否跳至分支目標。ALU Operation端用於輸入控制信號,ALU根據輸入的不同來執行不同的運算。出於簡便的考慮,ALU的端口並未全部畫出。

5、MIPS指令集允許延遲分支,也就是說無論分支的條件是否成立,有一些指令總是在順序執行或跳至分支之前先執行。

6、以下是基於MIPS的CPU的一條數據通路:

指令根據指令格式拆分成若干部分進入不同端口。R型指令的目標寄存器號和源寄存器號分別進入Write register和Read register端。雖然指令中的一部分也會一同輸入Sign-extend端(當指令格式不包含16位偏移時,輸入的是不正確的內容),但是接下來的MUX會根據控制信號(隨指令的不同而不同)決定輸出哪一路給ALU。ALU的運算結果同時輸入到內存的Address端和Write data端。之後的MUX也會根據指令的類型選擇正確的一路(地址或算術、邏輯等表達式的值)輸出。有的指令要求將內存中的數據輸出到寄存器(例如load指令),那麼MentoReg和RegWrite信號輸入有效,相應數據被寫入寄存器。有的指令只要求將結果寫入寄存器,那麼MemtoReg無效,RegWrite有效,運算結果經過最右側的MUX後被寫入寄存器。

7、以下是基於MIPS的CPU中的一個數據通路的示例:

取指令的時候,指令地址由PC給出,傳入指令內存的Read address端。PC的值和常數4被送入一個單獨的ALU中進行PC的自增。取得的指令從指令內存送入寄存器和負責符號擴展的專用電路。如果指令包含偏移地址,那麼16位的偏移地址在符號擴展後左移2位,通過專門的ALU計算新的地址。由PCSrc端輸入控制信號的MUX會根據指令的類型輸出新的PC值:對非跳轉指令,PC正常+4;如果要求跳轉,就輸出跳轉的目標地址。剩下的部分和上一個圖相同。也就是說這個數據通路比上一個數據通路多了一個功能:處理分支。

8、以下是基於MIPS的CPU的一條更完整的數據通路:

回憶MIPS的指令格式:

可以看出,指令的高6位用於產生控制信號(用藍色線代表傳送控制信號的通路)。R型指令的最低6位,也就是funct部分來控制ALU的動作。ALUOp是高2位。ALUOp和指令的對應關係如下:(X代表無關項(don’t-care term))

funct部分的低4位與ALU執行的運算的對應關係如下:

藍色線代表控制信號的輸入位置。這7個控制信號的無效和有效分別代表的意義如下:

電路圖上沒有標出控制信號PCSrc:這個信號改爲由右上角的與門給出。當beq指令的分支條件滿足時,Branch端和ALU的0輸出端同時輸出高電平,與門輸出高電平,PC的值爲分支的目標地址。
不同類型指令的操作碼和控制信號如下:

至此,一個單週期的實現就基本完成了。這條數據通路已經可以正確執行絕大多數MIPS指令。

9、我們爲上面的數據通路添加無條件跳轉指令。MIPS的跳轉指令j的格式如下:

添加該功能後,執行j的數據通路如下:

右上角多了一個MUX。取完j指令後PC已經加了4,這部分會與跳轉的左移兩位後的偏移合併爲新的地址。

10、雖然上述單週期設計已經能正確工作,但現今的芯片中,除非芯片非常簡單,否則一般不會使用這種設計了。一個芯片能跑多高的頻率,是受最長的數據通路制約的。LOAD指令經過的數據通路一般最長,比如在上述設計中,執行一次要經過5個功能模塊:指令內存、寄存器堆、ALU、數據內存、寄存器堆。雖這個指令能在1週期內完成,不過就因爲這個週期最長的指令,我們不能把芯片的運行頻率設定得過高,否則該指令就無法在1週期內正確執行完畢。下一節我們介紹流水線,這是進一步提升性能的重要方式。
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章