單周期CPU設計的理論基礎
寫在前面:本博客內容為本人老師原創,嚴禁任何形式的轉載!本博客只允許放在博客園(.cnblogs.com),如果您在其他網站看到這篇博文,請通過下面這個唯一的合法鏈接轉到原文!
本博客全網唯一合法URL:http://www.cnblogs.com/acm-icpcer/p/9291767.html
1.指令集設計:
CPU的指令類型根據其操作的不同,可以分為下面七類。
(1)計算類指令(Computational)
計算類指令用於執行算術操作,乘/除,邏輯操作和對寄存器進行移位操作。這些指令有兩種類型:寄存器類型和立即數類型。寄存器類型的指令使用兩個源寄存器的值作為源操作數,立即數類型使用一個寄存器和立即數作為源操作數。根據操作的不同,這些指令分為下面4種:
(2)Load/Store指令
Load和Store指令都為立即數(I-type)類型,用來在存儲器和通用寄存器之間的儲存和裝載數據。值得一提的是MIPS指令集只有該類指令訪問內存,而其他指令都在寄存器之間進行,所以指令的執行速度較高。該類指令只有基址寄存器的值加上擴展的16位有符號立即數一種尋址模式,數據的存取方式可以是字節(byte)、字(word)和雙字(Double word)。
指令格式:
(3)跳轉/分支指令(jump & branch)
跳轉和分支指令改變程序流。所有的跳轉和分支指令都會產生的一個延遲槽(delay slot)。緊跟著跳轉/分支指令後的指令(delay slot中的指令)也被執行,然後在跳轉目的的第一條指令從存儲器中取出並執行,這是在指令的流水線執行時獲得更高效率。
(4)寄存器傳送指令
寄存器傳送指令用來在系統的通用寄存器(GPR)、乘除法專用寄存器(HI、LO)之間傳送數據,這些指令分為有條件傳送和無條件傳送2種類型。
(5)專用指令
專用指令用來產生軟件中斷,當執行這類指令的時候,CPU產生異常並轉入中斷處理程序。這些指令有系統調用(Syscall),暫停(Break)和Trap指令等,主要用於軟件的異常處理。
(6)協處理器指令
協處理器指令對協處理器進行操作。協處理器的Load和Store指令是立即數類型,每個協處理器指令的格式依協處理器不同而不同。
(7)系統控制協處理器(CP0)指令
系統控制協處理器(CP0)指令執行對CP0寄存器的操作來控制處理器的存儲器並執行異常處理。
本實驗設計只選取了20條典型的MIPS指令來描述CPU邏輯電路的設計方法。下表列出了本實驗的所涉及到的20條MIPS指令。
20條MIPS指令
R型指令 |
|||||||
指令 |
[31:26] |
[25:21] |
[20:16] |
[15:11] |
[10: 6] |
[5:0] |
功能 |
Add |
000000 |
rs |
rt |
rd |
000000 |
100000 |
寄存器加 |
Sub |
000000 |
rs |
rt |
rd |
000000 |
100010 |
寄存器減 |
And |
000000 |
rs |
rt |
rd |
000000 |
100100 |
寄存器與 |
Or |
000000 |
rs |
rt |
rd |
000000 |
100101 |
寄存器或 |
Xor |
000000 |
rs |
rt |
rd |
000000 |
100110 |
寄存器異或 |
Sll |
000000 |
00000 |
rt |
rd |
sa |
000000 |
左移 |
Srl |
000000 |
00000 |
rt |
rd |
sa |
000010 |
邏輯右移 |
Sra |
000000 |
00000 |
rt |
rd |
sa |
000011 |
算術右移 |
Jr |
000000 |
rs |
rt |
rd |
000000 |
001000 |
寄存器跳 |
I型指令 |
|||||||
Addi |
001000 |
rs |
rt |
immediate |
立即數加 |
||
Andi |
001100 |
rs |
rt |
immediate |
立即數與 |
||
Ori |
001101 |
rs |
rt |
immediate |
立即數或 |
||
Xori |
001110 |
rs |
rt |
immediate |
立即數異或 |
||
Lw |
100011 |
rs |
rt |
offset |
取數據 |
||
Sw |
101011 |
rs |
rt |
offset |
存數據 |
||
Beq |
000100 |
rs |
rt |
offset |
相等轉移 |
||
Bne |
000101 |
rs |
rt |
offset |
不等轉移 |
||
Lui |
001111 |
00000 |
rt |
immediate |
設置高位 |
||
J型指令 |
|||||||
J |
000010 |
address |
跳轉 |
||||
Jal |
000011 |
address |
調用 |
R型指令的op均為0,具體操作由func指定。rs和rt是源寄存器號,rd是目的寄存器號。移位指令中使用sa指定移位位數。
I型指令的低16位是立即數,計算時需擴展到32位,依指令的不同需進行零擴展和符號擴展。
J型指令的低26位是地址,是用於產生跳轉的目標地址。
2.總體電路設計:
本實驗所設計的單周期CPU的總體電路結構如圖所示。
本實驗所設計的CPU主要組成部分有:運算器(ALU)、控制器(Control Unit)、寄存器堆(Register Files)、取指電路及相關基礎部件(如選擇器)等構成。
具體的代碼實現請看:
Verilog HDL語言實現的單周期CPU設計(全部代碼及其註釋)
tz@COI HZAU
2018/7/10
單周期CPU設計的理論基礎