CPU,全稱Central Processing Unit,即中央處理器。
何為CPU? 計算機必須能夠自動地從主存中取出一條條指令執行,專門來執行指令的就是CPU。
一、指令的執行過程
為了理解CPU的工作原理,我們首先了解一下指令的執行過程:
(1)取指令並計算下一條地址。(程序計數器PC、指令寄存器IR)
應該明確的是,指令存放在地址連續的內存空間中,其地址是由PC即程序計數器給出。故指令執行的第一步就是根據這個PC中的地址去內存中找到指令,並取出它,放在一個指令寄存器(IR)中,以供后續操作。然后,計算下一條指令地址,賦給PC。
(2)對指令操作碼進行譯碼。(指令譯碼器)
不同指令的操作碼不同,實現的功能也不同。這個過程就是根據不同的指令中包含的操作碼(op),產生不同的控制信號,在物理邏輯上,控制實現不同的操作。
(3)計算源操作數地址並取源操作數。
簡單講就是,根據具體指令,確定尋址方式,再根據尋址方式去確定源操作數地址計算方式,再根據這個地址去找源操作數,找到后取它。
(4)數據操作。
對源操作數進行具體的數據操作。如可能是進行加減乘除運算。
(5)目的操作數地址計算並存結果。
與(3)對應,根據尋址方式計算目的操作數地址,再將(4)的結果寫入目的地址處。
需要說明的是,對所有指令,(1)(2)過程都是必不可少的,而(3)(4)(5)則由具體的指令操作碼產生的控制信號控制,可能有也可能不執行。如jump跳轉指令就無需(3)-(5)。
二、CPU的基本功能和基本組成概述
不管CPU多復雜,其組成部分我都可以分成控制部件(control unit)和數據通路(datapath)。先對這兩個概念簡單的了解:
1. 數據通路
數據通路是指指令執行過程中數據所經過的路徑,包括路徑上的部件,如ALU(算數部件)、通用寄存器、狀態寄存器等等。數據通路由控制部件進行控制。形象的說,datapath是數據流動的“路”,當然路上有許多“關卡”,“關卡”的開關由控制部件決定,而控制部件又是由指令產生的控制信號決定的。
2.控制部件
如上面提到的,控制部件根據具體指令功能的不同,產生對數據通路的控制信號,並正確控制指令的執行過程。
一個簡易的CPU邏輯圖是這樣的:
(圖片來自網絡)
可以從圖中大概看到,主要控制邏輯是:
程序計數器PC,即指令計數器,指令指針IP,存放指令的地址。順序執行時,PC中拿出來地址,通過地址線,去拿地址,然后根據地址,指令寄存器通過數據線去取出這條指令,並存放在指令寄存器IR中,指令寄存器將指令傳送指令譯碼器,譯碼器將操作碼OP譯碼,傳送給操作控制信號形成部件,並生成相應的控制信號。
上述過程是在時序信號的控制下進行的;這個時序信號,是由專門的“時序信號產生部件”產生,而這個部件最終由“脈沖源”與“啟停控制線”控制。即,脈沖源產生一定頻率的脈沖信號,作為整個機器的時鍾脈沖,這是整個CPU的基准信號。啟停控制線是在需要時開放或封鎖脈沖源的部件,以此來控制時序信號的產生和停止。而時序信號產生部件就是以時鍾脈沖為基准,產生不同指令對應的周期、節拍、工作脈沖等時序信號,實現對機器指令執行過程的控制。
生成控制信號后,則會根據這個信號,去控制其他邏輯部件,如取操作數、運算、送目的地址等。
三、CPU數據通路
上面提到了,數據通路就是數據存儲、處理和傳送的途徑。討論實現的控制部件是更加深入的學習內容,對於理解CPU邏輯,僅僅需要知道它完成了什么功能;而數據通路的理解是徹底理解CPU工作流程的不可或少的部分。下面詳細分析數據通路。
指令執行過程中用到的元件有兩類:組合邏輯元件(操作元件如ALU),和存儲元件(也稱狀態元件,如通用寄存器)。
1. 組合邏輯元件
即輸出只取決於當前的輸入的元件。如加法器、多路選擇器、算術邏輯部件、譯碼器等等。他們有的需要控制信號參與,有的則不需要,但他們的共同之處就在於,給定輸入,立馬得到輸出。
2. 狀態元件
具有存儲功能的元件,輸入狀態在時鍾控制下被寫入到電路,並保持輸出值不變,直到下一個時鍾到達。輸入狀態由時鍾決定何時被寫入,輸出狀態隨時可以讀出。通過下面的例子分析,相信你能更好的理解。
下面是一個簡單的狀態單元:D觸發器,時鍾輸入clk控制時鍾到達,狀態輸入D和狀態輸出Q。
示意圖
邏輯示意圖
上面的圖示,假定觸發在時鍾信號下跳沿進行,即當時鍾信號下跳時,輸入D被寫入電路。而這一過程(輸入被允許寫入電路)之前,有一個setup time(建立時間),即,輸入D的狀態要保持穩定有效,穩住輸入信號,在時鍾信號下跳沿到來一段時間內,有一個Hold time(保持時間),即這段時間內,輸入端D要保持穩定不變,這是為了等待輸出端Q的延遲(為了確保Q是輸入D的正確輸出)。即下跳沿來臨之時,輸出端Q仍然有一個Clock to Q time,即鎖存延遲,即在hold time內,輸出經過Clock to Q time開始生效。Clock time就是輸出開始生效的點。
3. 數據通路與時序控制
每個指令的執行過程,都有若干個操作步驟,而這些操作步驟,是有先后順序的。為了使得正確的執行指令,CPU必須按照時序產生正確的控制信號。不同指令對應的操作步驟所需要的時間長短不一,控制他們考慮合適的時序方式。
1)早期計算機的三級時序控制系統
早期采用機器周期、節拍、脈沖三級時序對數據通路操作進行定時控制。一個指令可以分為取指令、讀取操作、執行、寫結果等多個基本操作步驟(每個步驟都是一個操作周期),這稱為機器周期。需要說明的是,每個機器周期長短不同,比如讀寫的周期必定比在CPU中操作的周期長。所以,機器周期的長短由工作周期中最長的那個為基礎來確定,如以主存工作周期確定。
一個機器周期內同樣也要進行若干步動作。比如存儲器讀寫操作中,又必須有發送地址、發讀寫命令、檢測數據有無完備、取數據等等。因此一個機器周期划分為若干個節拍,使得一個動作在一個街拍內完成。
為了產生操作控制信號,並使某些操作在一排時間內配合工作,在一個節拍內設置一個或多個工作脈沖。例如,在一個節拍內完成動作:將一個寄存器的內容傳送到另一個寄存器。這時就需要設置先后兩個脈沖,以產生打開數據通路脈沖的接受脈沖。
這就是三級時序系統,不過我是沒見過這種機器了,因為早已經淘汰了。
2)現代計算機的時鍾信號
機器周期的概念已經消失了,現代計算機整個數據通路中的定時信號就是時鍾,一個時鍾周期就是一個節拍。其工作流程在上面狀態元件講述中已經闡明。
4. 單總線數據通路
意如其名,在CPU內部,將ALU以及所有寄存器通過一條內部的公共總線連接起來,就是單總線數據通路。注意不要把它與外部連接存儲器、CPU、IO的外部系統總線混淆。圖示如下:
中間就是內部總線。這種結構下,同一時刻僅有一個元件可以將數據傳送到總線上,因而效率不高。
對於ALU運算,則必須設置緩存(臨時)寄存器Y和Z,因為同一時刻僅有一個元件可以將數據傳送到總線上,所以對於兩個源操作數的操作,設置Y以緩存一個操作數,設置Z以傳送到總線上進而送目標地址。這其中的每一步都是在時鍾控制下進行的。
5. 三總線數據通路
提高性能,必須使得每條指令的時鍾周期盡量少。為了克服單總線數據通路同一時刻僅僅有一個數據在總線上的缺點,可以采用多總線數據通路。
如三總線數據通路,就可以設置所有通用寄存機在一個“雙口寄存器堆”總,允許兩個寄存器的內容同時輸出到兩個不同的總線。
同樣的,在ALU運算時,由於有多個總線可以同時傳送多個數據,就無需再設置臨時緩沖寄存器了。
四、總結
我以一個計算機系學生的角度看待CPU,並沒有去通識性的討論CPU的發展歷史、性能和選購,旨在學習基本的底層知識,在高級程序設計當道的同時,學習底層,更好、系統的理解計算機。受知識水平所限,難免有謬誤、不當之處,請大家批評指正。
【參考】計算機組成與系統結構(第二版) 袁春風老師主編