1. 程式人生 > >單周期CPU設計的理論基礎

單周期CPU設計的理論基礎

call pac tro 設置 verilog fun 執行 str cal

寫在前面:本博客內容為本人老師原創,嚴禁任何形式的轉載!本博客只允許放在博客園(.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設計的理論基礎