###### tags: `introduction of computer`
# 設計一個簡單的CPU
## 名詞介紹
### CPU(central processing unit)
1. 電腦的主要裝置之一,功能主要是解釋電腦指令以及處理電腦軟體中的資料。電腦的可程式化性主要是指對中央處理器的編程,廣義上指一系列可以執行複雜的電腦程式的邏輯機器。
2. CPU具備下列功能:
* **抓取指令**:CPU必須具備到記憶體抓取指令的功能。
* **解譯指令**:CPU必須看得懂指令以便採取動作。
* **抓取資料**:當CPU執行指令時, ++必須所有的運算元(operands)皆到齊++, 因此,它必須有從I/O設備或記憶體抓取資料的功能。
* **處理資料**:當資料齊備後, CPU必須能處理這些資料, 可能是算術運算(加、減、乘、除), 也可能是邏輯運算(AND、OR等)。
* **回存結果**:CPU做完算術或邏輯運算後的結果必要時要回存到記憶體或I/O 裝置。
3. 一個中央處理機具備上述五項功能, 因此它須擁有下列裝置(或元件):
* **算術邏輯運算單元(ALU)**:主要負責資料的計算或處理。
* **控制單元(Control unit)**:控制資料流向並控制ALU的動作。
* **暫存器(Registers)**:負責儲存資料, 以利CPU快速地存取。
* **連結路徑(interconnection path)**:負責連接CPU內部的元件, 以利資料或控制訊號在不同元件間流傳。
### 暫存器
* 程式計數器(英語:Program Counter,PC)
中央處理器中的暫存器,用於**指示電腦在其程式序列中的位置**。在Intel x86和Itanium微處理器中,它叫做**指令指標(instruction pointer,IP)**,有時又稱為**指令位址暫存器(instruction address register,IAR)、指令計數器或只是指令序列器的一部分**。
* MAR(Memory Address Register)
用來**保存當前CPU所要訪問的內存單元或I/O設備的地址**。由於內存和CPU之間存在著速度上的差別,所以必須使用地址寄存器來保存地址信息,直到內存讀/寫操作完成為止。
* MDR(Memory Data Register)
用來**暫存微處理器與存儲器或輸人/輸出接口電路之間待傳送的數據**。地址寄存器AR和數據寄存器DR在微處理器的內部總線和外部總線之間,還起著隔離和緩衝的作用。
* 指令暫存器(instruction register)
中央處理器中控制單元用來**儲存執行中指令的暫存器**。
* 通用暫存器
**可以儲存資料或位址兩者**,也就是說他們是結合 資料/位址 暫存器的功用。
* 微指令暫存器(micro-instructions register, MIR)
中央處理器中控制單元用來**儲存執行中微指令的暫存器**。
* 匯流排(Bus)
+ 匯流排(Bus)是指**電腦組件間規格化的交換資料(data)的方式**,即++以一種通用的方式為各組件提供資料傳送和控制邏輯++。
+ 從另一個角度來看,如果說主機板(Mother Board)是一座城市,那麼匯流排就像是城市裡的公共汽車(bus),能按照固定行車路線,傳輸來回不停運作的位元(bit)。
+ 這些線路在同一時間內都僅能負責傳輸一個位元。因此,必須同時採用多條線路才能傳送更多資料,而**匯流排可同時傳輸的資料數就稱為寬度(width),以位元為單位**,匯流排寬度愈大,傳輸效能就愈佳。匯流排的頻寬(即單位時間內可以傳輸的總資料數)為:**匯流排頻寬 = 頻率×寬度(Bytes/sec)**。
* 算術邏輯單元(Arithmetic Logic Unit, ALU)
中央處理器的執行單元,是所有中央處理器的核心組成部分,由 **與門(AND gate)** 和 **或門(OR gate)** 構成的算數邏輯單元,**主要功能是進行二進位的算術運算,如加減乘(不包括整數除法)**。基本上,在所有現代CPU體系結構中,二進位都以二補數的形式來表示。
* 桶式移位器(barrel shifter)
一種數位電路,可以在一個時脈週期內,**將資料字進行特定位元數的移位**。
> 執行單元(也稱為功能單元)
> * 中央處理器(CPU)的一部分,它按照電腦程式的指示執行操作和計算。它可能具有自己的內部控制序列單元。
> 控制單元(Control Unit)
> * 有時為CPU一部分,有時安裝於CPU外部,負責指揮CPU工作。通過該裝置的運行來控制其他裝置的活動,也被視作有限狀態自動機的一種。
> 定時器訊號(Clock signal)
> * 計算機科學及相關領域用語。此訊號在同步電路當中,扮演計時器的角色,並組成電路的電子元件。只有當同步訊號到達時,相關的正反器才按輸入訊號改變輸出狀態,因此使得相關的電子元件得以同步運作。
### 記憶體
* 唯讀記憶體(Read-Only Memory 縮寫:ROM)
一種半導體記憶體,其特性是**一旦儲存資料就無法再將之改變或刪除,且內容不會因為電源關閉而消失。**
1. 快閃記憶體(Flash memory)
* 每一個記憶胞都具有一個「控制閘」與「浮動閘」,利用高電場改變浮動閘的臨限電壓即可進行編程動作。快閃記憶體主要分為**NAND型**與**NOR型**。
1. NAND Flash常用於固態硬碟、USB隨身碟、記憶卡等用途,
2. NOR Flash則用於BIOS ROM晶片等用途。
* 隨機存取記憶體(Random-access memory 縮寫:RAM)
隨機存取記憶體,或稱**隨機訪問存儲器**,是一種在電腦中用來**暫時保存資料的元件**。它可以**隨時讀寫**,而且**速度很快**,通常作為作業系統或其他正在運行中的程式之**臨時資料存儲媒介**。它可以令電腦的容量提升,不同隨機存取記憶體也有不同的容量。
1. 靜態隨機存取記憶體(Static Random Access Memory,SRAM)
* 隨機存取記憶體的一種。所謂的「靜態」,是指這種**記憶體只要保持通電,裡面儲存的資料就可以恆常保持**。
2. 動態隨機存取記憶體(Dynamic Random Access Memory,DRAM)
* 主要的作用原理是利用電容內儲存電荷的多寡來代表一個二進位位元(bit)是1還是0。
* 周期性地充電是一個不可避免的條件。由於這種需要**定時重新整理的特性,因此被稱為「動態」記憶體**。
## CPU
### CPU配備
* 簡單的CPU具有:
1. **暫存器**
1. 具有一個==8位元==的**MAR**及==8位元==的**MDR**
2. ==16位元==**指令暫存器**(==分為兩個Byte,分別為IR0跟IR1==
3. ==兩個==**通用暫存器**A,B,In Put Register 與 Out Put Register(IPR、OPR
4. ==20位元==的**微指令暫存器**(MIR
2. ==三個==**內部匯流排**
3. ==一組==**ALU**及**Shifter**
4. ==256X20 bit==**唯讀記憶體**(Read Only Memory, ROM)。
### CPU執行週期
CPU在每一個固定週期執行一個指令 稱為指令週期。每一個指令週期包含4個時相(phase)依序為:
1. Phase0:讀入指令:
**讀入PC(program counter)位址內容到IRO,並將PC內容加一(PC=PC+1)**; 又讀入PC位址內容到IR1, 再將PC內容加一(PC=PC+1),同時以IR0為唯讀記憶體之位址, 讀出20位元的內容寫入微指令暫存器。==若控制線L=1, 將IR1 內容copy到MAR==。
2. Phase1:**讀入記憶體**: ==若控制線R=1 將MAR指向的記憶體內容載入MDR與B通用暫存器==。
3. Phase2:**算術與邏輯運算**: ==載入A匯流排與B匯流排,執行ALU與位移器,再經由C匯流排寫入暫存器庫或MDR==。
4. Phase3:**寫出記憶體**: **寫入主記憶體**,==若控制線W=0 則不動作==。
### 個別裝置功能:
1. 記憶體控制暫存器:
* 該CPU有二組記憶體控制暫存器:
* A:在phase 0時,將PC當位址,把記憶體內容載入IP0,接著PC被加1 (PC是一個counter,可以被一個時訊號加1),再以PC當位址載入IR1。IR0是指令的運算子,IR1是運算元,控制線L決定是否將(在Phase0結束時)IR1的內容Copy到 MAR去。
* B:8位元的MAR及8位元的MDR(因此僅能配備256 byte的記憶體)。在phase 1時,若控制線R=1,MAR指向的記憶體內容載入MDR。
2. 暫存器庫:
* 暫存器庫有8個暫存器,A、B通用暫存器、MAR、IR1、PC、常數0、常數1及In Put Register IPR(or OPR)。這個位置其實有二個暫存器使用同一個位址(位址7),==當被A or B Bus讀取時使用IPR,由C Bus寫入時使用OPR。==
3. 三個內部匯流排:
* A Bus,B Bus及C Bus
* **分別由二組多工器控制,決定將暫存器內容載入A Bus及B Bus,及一組解碼器決定將結果由C Bus寫入某一暫存器**。每個多工器或暫存器需要==三條控制線==決定暫存器,這9條控制線(控制邏輯)稱為A0,A1,A2,B0,B1,B2及C0,C1,C2。

4. ALU及Shifter:
* A Bus及B Bus將資料流入ALU(當ALU的兩組輸入),結果再流入Shifter。
* ALU的運算由ac0及ac1控制,ALU功能如表一
* 
* Shifter的運算由sf0及sf1決定,功能如表二
* 
* Shifter的輸出流入C Bus,可同時流入MDR或暫存器庫中的一個暫存器,==控制線W決定是否流入(寫入)MDR,C0,C1及C2則決定流入暫存器庫中的那個暫存器。==
* ALU會產生二個輸出訊號,Z,N,當結果為0時Z被設為1否則為0,當ALU作加法而發生溢位時N=1,不溢位時N=0,不作加法N不變。
* Shifter也產生一個輸出o,當Shifter作平移而”擠出”的位元=o。
* 
5. 跳躍控制邏輯:
跳躍控制線Jz,Jn,Jo及Ju,這四個邏輯為微指令暫存器中的四個bit
1. Jz與訊號Z and後產生跳躍訊號
2. Jn與訊號N and後產生跳躍訊號
所有的跳躍訊號經OR運算產生邏輯J,==訊號J控制一門閥,當J=0,門閥會阻止 C Bus寫入PC。當C Bus內容寫入PC時,改變下一個執行的指令==。
6. 微指令暫存器 (micro-instructions register, MIR):
所有的控制訊號均由微指令暫存器發出,控制訊號共有20個,因此MIR共有20位元,格式如下表。MIR的內容是在Phase1中以IPO為位址將事先寫在一ROM上的微指令載入而得。
### 微指令暫存器:

:::warning
注意 :zap: :這 CPU尚需數個clock訊號用以控制特定的工作在特定的時間被執行。
:::