一、指令周期
計算機每條執行過程分解如下:
- Fetch:取指令,從PC寄存器取出指令地址,內存中取出指令,將取出的指令加載到指令寄存器,PC寄存器自增;
- Decode:指令譯碼,解析指令寄存器中指令,確定指令類型以及要操作的寄存器、數據、內存地址;
- Execute:指令執行,根據不同指令類型執行算數邏輯操作、數據傳輸、地址跳轉;
- 不斷重復1~3的過程;
以上 1~3 的取指令、指令譯碼、指令執行的一次循環稱為一個指令周期;不同的過程由CPU中不同的組件執行:
- 指令放置在存儲器
- PC寄存器和指令寄存器讀取指令依賴控制器
- 指令解碼依賴控制器;
- 指令執行由算數邏輯單元ALU完成,最簡單的無條件跳轉則可以由控制器完成;
三個周期極其關系:
- Instruction Cycle 指令周期,指令讀取->指令譯碼->指令執行這個過程;
- Clock Cycle 時鍾周期,即CPU主頻時間;
- Machine Cycle 機器周期就是所謂CPU周期,通常是CPU從內存讀取一次指令的最短時間,一個CPU周期通常由一個或多個時鍾周期組成;
二、建立數據通路
數據通路由兩類原件組成:
- 操作原件:就是ALU,輸入不同電路信號輸出特定結果;
- 存儲原件:通用寄存器和狀態寄存器;
通過數據總線將他們連接起來就構成了數據總線。
控制器:控制器的作用可以簡單看作不斷重復取指令然后指令譯碼再把譯碼結果交給ALU去執行。但實際的控制器相當復雜,所有CPU支持的指令都在控制器里面,現代Inter CPU已經支持超過2000個指令。
三、CPU需要的硬件電路
至少需要以下四類電路:
- 邏輯運算單元,它是無狀態的電路,根據輸入輸出計算結果;
- 狀態讀寫單元,能夠存儲狀態,也就是寄存器,通常是鎖存器和D觸發器;
- 自動電路,可以按一定時鍾頻率發出信號,使得PC寄存器中指令地址不斷自增,自動執行指令周期內的工作;
- 指令譯碼電路,進行指令譯碼和從內存讀取指令和數據;
四、時鍾信號的硬件實現
之前說過CPU的時鍾信號是由晶體震盪器實現的,我們也可以通過一個反饋電路實現,所謂反饋器就是將電路的輸出信號作為當前電路的輸入信號。如下圖:
開始時,A開關斷開,B開關閉合,A開關打開后電磁鐵使B開關斷開,斷開B開關后,電磁鐵失去磁性,B開關彈回重新又通電,這樣就能不但產生0、1信號的輸出。這個反饋電路是實際一個反相器,用這個符號表示:
五、通過D觸發器實現存儲功能
利用反饋電路可以構造出有記憶功能的電路。這種記憶功能的電路可以用來構造計算機中的存儲計算結果的寄存器以及存儲器。
RS觸發器:由兩個或非門構成,或非門即全0輸出1,其余輸出0
- 一開始開關R和S都關閉也即是說輸入都為0,此時A輸出為1,B的輸入為1、0因此整個電路輸出為0;
- 當開關R合上時,A的輸入為1、0,A輸出為0,B的輸入為0、0,因此整個電路輸出為1;
- 此時再次斷開R,A的輸入為0、1,A輸出為0,B輸入為0、0,因此整個電路輸出為1,也就是說雖然開關狀態已經變成和第一步一樣,但是輸出仍然保持和第二步一樣;
- 這時再去打開S,則B有一個輸入必然為1,因此整個電路輸出必為0;
以上電路,接通R輸出為1,即使再次斷開R,輸出還是1,接通S,輸出為0,即使再次斷開,輸出仍為0,這就是說,整個電路具有了記憶功能。
在RS觸發器之上,在R和S之后增加兩個與門,同時給這兩個與門一個時鍾信號作為電路輸入,這是時鍾電路低電平時,兩個與門的輸出結果都為0,此時R和S對整個電路輸出結果沒有影響,當時鍾輸入高電平時,電路輸入的狀態完全取決於R和S的狀態,這樣就用時鍾信號控制了電路何時可以寫入數據。
更進一步,我們將R和S使用一個反相器連接起來,就可以使用一個信號控制R和S的輸入,這樣我們就實現了一比特數據的存儲,這就是D觸發器。並列N個D觸發器就可以得到一個N位的D觸發器,使用一個時鍾信號控制N位的讀寫,CPU的寄存器可以直接通過D觸發器實現。
六、PC寄存器所需的計數器
PC寄存器還有一個名稱叫做“程序計數器”,我們可以使用一個加法器和一個D觸發器實現它:
- 加法器的兩端,一端始終輸入1,另一端來自觸發器的輸出;
- 觸發器的輸入分別是加法器的輸出和時鍾信號;
這樣當每個時鍾信號來臨加法器就將觸發器原本存儲的值加一再寫入存儲器,這樣就實現了一個隨着時鍾信號固定自增1的PC寄存器。
七、讀寫數據所需要的譯碼器
譯碼器要完成存儲器的尋址功能,這里將其簡化為從兩個地址中選擇一個地址的情況,即所謂的2-1選擇器:
如圖它由兩個與門和一個或門以及一個反相器組成,通過反相器的輸入就能夠決定最終輸出A端輸入還是輸出B端輸入。一個反相器只有0/1兩種狀態,如果輸入信號由三個不同的開關,就可以從2^3也就是8個地址中選一個了,這就是3-8譯碼器。64位CPU就意味着可以尋址2^64空間。譯碼器除了尋址功能外,還可以使用更復雜的電路實現指令譯碼操作,就是使用指令碼通過譯碼器得到期望執行的指令。
八、數據通路建立:構造一個CPU
由以上的過程,我們已經湊齊了組裝一個CPU所需要的零件,現在看看怎么樣將它們裝配起來:
- 首先,自動計數器隨着時鍾頻率不斷自增。作為PC寄存器;
- 自動計數器后面是連接着譯碼器,譯碼器連接着大量的D觸發器構成的內存;
- 自動計數器隨着時鍾頻率不斷自增,並從譯碼器中找到對應內存地址,取出對應的CPU指令;
- 讀取出的指令會通過CPU時鍾控制寫入指令寄存器,它也由D觸發器組成;
- 指令寄存器后跟着另一個譯碼器,這個譯碼器將指令轉換成opcode和操作數;
- opcode和操作數對應輸出線路連接ALU,進行何種算數和邏輯運算。並將結果寫回D觸發器構成的寄存器和內存中。
這樣就構成了一個數據通路。