1. 程式人生 > >計算機組成原理實驗2---單週期CPU

計算機組成原理實驗2---單週期CPU

實驗目的

實驗內容

設計一個單週期CPU,該CPU至少能實現以下指令功能操作。

必須寫一段測試用的彙編程式,而且必須包含所要求的所有指令,slti指令必須檢查兩種情況:“小於”和“大於等於”;beq、bne:“不等”和“等”。這段彙編程式必須儘量優化且出現在實驗報告中,同時,給出每條指令在記憶體中的地址。檢查實驗時,必須提供。

其他基本要求:

簡述實驗原理和方法,必須有資料通路圖及相關圖。

 實驗原理:

設計思路:

實驗器材

​​​​​​​實驗過程與結果

模擬模組:


實驗目的

  • 掌握單週期CPU資料通路圖的構成、原理及其設計方法;
  • 掌握單週期CPU的實現方法,程式碼實現方法;
  • 認識和掌握指令與CPU的關係;
  • 掌握測試單週期CPU的方法; 

掌握單週期CPU的實現方法。

實驗內容

實驗的具體內容與要求。

設計一個單週期CPU,該CPU至少能實現以下指令功能操作

指令與格式如下:

==> 算術運算指令

(1)add  rd , rs, rt  說明:以助記符表示,是彙編指令;以程式碼表示,是機器指令

000000

rs(5位)

rt(5位)

rd(5位)

reserved

功能:rd←rs + rt。reserved為預留部分,即未用,一般填“0”。

(2)addi  rt , rs ,immediate 

000001

rs(5位)

rt(5位)

immediate(16位)

功能:rt←rs + (sign-extend)immediate;immediate符號擴充套件再參加“加”運算。

    (3)sub  rd , rs , rt

000010

rs(5

位)

rt(5位)

rd(5位)

reserved

功能:rd←rs - rt

    ==> 邏輯運算指令

(4)ori  rt , rs ,immediate 

010000

rs(5位)

rt(5位)

immediate(16位)

功能:rt←rs | (zero-extend)immediate;immediate做“0”擴充套件再參加“或”運算。

(5)and  rd , rs , rt

010001

rs(5位)

rt(5位)

rd(5位)

reserved

功能:rd←rs & rt;邏輯與運算。

    (6)or  rd , rs , rt

010010

rs(5位)

rt(5位)

rd(5位)

reserved

功能:rd←rs | rt;邏輯或運算。

==>移位指令

(7)sll  rd, rt,sa

011000

未用

rt(5位)

rd(5位)

sa

reserved

功能:rd<-rt<<(zero-extend)sa,左移sa位 ,(zero-extend)sa

==>比較指令

(8)slti  rt, rs,immediate    帶符號

011011

rs(5位)

rt(5位)

immediate(16位)

    功能:if (rs <(sign-extend)immediate)  rt =1 else  rt=0, 具體請看錶2 ALU運算功能表,帶符號

==> 儲存器讀/寫指令

(9)sw  rt ,immediate(rs) 寫儲存器

100110

rs(5位)

rt(5位)

immediate(16位)

功能:memory[rs+ (sign-extend)immediate]←rt;immediate符號擴充套件再相加。即將rt暫存器的內容儲存到rs暫存器內容和立即數符號擴充套件後的數相加作為地址的記憶體單元中。

(10) lw  rt , immediate(rs) 讀儲存器

100111

rs(5位)

rt(5位)

immediate(16位)

功能:rt ← memory[rs + (sign-extend)immediate];immediate符號擴充套件再相加。

即讀取rs暫存器內容和立即數符號擴充套件後的數相加作為地址的記憶體單元中的數,然後儲存到rt暫存器中。

 ==> 分支指令

   (11)beq  rs,rt,immediate     

110000

rs(5位)

rt(5位)

immediate(16位)

功能:if(rs=rt) pc←pc + 4 + (sign-extend)immediate <<2  else pc pc + 4

特別說明:immediate是從PC+4地址開始和轉移到的指令之間指令條數immediate符號擴充套件之後左移2位再相加。為什麼要左移2位?由於跳轉到的指令地址肯定是4的倍數(每條指令佔4個位元組),最低兩位是“00”,因此將immediate放進指令碼中的時候,是右移了2位的,也就是以上說的“指令之間指令條數”。

    (12)bne  rs,rt,immediate     

110001

rs(5位)

rt(5位)

immediate

功能:if(rs!=rt) pc←pc + 4 + (sign-extend)immediate <<2  else pc ←pc + 4

特別說明:與beq不同點是,不等時轉移,相等時順序執行。

 ==>跳轉指令

(13)j  addr   

111000

addr[27..2]

功能:pc <{(pc+4)[31..28],addr[27..2],2{0}},無條件跳轉。

說明:由於MIPS32的指令程式碼長度佔4個位元組,所以指令地址二進位制數最低2位均為0,將指令地址放進指令程式碼中時,可省掉!這樣,除了最高6位操作碼外,還有26位可用於存放地址,事實上,可存放28位地址了,剩下最高4位由pc+4最高4位拼接上。

==> 停機指令

(14)halt

111111

00000000000000000000000000(26位)

功能:停機;不改變PC的值,PC保持不變。

自己新增的指令:

==>邏輯指令

(15)xor  rd , rs , rt

010011

rs(5位)

rt(5位)

rd(5位)

reserved

功能:rd←rs ^ rt;邏輯異或運算。跟前面的or操作是類似的,只不過因為沒有呼叫異或的操作所以就添加了。

==>移位指令

(16)sllv  rd, rt, rs

011001

rs(5位)

rt(5位)

rd(5位)

sa

reserved

功能:rd<-rt<<rs, 左移rs位,

說明:這個操作跟前面的sll是類似的,主要不同在於不是I型指令而是R型指令。

==>比較指令

(17)sltu  rt, rs,rt    不帶符號比較

011100

rs(5位)

rt(5位)

rd(5位)

sa

reserved

功能:if (rs <rt)  rd =1 else  rd=0

      說明:這個指令跟前面的帶符號比較slti是類似的,因為老師要求的指令沒有呼叫無符號比較,所以就多寫了這一個指令。

==>暫存器寫指令(左移操作)

  (18)lui rt, immediate

011011

未利用rs(10000)

rt(5位)

immediate(16位)

功能:rt = {immediate , 16’b0000000000000000 };

說明:因為這一個指令是I型指令,但是這裡的rs沒有被利用,而這個寫暫存器指令實際上是對立即數進行左移的操作。也就是把立即數放在暫存器的高16位。所以這裡實現的方法就是利用左移操作實現的。

必須寫一段測試用的彙編程式,而且必須包含所要求的所有指令,slti指令必須檢查兩種情況:“小於”和“大於等於”;beq、bne:“不等”和“等”。這段彙編程式必須儘量優化且出現在實驗報告中,同時,給出每條指令在記憶體中的地址。檢查實驗時,必須提供。

其他基本要求:

  1. PC和暫存器組寫狀態使用時鐘觸發。
  2. 指令儲存器和資料儲存器儲存單元寬度一律使用8位,即一個位元組儲存單位。
  3. 控制器部分要學會用控制訊號真值表方法分析問題並寫出邏輯表示式;或者用case語句方法逐個產生各指令控制訊號。注意:控制訊號的產生不能使用時鐘觸發!
  4. [email protected](...)的敏感訊號表中,時序觸發和電平觸發不能同時出現,即不能混用。

簡述實驗原理和方法,必須有資料通路圖及相關圖

 實驗原理:

  1. 單週期CPU指的是一條指令的執行在一個時鐘週期內完成,然後開始下一條指令的執行,即一條指令用一個時鐘週期完成。電平從低到高變化的瞬間稱為時鐘上升沿,兩個相鄰時鐘上升沿之間的時間間隔稱為一個時鐘週期。時鐘訊號是驅動CPU執行的條件以及動力。
  2. CPU在處理指令的時候,大致分為IF->ID->EXE->MEM->WB這五個步驟的迴圈執行。根據老師所給的圖片可以對每個模組根據這五個環節作為依據劃分五個部分。
    1. 如下:
    2. 每一個步驟的解釋以及相關的模組操作:
  • 取指令(IF)跟PC計數器以及指令儲存器有關:在程式剛開始執行的時候需要將Reset置為0從而使PC計數器重置為0。而後在將Reset置為1,接著指令儲存器根據程式計數器PC中的指令地址,從儲存器中取出一條指令,同時,PC根據指令字長度自動遞增產生下一條指令所需要的指令地址,但遇到“地址轉移”指令時,則控制器把“轉移地址”送入PC,當然得到的“地址”需要做些變換才送入PC。
  • 指令譯碼(ID)跟控制單元有關:ControlUnit會對取指令操作中得到的指令進行分析並譯碼,確定這條指令需要完成的操作,從而產生相應的控制後面操作的模組的操作控制訊號,用於驅動執行狀態中的各種操作。
  • 指令執行(EXE)跟暫存器以及ALU有關:根據控制單元所產生的操作控制訊號進行資料的載入或者暫存器中資料的訪問以及對應的邏輯運算。
  • 儲存器訪問(MEM)跟資料儲存區有關:所有需要訪問儲存器的操作都將在這個步驟中執行,該步驟給出儲存器的資料地址,把資料寫入到儲存器中資料地址所指定的儲存單元或者從儲存器中得到資料地址單元中的資料。
  • 結果寫回(WB)跟暫存器堆有關:將指令執行的結果或者訪問儲存器中得到的資料寫回相應的目的暫存器中。

設計思路:

根據老師所提供的單週期CPU的資料通路和控制路線圖

我們可以看到CPU實際上是有很多個模組所構成的,而頂層CPU,即是所有模組的總和所構成的部件,所需要輸入的外部資料為:

      CLK(時鐘訊號)以及Reset(用於PC的清零)

所以頂層模組我們就可以簡化為如下:

      而接下來所需要完成的就是每一個模組的劃分以及設計工作了。

3. 設計模組過程:

  1. 劃分模組:

根據老師所給的資料以及單週期CPU的資料通路和控制線路圖,然後結合上面的CPU在一個時鐘週期內五個階段的劃分,我們可以將單週期CPU的資料通路和控制線路圖劃分為一下七大模組:

分別是:PC模組(用於程式計數器的控制,包含跳轉指令,即左下角未被包含的那一部分)

            Instructions Memory模組(用於儲存指令以及讀取指令)

            ControlUnit模組(用於ID,即指令的解析然後生成相應的對各個模組的控制訊號)

            RegisterFile模組(用於暫存器堆的模擬:讀取暫存器資料以及將運算結果或者資料儲存器中的資料裝載到暫存器中)

            ALU模組(用於從暫存器中以及指令中的資料的邏輯處理)

DataMemory模組(充當外存,用於模擬資料的儲存以及讀取)

Num_to_WriteData模組(選擇ALU的運算結果以及資料儲存器的讀取數值存到暫存器中,WB過程)

用樹狀圖分工如下(分工依據是五個步驟):

  1. 根據劃分的模組我們可以來開始工作了,首先便是我們的PC模組
  1. PC模組的實現:

首先先截一個小圖

根據這一個圖可以得到PC的設計如下:

PC中主要是PCSrc(用於控制PC的變化,+4、間接定址、以及直接定址)三種情況的判斷,同時觸發條件是CLK上升沿以及Reset的下降沿時觸發,關鍵程式碼如下:

 

2. Instruction Memory模組的實現:

首先截一個小圖:

根據這一個圖可以得到Instruction Memory的設計如下:

另外,因為這是一個指令儲存器,所以在儲存器內部需要額外開闢一部分空間laicunchu指令,我這裡設定的是在程式一開始執行就進行指令的裝載。程式碼如下:

然而在寫程式的時候並不需要返回那麼多的引數,因為在頂層模組的時候返回的IDataOut(Instruction,即對應的指令)可以根據需要進行對應的取值,比如需要rt,只要傳入DataOut[20:16]即可,但是當時因為一直在糾結這一個模組的設定,所以就還是返回了幾個引數,op以及rs、rt和rd

其中核心程式碼如下:

取指令:

還有一個是將RegisterFile的WriteReg埠的資料選擇器新增到了此處(因為先前考慮不周,捂臉)

3.現在有了op了,根據上面的五個步驟,前面的IF步驟已經完成了,所以接下來就是ID過程了,也就是ControlUnit模組的實現了。繼續按照前面的做法,截個圖。(這一個部分覺得長的看起來似乎不是很難,但是卻是比較複雜的)

 

 

從外觀看起來我們可以看到這一個ControlUnit有兩個輸入,分別是Zero(來自ALU邏輯處理器)以及OP(來自指令儲存器的指令高6位),以及有很多的輸出,可能一開始還以為這一個很好寫,但是看到這麼多的輸出的時候,你就應該意識到自己想多了,這一個很複雜。接下來就是根據老師所給的文件列出這一個模組的資訊了。(超多)

一開始我使用的是case語句,所以就需要進行控制訊號表的羅列,如下:

 

Reset

PCWre

ALUSrcA

ALUSrcB

DBDataSrc

RegWre

nRD

nWR

RegDst

ExtSel

PCSrc

ALUOp

add

1

1

0

0

0

1

X

X

1

X

2’b00

3b'000

addi

1

1

0

1

0

1

X

X

0

1

2’b00

3b'000

sub

1

1

0

0

0

1

X

X

1

X

2’b00

3b'010

ori

1

1

0

1

0

1

X

X

0

0

2’b00

3b'011

and

1

1

0

0

0

1

X

X

1

X

2’b00

3b'100

or

1

1

0

0

0

1

X

X

1

X

2’b00

3b'011

sll

1

1

1

0

0

1

X

X

1

X

2’b00

3b'010

slti

1

1

0

1

0

1

X

X

0

1

2’b00

3b'110

sw

1

1

0

1

X

0

X

1

X

1

2’b00

3b'000

lw

1

1

0

1

1

1

1

X

0

1

2’b00

3b'000

beq

1

1

0

0

X

0

X

X

X

1

2’b01

3b'001

bne

1

1

0

0

X

0

X

X

X

1

2’b01

3b'001

j

1

1

X

X

X

0

X

X

X

X

2’b10

X

halt

1

0

X

X

X

0

X

X

X

X

X

X

xor

1

1

0

0

0

1

X

X

1

X

2’b00

3b'111

sltu

1

1

0

0

0

1

X

X

1

X

2’b00

3b'101

sllv

1

1

0

0

0

1

X

X

1

X

2’b00

3b'010

lui

1

1

0

1

0

1

X

X

0

1

2’b00

3b'010

(其中填寫X的地方表示該處取值可以為任意值)

上面的方法消耗的時間會比較大,而且還有寫很多的case語句進行op的判斷,每一個case語句中還有很長的賦值操作。所以後來在同學的提醒下直接用賦值語句就好了。直接利用老師提供的表格,進行賦值。

控制訊號名

狀態“0”

狀態“1”

Reset

初始化PC為0

相關推薦

計算機組成原理實驗2---週期CPU

實驗目的 實驗內容 設計一個單週期CPU,該CPU至少能實現以下指令功能操作。 必須寫一段測試用的彙編程式,而且必須包含所要求的所有指令,slti指令必須檢查兩種情況:“小於”和“大於等於”;beq、bne:“不等”和“等”。這段彙編程式必須儘量優化且出現在實驗報告中,同時,給出每條指令

計算機組成原理2)---系統匯流排

導讀 1。分類 2。特性與效能 3。匯流排結構 4。匯流排判優控制 5。匯流排通訊控制 分類 五大部分的互聯方式有兩種,一種是各部分之間單獨連線,稱為分散連線。另一種是將各部分連到一組公共資訊傳輸線上,稱為匯流排連線 按傳送方式分類 並行傳輸匯流排(8位,16

計算機組成原理實驗之運算器組成實驗

一、實驗目的: 1、熟悉邏輯測試筆的使用方法; 2、熟悉LK-TEC-9模型計算機的節拍脈衝T1、T3、T3; 3、熟悉雙埠通用暫存器組的讀寫操作; 4、熟悉運算器的資料傳送通路; 5、驗證74LS181的加、減、與、或功能; 6、按給定的資料,完成幾種指定的

計算機組成原理實驗之 雙埠儲存實驗(LK-TEC-9)

一、實驗目的: 1、瞭解雙埠靜態儲存器IDT7132的工作特性及其使用方法; 2、瞭解半導體儲存器怎樣儲存和讀取資料; 3、瞭解雙埠儲存器怎樣並行讀寫; 4、熟悉LK-TEC-9模型計算機儲存器部分的資料通路; 5、掌握資料通路中各個控制訊號的作用和用法; 6

計算機組成原理實驗二:RAM實驗

一、實驗專案名稱:RAM實驗 二、實驗目的: 瞭解半導體靜態隨機讀寫儲存器RAM的工作原理及其使用方法。 掌握半導體儲存器的字、位擴充套件技術。 三、實驗內容 ◆採用1K x 4 的晶片,構成1K x 8的儲存器。 ◆選擇五個不連續的存貯單元地址,分別存入不同內容

計算機組成原理2

計算機組成原理 第二章 資料的機器層次表示 1、數值資料的表示  十進位制(D) 二進位制(B) 八進位制(Q) 十六進位制(H) 1.1原碼錶示法: 純小數:Xs.X1X2....Xn 正數Xs=0;負數Xs=1;數值部分保持不變 純整數:XsX1X2....Xn 正數X

計算機組成原理2)-cache快取記憶體儲存器

cache-快取記憶體儲存器 在主存與CPU之間插入一級或多級SRAM組成的快取記憶體儲存器。擴充套件cache有限,因為SRAM價格昂貴。 cache作用:為了解決CPU和主存之間速度不匹配而採用的一項重要技術。 cache特性:具有空間區域性性以及時間區域性性。

計算機組成原理-實驗三-多功能ALU設計實驗

實驗要求:        本實驗要求設計一個具有8種運算功能的32位ALU,並能夠產生運算結果的表示:結果為零標誌ZF(Zero Flag)、進借位標誌位CF()溢位標誌OF(Overflow Flag)、符號位標誌SF(Sign Flag)和奇偶標誌PF(Parity Fl

計算機組成原理實驗

上機實驗04   邏輯運算程式設計實驗1.瞭解組合語言的邏輯運算指令; 2.熟悉組合語言中邏輯運算指令的使用方法; 3.掌握利用匯編語言邏輯運算指令實現程式設計的方法。二、軟硬體環境 1.硬體環境:微機CPU 486以上,500MB以上硬碟,32M以上記憶體; 2.軟體環境:

計算機組成原理2)複習提綱

本來想自己做整理的,偶然間想起曾經有先人給我們留下的遺產,在此做一個備份 計算機組成原理2整理複習資料 第三章多層次的儲存器 l  P65 表3.1 l  P66 SRAM(靜態讀寫儲存器)和DRAM(動態讀寫儲存器)的比較 SRAM存取速度快,但容量不如DRAM

計算機組成原理實驗:乘法實現

1、實驗目的:開放性實驗,根據原理圖實現乘法的電路設計並執行。2、實驗原理:原理一:如圖3-1是實現原碼一位乘運算的基本硬體配置框圖,根據該圖用移位相加方法實現乘法,自行選擇器件設計電路並執行。圖3-1

計算機組成原理複習2(資料的表示和運算)

數制與編碼 1.進位計數法 基數是每個數位所用到的不同數碼的個數 2.不同進位制數之間的相互轉換 2進轉換8進位制:湊足3位,高位補0 2進位制轉換16進位制:湊足4位,高位補0 n任意轉化為十進位制:各個位上的數乘以n的(位數-1)次冪 除基取餘法+乘積取整法

深入淺出計算機組成原理:通過你的CPU主頻,我們來談談“性能”究竟是什麽?(第3講)

但是 網絡 strong 我們 差異 int 情況下 內核 自己 一、性能到底指的是什麽? 買新電腦的時候,我們會說:"原來的電腦性能跟不上了" 寫程序的時候,我們會說:"這個程序西能需要優化一下" 1、"性能"到底指的是什麽? 在計算機組成原理乃至體系結構中"

中山大學16級計算機組成與設計實驗——週期CPU設計與實現

實驗二 : 單週期CPU設計與實現 一.相關原理詳解 關於單週期CPU的設計思路和相關原理分析可以參看個人的另一篇部落格,部落格連結如下: 單週期CPU設計與實現原理分析 二.實驗目的 掌握單週期CPU資料通路圖的構成、原理及其設計方法; 掌握單週期CP

計算機組成原理——cpu的簡單模型實驗報告

#cpu與簡單模型機 姓名: 學號: 班級:計科班 實驗名稱:CPU與簡單模型機 實驗性質:綜合型實驗 時間:2018.12.1 一、實驗目的 (1) 掌握一個簡單 CPU 的組成原理。 (2) 在掌握部件單元電路的基礎上,進一步將其構造一

華中科技大學 計算機組成原理 上機實驗1 2018

image 可能 ive debug 區號 分析 pan open 實驗目的 實驗目的 GB2312 區位碼 字模碼 奇偶校驗校 驗位 檢錯 海明碼編解碼電路基本原理 流水數據傳輸機制,流水暫停原理 實驗環境 (以下文字僅

計算機組成原理——匯流排補充:地址匯流排、資料匯流排、定址能力、字長及cpu位數等概念之間的關係

地址匯流排決定了CPU的定址能力;資料匯流排的寬度與字長及CPU位數一致。 詳細解釋見下文: 1.地址匯流排與定址能力 要存取資料或指令就要知道資料或指令存放的位置,地址暫存器儲存的就是CPU當前要存取的資料或指令的地址,該地址是由地址匯流排傳輸到地址暫存器上的。

計算機組成原理補充——三種重新整理方式,存取週期>存取時間的原因

常見的動態RAM的共同特點是都靠電容儲存電荷的原理來寄存資訊,電容上的電荷一般只能維持1~2ms,因此即使電源不掉電,資訊也會自動消失,所以必須在2ms內對其所有儲存單元恢復一次原狀態,稱為重新整理,重新整理是一行一行進行的。又因為記憶體就一套地