從計算機CPU設計談P\NP問題(1)

開天闢地發表於2014-11-01

(接“從計算機CPU設計談P\NP問題(0)”

公共匯流排與狀態線和控制線不同。一般來說,狀態線和控制線只有0和1狀態,它們將資料只是單向的輸送。而做為公共線路的匯流排BUS,一般要具有三態,即0狀態、1狀態和高阻狀態(即是斷開)。如此,公共匯流排可以雙向傳遞訊號。公共匯流排上傳遞訊號是廣播式的,在相同時間段內只能有一個器件將資訊傳到匯流排上,其他器件只能接收,不然也會造成資訊混亂。

1. 狀態線和控制線

從圖1-2我們看到,控制線資訊要由控制器向其他裝置傳遞。裝置狀態標誌線要將狀態資訊傳遞到控制器。匯流排BUS上可以來回傳遞資料。圖中畫出的導線都代表多條。器件狀態標誌線我們只考慮了累加器da的資料是否為0和是否為負數的狀態,其他裝置的狀態暫時不用,因而也就沒有畫出來。比如,運算器ALU可能產生結果溢位,這條狀態線在圖1-1的表中有,而我們在此並未畫出。裝置的狀態線是不是都要考慮,這與我們設計計算機CPU的需要有關。譬如,在多個處理器的情況下,大家公用的裝置,需要互斥使用,那就要設定裝置忙閒標誌,一個處理器就可以不加考慮。

2. 必不可少的時鐘節拍

對於可控裝置來說,需要使用它們的狀態變換完成特定的功能,與之配套的控制線是不可缺少的。控制線有步驟地發出不同的控制資料,這樣就可以讓不同的裝置相互配合。要使它們配合步調一致,就必須有時鐘訊號來統一。圖1-2中雖然沒提到時鐘訊號和初始化訊號,但我們要明白,沒有這兩個重要訊號的統一管理,計算機根本就不能完成程式執行的過程。

由於時鐘是高速的脈衝訊號。一般地說,計算機主要時脈頻率越高,計算機執行的速度越快。但是裝置的狀態變換速度不都能跟上時鐘的高頻,對於一臺計算機來說,要做到裝置器件能夠整齊劃一的配合,必須考慮共同能夠完成動作的時間。於是這才有了節拍器這種時間控制裝置。圖1-2畫的是簡圖,更詳細的組成結構,一定要在具體的時間中才能體現出來。

3. 計算機資訊處理基本過程

針對圖1-1的控制真值表和圖1-2的結構,我們來介紹一下計算機資訊處理的基本過程。

1) 系統初始化

計算機加電之後對所有的器件都要設定一個初始狀態,這一過程就叫系統初始化。我們設計的系統初始化訊號往往是低電位有效,也就是讓這種訊號在計算機執行時保持高電位,而是在啟動的一瞬間給一個極短的低電位脈衝,讓這個訊號從高電位變到低電位的瞬間有效。這叫後沿控制。初始化的過程不是用各個器件執行中的控制訊號確定的,而是統一用初始化訊號來確定的。

系統初始化之後,每個器件的狀態訊號就會確定下來,通過狀態線傳遞到控制矩陣。就是預先設定了圖1-1中表的各項狀態線的值。

2) 節拍器啟動與指示節拍

節拍器是一種叫做環行計數器的器件。節拍器在系統初始化時,將一個暫存器的一位值設定為1,其他各位都設定成0。此後,它是在時鐘脈衝上升沿的時刻,將預先由初始化設定好的“1”沿著環行計數器的每一位向一個方向移動,“1”就如同鐘錶的指標在環行計數器中順時針或逆時針方向移動。每一次移動都是一個等時的節拍,並將每個節拍將“1”從前一條導線傳遞給相鄰的後面導線,其餘的導線都變成“0”值。節拍器能夠迴圈地標識極短時間段的順序,每一個節拍佔用的時間長度相同。實際上節拍器是一種在指令執行時記錄時間長度的計時器。

3) 節拍線、狀態線和控制線的關係**

計算機的節拍線是直接由時鐘來驅動的,而時鐘是一種石英振盪器,加電之後就發出固定頻率的脈衝訊號,而且一直會震盪下去。雖然石英振盪器會不停地震盪,但我們可以設法控制節拍器的狀態,可以設計邏輯電路控制節拍器的輸出,讓節拍器的所有節拍線的值都為0,這樣就會使節拍器對系統失去驅動作用,也就是能夠停止計算機的執行。

初始化之後的狀態和節拍值的變化,如果能夠去控制組成裝置去按照需要變化,那麼就可以用裝置的不同狀態變化來實現某種功能。這種思想是計算機設計最關鍵的一環。

例如,圖1-2的計算機結構,每個暫存器都有輸入輸出控制線,儲存器有選址控制線和輸入輸出控制線,運算器alu具有瞬間運算功能,同時也有輸出控制線,那麼我們就可以用狀態線和節拍線的變化,按步驟實現運算。

以圖1-1中表的解釋欄“編號”為6號開始的行,可以讓指令儲存器的地址發生轉移。在此之前有0、1、2三個節拍,分步將程式計數器pc確定的儲存單元的值送到了暫存器ir。如果我們要改變程式儲存器的儲存單元地址,可以將改變的地址寫在那個儲存單元,在4號節拍將ir的值傳送到pc,那麼就可以改變下一個指令儲存器的地址。

  • 表中程式計數器pc有加1控制線inc、輸入控制線pcw、輸出控制線pco;
  • 指令儲存器有地址輸入控制線im、寫控制線iw、讀控制線io;
  • 狀態線zf、nf、ov中ov的值影響pc輸入控制線和指令暫存器ir的輸出控制線的變化。

將這些控制線的值依據節拍和狀態變化填寫好,那麼就可以實現“當標誌線ov=1的時候,指令儲存器的地址就可以實現轉移”這個功能。我們將這個功能給個二進位制編碼“000110”就可以代表它,從而實現了指令的二進位制編碼形式。這就實現了計算機指令的二進位制數表示,並且對應了電路的導線數量。

總結一下,初始由節拍線和裝置狀態線來決定每一條控制線,而控制線的值立即在時鐘上升沿(從0變到1的時刻)使裝置的控制線發生了變化,這樣在自動轉移的下一個節拍,又有新的狀態線值決定新的控制線值,如此就可以確定新的狀態。如此不斷地迴圈往復,組合起來就可以完成由裝置構成確定的各種功能。

以上詳細設計問題可參考《自己設計製作CPU與微控制器》一書的中篇內容。

2014-11-1晚 (待續)

enter image description here

相關文章