10.1 組合邏輯設計
10.1.1 組合邏輯控制單元框圖
CU外特性
控制單元的時鐘輸入實際上是一個脈沖序列,其頻率即為機器的主頻,它使CU能 按一定的節拍發出各種控制訊號 。
節拍訊號
節拍的寬度應滿足數據資訊透過數據總線從源到目的所需的時間。以時鐘為計數脈沖,透過一個計數器,又稱節拍發生器,便可產生一個與時鐘周期等寬的節拍序列。
微操作的節拍安排
安排微操作節拍時應註意以下三點:
- 微操作的先後順序不得隨意更改 ,故安排微操作節拍時 必須註意微操作的先後順序 。
- 凡是被控制物件不同的微操作, 若能在一個節拍內執行,應盡可能安排在同一個節拍內 ,以節省時間。
- 如果有些微操作所占時間不長,應該將它們安排在一個節拍內完成,並且允許這些微操作有先後次序。
10.1.2 微操作的節拍安排
采用同步控制的方式
一個機器周期內有3個節拍(時鐘周期)
決定一個機器周期內包含多少個節拍的因素
- 需要產生的控制訊號的數量
- 控制訊號的復雜程度
- 控制訊號之間是否能夠並列
所以不同機器一個機器周器的節拍數不一定是一樣的
假設現在機器CPU內部結構采用非總線方式
各微操作的節拍安排
取指周期
間址周期
執行周期
不同的執行指令,它的微操作節拍安排也不一樣
CLA(清空ACC)
將累加器(ACC)清空,所以我們可以把這個微操作安排再任何一個節拍中,這邊我們放在T2中
COM(取反)
將ACC中的內容每一位按位取反,再把結果存放到ACC中
這條指令和CLA差不多,我們也可以把這個微操作放在任何一個節拍中,這邊我們也放在T2中
SHR(右移)
這裏的右移指 算術右移, 即符號位不動,這個也需要2個微操作,但是可以並列進行,所以我們還是放在T2中
CSL(迴圈左移)
和SHR差不多,只不過這裏我們要把AC的第0位送到AC的最低位
STP(停機指令)
機器裏面都有停機標記,我們只要將停機標記置成相應的值就可以了,同樣我們把這個微操作放在T2中
ADD X(加法)
加法操作,把 X這個記憶體單元保存的內容 和累加器中的內容相加,結果保存在累加器中。由於取指周期我們已經把指令從記憶體單元取出放入了IR,那麽在執行周期我們需要這個運算元在記憶體單元中取出完成相應的加法操作
STA X(存數)
把累加器中保存的數據存入到給定的記憶體單元,儲存單元的地址就是X
LDA X(取數)
把X對應的記憶體單元中的內容取出,保存在累加器中
JMP X(跳轉指令)
跳轉到給定的地址(X),不需要訪存,直接把這條指令(X所對應的記憶體單元的指令在取指周期已送到IR中)送給PC就行,那下一條執行的指令就是它,即跳轉。所以我們還是放在T2這個節拍上
BAN X(條件跳轉)
如果上一條指令的結果為負數,則跳轉到X;為正數則繼續按順序執行
假設上一條指令的結果保存在累加器中,則可以透過累加器的符號位來判斷,如果A0為0,為正數,則繼續按順序執行;如果A0為1,為負數,則跳轉
這邊為什麽沒有把PC+1送進去呢?
因為我們在取指周期已經將相應的微操作執行了
中斷周期
中斷期間要做的3件事
- 保存斷點
- 形成中斷服務程式的入口地址
- 關中斷
中斷隱指令並不是一條指令,它是硬件要做的微操作,中斷隱指令它只完成了一條指令周期當中中斷周期這個機器周期要完成的若幹個微操作
10.1.3 組合邏輯設計步驟
列出操作時間表
FE(取值周期)
IND(間址周期)
EX(執行周期)
寫出微操作命令的最簡運算式
以 M(MAR)—>MDR 為例
畫出邏輯圖
特點:
10.2 微程式設計
10.2.1 微程式設計思想的產生
由於這些微指令是以二進制程式碼形式表示的,每位代表一個控制訊號,因此 逐條執行每一條微指令,也就相應地完成了一條機器指令的全部操作 。微程式控制單元的核心部件是一個 控制 記憶體。
這條微指令裏的兩個1表示相對應的兩個微操作,它的控制訊號要在這個節拍中產生,並且由這兩個1控制相應的部件。所以每一個位置表示了某一種微操作命令
10.2.2 微程式控制單元框圖及工作原理
上面我們所一條機器指令對應一個微程式
控制記憶體中的微程式個數應為機器指令數再加上對應取指、間接尋址和中斷周期三個微程式。
微程式控制單元的基本框圖
微指令的基本格式共分為兩個欄位,一個為 操作控制欄位 ,該欄位發出各種控制訊號;另一個為 順序控制欄位 ,它可指出下條微指令的地址,以控制微指令序列的執行順序
工作原理
舉例:
假設現在使用者程式有這幾個微程式:LDA、ADD、STA、STP
在記憶體和控存的分布如下所示
取指階段
執行階段
第1條指令是LDA指令,執行LDA微程式
LDA指令經過取指、執行後,下面接著ADD指令,也有取指、執行過程
執行取指微程式
10.2.3 微指令的編碼方式
微指令的編碼方式 又稱為 微指令的控制方式 ,是指對微指令的控制欄位進行編碼,以形成控制訊號。
直接編碼方式
在微指令的操作控制欄位中, 每一位代表一個微操作命令 ,這種編碼方式即為直接編碼方式。
這種方式含義清晰,而且只要微命令從控存讀出,即刻可由控制欄位發出命令, 速度快 。但由於機器中微操作命令甚多,可能造成控存 容量極大 。
欄位直接編碼
這種方式就是將微指令的操作控制欄位分成若幹段,將一組互斥的微操作命令放在一個欄位內,透過對這個欄位譯碼,便可對應每一個微命令。這種方式因靠欄位直接譯碼發出微命令,故又有顯示編碼之稱
采用欄位直接編碼方法可用較少的二進制資訊表示較多的微操作命令訊號。由於增加了譯碼電路,使微程式的執行速度稍微減慢。
至於操作控制欄位應分幾段,與需要並列發出的微命令個數有關。每段的長度可以不等,與具體要求互斥的微命令個數有關。
欄位間接編碼
這種方式一個欄位的某些微命令還需由另一個欄位中的某些微命令來解釋,由於不是靠欄位直接譯碼發出微命令,故稱為欄位間接編碼,又稱為 隱式編碼。
這種方法雖然可以 進一步縮短微指令字長 ,但因削弱了微指令的並列控制能力,因此通常用做欄位直接編碼法的一種輔助手段。
混合編碼
這種方法是把 直接編碼和欄位編碼混合使用 ,以便能綜合考慮微指令的字長、靈活性和執行微程式的速度等方面的要求。比如將常用微指令用直接編碼方式,不常用微指令用欄位直接或間接編碼
其他
微指令中還可設定常數碼段,用來提供常數、計數器初值等。常數碼段還可以和某些解釋位配合,如解釋位為0,表示該欄位提供常數;解釋位為1,表示該欄位提供某種命令,使微指令更靈活。
10.2.4 微指令序列地址的形成
直接由微指令下地址欄位指出
大部份微指令的下地址欄位直接指出了後續微指令的地址。這種方式又稱為 斷定方式 。
根據機器指令的操作碼形成
當機器指令取至指令寄存器後,微指令的地址由操作碼經微地址形成部件。微地址形成部件實際上是一個編碼器,其輸入為指令操作碼,輸出就是對應該機器指令微程式的首地址。
它可采用PROM實作,以指令的操作碼作為PROM的地址,而相應的儲存單元內容就是對應該指令微程式的首地址。
增量計數器法
對於順序地址,微指令可以使用增量計數法,即( C M A R ) + 1 → C M A R來形成後續微指令的地址。
分支轉移
當遇到條件轉移指令時,微指令出現了分支,必須根據各種標誌來決定下一條微指令的地址。
其中,轉移方式指明判別條件,轉移地址指明轉移成功後的去向,若不成功則順序執行。
透過測試網絡形成
微指令的地址還可以透過測試網絡形成。圖中微指令的地址分兩部份,高段h為非測試地址,由微指令的H段地址碼直接形成;地段1為測試地址,由微指令的L段地址碼透過測試網絡形成。
由硬件產生微程式入口地址
當電源加電後,第一條微指令的地址可由專門的硬件電路產生,也可由外部直接向CMAR輸入微指令的地址,這個地址即為取指周期微程式的入口地址。故響應中斷時,可由硬件產生中斷周期微程式的入口地址。
當出現間接尋址時,也可由硬件產生間址周期微程式的入口地址。
多路選擇器可選擇以下4路地址:
10.2.5 微指令格式
微指令格式與微指令的編碼方式有關,通常分為 水平型微指令 和 垂直型微指令 兩種。
水平型微指令
水平型微指令的特點是 一次能定義並執行多個並列操作 。從編碼方法看,直接編碼、欄位直接編碼、欄位間接編碼和欄位混合編碼都屬於水平型微指令。
垂直型微指令
垂直型微指令的特點是 采用類似機器指令操作碼的方式 ,在微指令字中,設定微操作碼欄位,由微操作碼規定微指令的功能。通常一條微指令有1~ 2個微命令,控制1 ~ 2種操作。
兩種微指令格式的比較
- 水平型未執行比垂直型微指令 並列操作能力 強、效率高、靈活強。
- 水平型微指令執行一條機器指令所需的微指令數目少,因此 速度 比垂直型微指令的速度快。
- 水平型微指令用較短的微程式結構換取較長的微指令結構,垂直型微指令正相反,它以較長的微程式結構換取較短的微指令結構。
- 水平型微指令與機器指令差別較大 ,垂直型微指令與機器指令相似。
10.2.6 靜態微程式設計和動態微程式設計
靜態微程式設計
通常指令系統是固定的,對應每一條機器指令的微程式是電腦設計者實作編好的,因此一般微程式無需改變,這種微程式設計技術即成為靜態微程式設計,其控制記憶體采用 ROM 。
動態微程式設計
如果采用 EPROM 作為控制記憶體,人們可以透過改變微指令和微程式來改變機器的指令系統,這種微程式設計技術稱為動態微程式設計。動態微程式設計由於可以根據需要改變微指令和微程式,因此可以在一台機器上實作不同類別的指令系統,有利於仿真。
10.2.7 毫微程式設計
微程式 可看作是 解釋機器指令 的, 毫微程式 可看作是 解釋微程式 的,而組成毫微程式設計的優點是用少量的控制記憶體空間來達到 高度的並列。
毫微程式設計采用兩級微程式的設計方法。
CMAR1為第一級控存地址寄存器,CMDR1 存放從第一級控制記憶體中讀出的微指令,如果該微指令只產生一些簡單的控制訊號,則可以透過譯碼,直接形成微操作命令,不必呼叫第二級。
如果需呼叫第二級控制記憶體時,則將毫微程式的地址送至CMAR2 ,然後由第二級控制記憶體中讀出的微指令去直接控制硬件。
垂直型微指令不是和水平型微指令一條一條地對應,而是由水平型微指令(稱為毫微指令)組成的毫微程式去執行垂直型微指令的操作。
二級控制記憶體雖然能減少控制記憶體的容量,但因有時一條微指令要存取兩次控制記憶體,影響了速度。
10.2.8 序列微程式控制和並列微程式控制
完成一條微指令也分兩個階段:取微指令和執行微指令。由於取微指令和執行微指令的操作是在兩個完全不同的部件中完成的,因此可將這兩部份操作秉性進行,以縮短微指令周期,這就是並列微程式控制
當采用並列微程式控制時,為了不影響本條微指令的正確執行,需增加一個微指令寄存器來暫存下一條微指令。由於執行本條微指令與取下一條微指令是同時進行的,因此當遇到需要根據本條微指令的處理結果來決定下條微指令的地址時,就不能並列操作,此時可延遲一個微指令周期再取微指令。
在第7章-指令系統中提過:二級流水
10.2.9 微程式設計舉例
執行階段的微操作及節拍安排
微程式設計控制單元的主要任務是編寫對應各條機器指令的微程式,具體步驟是首先寫出對應機器指令的全部微操作及節拍安排,然後確定微指令格式,最後編寫出每條微指令的二進制程式碼(稱為微指令碼點)。
在取指微程式中,每一條微指令都需要增加一個將微指令下地址欄位送至CMAR的微操作,記作A d ( C M D R ) → C M A R,而這一操作只能由下一個時鐘周期T的上升沿將地址打入到CMAR內。至於取指微程式的最後一條微指令,其後續微指令的地址是由微地址形成部件形成的,而且也只能由下一個T的上升沿將該地址打入到CMAR中,即微地址形成部件→ C A M R 。為了反映該地址與操作碼有關,故記作O P ( I R ) →微地址形成部件→ C M A R。
微操作指令共20個,微指令共38條。CLA、COM、SHR、CSL、STP為非訪存指令,ADD、STA、LDA為訪存指令,JMP、BAN為轉移類指令。
確定微操作格式
微指令的格式包括微指令的編碼方式、後續微指令的地址形成方式、微指令字長等3個方面。
- 微指令的編碼方式:可采用直接編碼方式,由微指令控制欄位的某一位直接控制一個微操作。
- 後續微指令的地址形成方式:可采用由指令的操作碼和微指令的下地址欄位兩種方式形成後續微指令的地址。
- 微指令字長:微指令字長至少取26位。
如果將CMDR的下地址欄位Ad(CMDR)直接接到控制記憶體的地址線上,並由下一個時鐘周期的上升沿將該地址單元的內容(微指令)讀到CMDR中,便能做到在一個時鐘周期內讀出並執行一條微指令。同理,也可將指令寄存器的操作碼欄位OP(IR)經微地址形成部件形成的後續微指令的地址,直接送到控制記憶體的地址線上。這兩路地址可透過一個多路選擇器,根據需要任選一路。
這樣,10條機器指令共對應20-2=18個微操作和38-19=19條微指令。為了便於擴充,操作控制欄位取24位元,下地址欄位取6位。
在確定微指令格式機器字長的過程中,還可將一些微操作命令合用一位程式碼來控制,這樣可大大壓縮微指令的操作控制欄位,縮短微指令字長。
舉例:
假設規定微操作對應的控制碼第幾位如下:
微指令控制碼第0位:PC—>MAR
微指令控制碼第1位:1—>R
......
編寫微指令碼點