本節書摘來自華章計算機《計算機系統:系統架構與作業系統的高度內建》一書中的第3章,第3.6節,作者:(美)拉姆阿堪德蘭(ramachandran, u.)(美)萊希(leahy, w. d.)著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
我們來考慮處理器控制單元不同風格的實作。
3.6.1 微程式控制
在3.5節中,我們給出了微程式風格的控制單元設計。這種風格的确很優雅,也很簡單且易于維護。使用微程式設計的好處是,控制邏輯就像rom中的一段程式,是以非常易于維護。但是,微程式設計有兩個潛在的低效之處。第一個與時間有關。為了在某個時鐘周期中産生控制信号,需要向rom提供一個位址,然後再經過一段稱為通路時間的延遲後,控制信号才在資料通路上可用。這個時間代價發生在每個時鐘周期的關鍵路徑上,是以成為了性能損失的一個原因。然而,通過預取,即在一條指令執行時提前取出下一條指令,這個時間代價可以被屏蔽。第二個與空間有關。前面小節中給出的設計屬于微程式設計中的水準微碼風格,在這種設計中整個控制通路中的每個控制信号都與微指令中的一位相對應。從之前讨論的情況來看,對于大多數微指令,這些位中的大部分都是0,隻有少數為1,與該時鐘周期所需的控制信号吻合。例如,在ifetch1中,隻有drpc、ldmar、lda是1,微指令中的其他位都是0。水準微碼在空間上的低效可以通過采用一種稱為垂直微碼的技術來克服,而垂直微碼與寫彙編相類似。不同微指令中同一位的位置表示了不同的控制信号,這又依賴于每條垂直微指令中的操作碼(opcode)字段。垂直編碼更具技巧性,因為各條微指令中同一位的位置表示的控制信号需要互斥。
3.6.2 硬連線控制
我們仔細研究3.5節中設計的使用水準微碼的rom究竟表示了什麼是有益的。它實際上是一個真值表,給出了資料通路所需要的所有控制信号。rom的行表示狀态,清單示的是函數(每一列對應一個控制信号)。基于前面對邏輯設計的介紹,讀者應該知道如何合成每列所需要的最小布爾邏輯。這些邏輯函數比真值表更有效。
我們可以使用組合邏輯電路來實作控制信号對應的布爾邏輯函數。函數的功能就是在某個狀态下給出的某些控制信号。
例如,drpc的布爾函數可能是:
使用and/or門,或者像nand/nor這樣的通用門,我們可以生成所有的控制信号。我們将這種類型的設計稱為硬連線控制,因為控制信号都是使用組合邏輯電路來實作的(不容易修改,是以稱為硬連線)。這樣的設計在時間和空間上都很有效(不需要rom查找的通路時間,也不需要為時鐘周期内沒有産生的控制信号浪費空間)。過去有一些反對者認為,因為使用随機邏輯來實作布爾函數,是以這将導緻噩夢般的維護工作。
然而,可程式設計邏輯陣列(pla)和現場可程式設計門陣列(fpga)的出現使得這些反對蒼白無力。例如,pla将所需要的邏輯組織成二維陣列結構,進而讓随機邏輯有了結構。我們在圖3-31中給出了這種結構。
圖3-31 pla。左邊的輸入來自狀态寄存器和影響處理器(如ir和z寄存器)狀态的資料通路元件。每個輸出是輸入的sum-of-product的結果,這些輸出就是資料通路所需的控制信号
輸出是驅動資料通路所需的控制信号(drpc、dralu等)。輸入是處理器所處的狀态(ifetch1、ifetch2等)和資料通路中産生的條件(ir和z寄存器的内容等)。and闆中的每個門都獲得所有的輸入(在正确而完整的版本中是這樣的)。類似地,or闆中的每個門也都獲得and闆産生的所有結果。pla之是以稱為pla,是因為它上面的邏輯可以通過選擇哪些輸入傳送給and闆和or闆而“程式設計”。每個pla輸出都是邏輯乘的邏輯加(sum-of-product)的結果。邏輯乘(product)是在and闆中實作的。邏輯加(add)是在or闆中實作的。這種設計将所有控制邏輯都集中在一起,就有了微程式設計的結構優勢。同時,因為控制信号使用組合邏輯電路産生,是以它沒有硬連線設計的不足。與随機邏輯的設計相比,它在空間的使用上稍微有些劣勢,因為每個and門的扇入數都與pla的總輸入數相同,而每個or門的扇入數都與and闆中and門的數量相同。無論如何,pla的結構化優點和規則性遠遠超過了它的劣勢,vlsi設計已經離不開它。
最近,fpga變得非常流行,它用來為複雜的硬體設計迅速制造原型。fpga其實是pla的繼承者,它含有邏輯元件和存儲元件。這些元件之間的連接配接可以“現場”進行程式設計,fpga正是由此得名。這樣的靈活性使得設計上的缺陷更容易修正,甚至在部署之後依然如此,是以也提高了硬連線設計的可維護性。
3.6.3 在兩種控制設計風格中選擇
在這兩種風格之間進行選擇受到許多因素的影響。我們已經給出了兩種控制風格的優勢和劣勢。也許由于fpga的出現,許多針對硬連線控制可維護性的争論已經停止了。盡管如此,對于處理器的基本實作(即非流水線),或者對于複雜指令的實作(如x86體系結構中的那些),更傾向于使用微程式控制,因為它很靈活也很容易快速修改。另一方面,我們将在流水線處理器的有關章節中看到,高端流水線處理器的實作非常适合使用硬連線控制。表3-2總結了這兩種設計思路的優劣。