計算機組成與設計(4)-----處理器

zh328271057發表於2018-10-14

思維導圖

    前兩章中簡要概述了指令的形式及其作用,處理器的主要功能就是在規定的時間內處理指令.

    處理器是如何處理指令的呢?從硬體結構上講,處理器有資料通路和控制器構成.其中,資料通路的主要功能是根據指令處理資料的流通,在此過程之中,會讀取或者寫入資料,也會對資料進行算術等處理,如何判斷是進行寫入還是讀取或者是其他的操作呢?這就會使用到控制器的控制單元,他會將指令解碼形成不同的控制訊號,以控制資料通路的組成構建進行不同的操作

    本文將由簡到繁的描述資料通路是如何構成以及如何實現的.然後寫控制單元是如何實現的,兩者有時如何協調工作的.最後將簡要描述處理器的流水線是怎樣實現的,會遇到什麼問題.

一.資料通路

1.1資料通路的組成

資料通路的功能部件包括兩種邏輯單元:

  • 組合單元:用於處理資料的單元.他會接受資料並進行處理,然後輸出資料.相同的輸入資料就會產生相同的輸出資料.如ALU
  • 狀態單元:用於記錄狀態的儲存單元.計算機可以根據其記錄的值進行恢復.比如暫存器或者儲存器.狀態單元至少有兩個輸入,                    一個輸出.兩個輸入分別是寫入的資料和決定何時可以寫入的時鐘訊號.一個輸出是上個時鐘訊號寫入的資料.狀態                   單元隨時可讀.

資料通路的具體部件是用於操作或者儲存處理器中資料的單元,包括:

  • 指令儲存器
  • 資料儲存器
  • 暫存器堆
  • ALU
  • 加法器

1.2資料通路的實現

   我們將實現可以處理 儲存器訪問指令:sw,lw. 算術邏輯指令:add,sub,and,or,slt和分支指令:beq,j的處理器.(圖中的英文RegWrite     表示控制訊號,控制功能部件的具體操作,後文再說)

   首先分析以上指令將會使用那些構成部件:

  • 無論執行什麼指令,都需要指令儲存器以獲取和儲存當前需要執行的指令,需要程式計算器指向當前指令的地址,而下一條指令可能就是本次執行指令的地址+4,所以需要一個加法器計算下一條指令的地址.

 

 

  • 除了j指令外,其餘指令都需要使用暫存器,而暫存器在暫存器堆中,因為指令最多會讀取兩個暫存器,寫入一個暫存器,所以,暫存器堆有兩個讀埠,一個寫埠.只通過暫存器號以確定是哪個暫存器.也需要使用算術邏輯單元(ALU)進行計算,比如add,sub等等. 

 

  • 資料存取指令還需要資料儲存單元,以儲存從儲存器中獲取的資料,符號擴充套件單元,將指令中的偏移量由16位擴充套件至32位.

  •  此外,多選器會根據控制訊號從多個輸入資料中選擇一個輸出

                                                                                    

 

以上便是實現這些指令所需要的功能部件.

以下是這些功能部件是如何搭配,協作,以實現具體指令.

  • 公共部分,可以實現取出當前指令及程式計數器的自增.取出的指令會被其他部分使用.

  • 分支指令的實現部分,如beq $s1,$s2,25.會讀取兩個暫存器的值,並設定新的指令地址

  • 存取指令的實現部分,如lw $s1,25($s2)  sw $s1,25($s2),會同儲存器讀取資料或者寫入資料.此部分會使用到資料儲存單元,不單單列舉.

                                                 

  • 最後,將所有的部分匯合在一起,形成資料通路的結構.

二.控制器

     資料通路對於處理器的簡單實現並不完整,其中,多選器選擇哪一個資料輸出,資料儲存器到底是進行寫入操作還是讀取操作,ALU執行加法還是減法,暫存器堆中的暫存器是寫入還是讀取,這些判斷是由控制器的控制單元生成的控制訊號進行控制的.

2.1ALU的控制

控制單元會根據指令生成控制訊號,控制ALU的操作,以下是上述指令可能會生成的4位控制訊號.

控制訊號又是如何生成的呢?控制單元會使用指令的2位ALUOp位欄位和funct欄位,通過真值表的方式生成控制訊號.

最後,是指令和控制訊號的對映關係

 上圖中funct欄位為XXXXXX代表當前指令不需要funct欄位即可生成控制訊號.

2.2主控制單元的控制

主控制單元生成的控制訊號會對其他功能部件進行控制,控制訊號長1位

本文中的指令有R型和L型,其具體格式如下,其中x:x表示在指令中的位置.

而根據不同的指令,可能會生成如下控制訊號:

所以,將資料通路和控制單元融合後,會形成處理器的簡單實現,此處理器實現了add,sub,and,or,beq,sw,lw,等指令.淺顏色的線條表示控制訊號.

 特別的,如果需要實現跳轉指令,則需要在上圖的基礎上再新增一部分.首先,跳轉指令j的實現方式是當前PC+4的高4位和j指令的26位立即陣列合而成.所以需要新增一個多選器和控制訊號Jump,當操作碼為2時,該控制訊號有效.

  • j型指令格式

最終的處理器的簡單實現如下:

 三.指令級並行

上文中設計的處理器如果每次只處理一條指令,顯然不符合現在計算機對速度的追求.所以有了流水線技術.它通過多條指令的重疊執行以提高處理器的執行效率.它不提高單挑指令的處理速度,而是提高整體的吞吐率,也可以說是功能部件的利用率來提高處理速度.也有一種被稱之為多發射的技術,可以一次執行多條指令.

3.1流水線

  • 3.1.1流水線的原理

舉例,現在需要處理一批衣服的清洗工作(一批指令的處理),每一件衣服(每一條指令)的處理步驟有4

  1. 放入洗衣機
  2. 清洗後烘乾
  3. 堆疊整齊
  4. 收納入櫃

下圖是清洗一件衣服(每次清洗一件)和流水線(每次清洗一批)清洗的區別:

 

假設:處理指令的每一步最多消耗一個週期.(200ps),所以指令的處理步驟如下:

    將一個步驟稱為一個流水線級數,上述流水線級數為4,當存在相當大量的指令需要執行時,流水線執行效率=一次一條/流水線級數.當然,如果需要執行的指令數量偏少,不會有那麼高的效率,而流水線會引入其他的開銷,也會減低指令執行的效率.

  • 3.1.2流水線冒險

當流水線的下一條指令不能執行時,我們將這種情況稱之為冒險.有三種常見的流水線冒險:

  • 1.結構冒險:因為缺乏必要的硬體支援而導致指令不能再下一個時鐘週期執行的情況.比如,在上圖中,如果只有一個儲存器的話,第一條指令訪問儲存器時,第四條指令也會訪問儲存器,就會發生結構冒險.
  • 2.資料冒險:無法提高指令所需要的資料而導致指令不能再規定的時鐘週期內執行的情況.比如,一條加法指令後緊跟著一條需要加法指令結果進行輸入的減法指令.就會發生資料冒險,因為減法指令只能等待加法指令執行完畢後,在執行,而解決資料冒險的方法稱之為前推,即在加法指令得到結果而又沒有完全執行完時,減法指令可以利用加法指令的結果開始執行,如下圖:

 

  •  3.控制冒險(分支冒險):取到的指令不是預期的指令,即決策依賴於一條指令(分支指令)的結果,而其他的指令正在執行中.比如:分支指令正在執行,將要跳轉到其他地址而非下一條地址.就會發生控制冒險.控制冒險的解決方法一般有兩種:
  • 一種是阻塞:在確定分支地址後再執行下一條該執行的指令,如下圖:
  • 一種是預測,即預測將要執行那條指令,如果預測錯誤,則保證已執行的指令不會生效,然後在正確的分支地址重新執行,如下圖:

 3.2多發射

    多發射是複製自己內部部件的數量,使得每個流水級可以啟動多條指令的技術.

    而多發射必須處理兩個問題,一是發射槽中的指令數量.一個時鐘週期內執行多少條指令,這個問題的解決不同的多發射機制有不同的處理辦法..另一個問題是如何處理控制冒險和資料冒險,現在一般使用一種被稱之為推測的技術

  • 推測:編譯期或處理器推測指令的結果以消除執行其他指令對該結果的依賴.編譯期會新增額外的指令檢查推測結果的正確性並在推測結果錯誤是提供專門的修復方法,而處理器經常會快取推測的結果直至確認推測的正確性.如果推測正確,則將推測結果寫入暫存器堆和儲存器,如果錯誤,則清除快取,並重新執行正確的指令.
  • 發射槽:多發射需要使用發射槽,發射槽是在給定時鐘週期內能夠發射指令的位置.類似於短跑比賽的起點位置.

 

多發射的實現主要有兩種,他們的主要區別在於決策是在指令編譯階段做出還是在指令執行做出.

  • 3.2.1靜態多發射處理器

靜態多發射的決策在指令編譯階段做出,靜態多發射會在給定時鐘週期內發射多條指令,稱之為發射包,發射包可以在編譯期生成,也可以在有處理器動態生成,不同的靜態多發射在於如何處理潛在的資料冒險和控制冒險.

  • 3.2.2動態多發射處理器

動態多發射的決策在指令執行階段做出.動態多發射處理器通常包含動態流水線排程:

  • 動態流水線排程:對指令進行重新排序以避免阻塞的硬體支援

在這種處理器中,流水線被劃分為3個部分:

  • 取指與發射單元:取指並譯碼,然後將每條指令傳送到相應的功能單元執行.
  • 功能單元:每個功能單元都有自己的緩衝區(保留站),用來儲存運算元和操作,當緩衝區包含了需要的所有運算元且功能單元就緒時,會計算結果.安全後,將結果寫回暫存器堆和儲存器.
  • 提交單元:提交單元含有一個緩衝區,稱為重排序緩衝區,用於暫時儲存執行結果,安全時,就會將結果寫回暫存器對或儲存器.

                    

其中亂序執行值執行的指令被堵塞時,不會影響導致的指令等待,順序提交指流水線的執行結果以取指順序寫回.

 

注:本篇文章由《計算機組成與設計》第四章-處理器  總結而來,由於本人非計算機專業出身,許多知識實在是理解不能,總結有相當多的遺漏,乃是我看不懂所致,更別說其中內容肯定有大量的理解錯誤,萬望大家提出批評,我好改正。

相關文章