自己設計出一個處理器是一件非常有意義的工作。那現在,我們離這個工作的目標只差最后一點點了,而最后的這一步,又是非常關鍵的。那就是把我們之前所產生的這些控制信號集成起來,并且,讓這個處理器能夠自動地工作。
現在我們已經分析完了這個示例的指令系統中所有的指令,我們也知道了每一條指令應該設置怎么樣的控制信號。
因此,我們現在就已經完成了這5個設計步驟當中的第4步。接下來我們要做的就是考慮如何集成這些控制信號,形成完整的控制邏輯。
那我們先把之前的數據通路中的實現細節隱藏起來,就由一個方框來表示,那控制這個數據通路正常運轉的控制信號,一共有這樣8個,那這些控制信號是怎么產生的呢?還是要從來自指令存儲器的指令編碼開始說起。之前,我們已經從指令編碼當中提取了若干的信號作為數據通路的輸入,但我們只要回憶一下指令格式就可以知道,還有兩個位域我們沒有提及,這就是opcode和function。而正是這兩個位域是用來表明指令執行什么樣的操作。因此,我們正是需要用這兩個信號,來產生下面這些控制信號。實現這一部分功能的電路,就被稱為控制邏輯,也就是我們之前提到的控制器。要想知道控制邏輯是怎么實現的,我們還是先來看一個例子。
我們以add指令為例。當我們取回一條指令的編碼,如果是一條add指令,那它所需要執行的操作就是這兩個,一是將兩個寄存器當中的數相加,并保存到另一個寄存器當中,然后就將PC+4更新到PC寄存器當中。對于這條指令所需要的各個控制信號的值,我們之前也已經詳細分析過。例如,這個RegDst信號應該為1,而RegWr信號也應該為1。又比如,這個MemtoReg信號應該為0。
那我們把這些信號的值都摘出來,匯總成一張表格。在這張表中,就是執行這條add指令時,各個控制信號的值。而add指令對應的opcode域的值和function域的值,我們也列在上面。
那用同樣的方法,我們也可以列出減法指令所對應的所有控制信號的值,以及其他指令各自對應的控制信號的值。這樣,我們就得到了一張完整的表格,描述了每條指令和每個控制信號之間的關系。
我們是用一列一列的方式得到了這張表格,然后我們換一個角度來看,如果按行來看,那我們就可以得到每一個控制信號的邏輯表達式。我們就以第一行這個RegDst信號為例。
那從這一行可以看出,只有當前指令是加法或者減法指令時,RegDst這個控制信號才需要為1,其他時候都為0就可以了。那我們可以把這個控制信號的邏輯表達式寫出來,如果我們有一根信號標明現在是加法指令,即為add;另外有根信號標明現在是減法指令,即為sub,那這個RegDst的控制信號就等于add和sub這兩個信號進行或操作。那我們還得進一步分析,add和sub這兩個信號應該如何生成。
那我們先來看add指令的編碼。add指令是一條R型指令,根據R型指令的位域劃分,其opcode域都應該為0,而function域則指明了在R型指令當中細分的指令類別。因此,對于add指令來說,其opcode域為全0,而function域的第0位到第4位為0, 第5位為1。這樣一種信號的組合就代表了當前指令是add指令。那我們就可以把add指令的邏輯表達式寫出來。
我們先用一根rtype信號來表示當前是一個R型指令,然后我們來看后面的信號,就是function域的第5位,對于add指令來說,這一位應該為1,而function的第4位,一直到第0位,都應該為0。所以我們將function 0到4,每一位都先取非,
然后與function域的第5位,以及這個rtype信號,一起進行與操作,這樣就可以得到了add信號。我們用類似的方法也可以得到sub這個信號。
那么rtype這個信號又是如何產生呢? 這非常地簡單,因為R型指令就是opcode全為0。所以,我們只需要把opcode中的每一位都先取非,然后進行與操作,那么當opcode全為0時,這個rtype信號就會為1。我們把這些邏輯表達式連起來,就可以得到了RegDst這個控制信號的邏輯表達式。
有了這樣的邏輯表達式,我們就可以用與門和非門畫出產生這個控制信號的電路圖來。這樣,對于這一個控制信號來說,它的控制邏輯就已經是確定的了。
那我們用同樣的方法還可以得到其他控制信號的邏輯表達式。例如ALUSrc這個信號,我們通過查詢剛才的表格可以知道,它是在 ori指令、load指令和store指令,這三條指令執行時是有效的。因此我們注意下面,我們只要用類似的方法得到ori、lw和sw,這三條指令對應的邏輯表達式,我們就可以得到ALUSrc這個控制信號的邏輯表達式了。
類似地,我們就可以得到所有控制信號的邏輯表達式。那我們注意到,在下面這個區域,所有的信號都是來自指定的編碼了。而且,在對一些信號進行取非操作之后,這些邏輯表達式全都只有與操作。而上面這個區域的表達式都是在下面這些信號的基礎上,進行了或操作,從而產生了最終的控制信號。
因此,我們可以畫出這樣的一個控制器的示意圖。
我們把指令編碼中opcode的這六位和function的這六位連出來,先接到一組由與門構成的邏輯電路中。那么這一個邏輯電路就實現了上一頁中下面這片區域的那些表達式,從而產生了一組中間信號,那么再將這些信號接入一組由或門組成的邏輯電路,這組邏輯電路就實現了上一頁中上半部分那些邏輯表達式。最后就可以得到了我們想要的所有的控制信號。
那么這些邏輯電路就是我們剛才所提到的控制邏輯,這樣我們就有了控制器的實現。 在這樣的電路實現下,我們固定地將取回指令的最高六位和最低六位,連接到控制邏輯中,那經過了這些與門和或門之后,就會自動地生成對應的控制信號。而這些控制信號的值,肯定符合我們剛才對每條指令分析的需求,這樣在指令執行的過程中,就不需要任何智力因素的介入去分析當前到底是什么指令,以及需要產生什么樣的控制信號。一切都是通過這樣的控制邏輯電路自動生成的,這樣,處理器就能一條接一條地取回指令自動地執行下去。
現在我們已經完成了控制信號的集成,并形成了完整的控制邏輯電路,這最后一步工作,我們也就已經完成了。
現在,我們已經完成了一個處理器結構設計的步驟了。雖然這個處理器只是單周期的,而且也只支持6條指令,非常地簡單。但是它確實是一個可以使用的處理器了。如果你有興趣,還可以繼續深入到物理設計的環節,把它真正地制造出來。
編輯:hfy
-
處理器
+關注
關注
68文章
19299瀏覽量
230010 -
控制信號
+關注
關注
0文章
166瀏覽量
11978 -
控制邏輯
+關注
關注
0文章
14瀏覽量
2346
發布評論請先 登錄
相關推薦
評論