硬體課程設計報告 RISC模型機的設計

2021-04-24 10:24:20 字數 3741 閱讀 4991

硬體課程設計報告

risc模型機的設計

對所學計算機硬體課程進行系統化,進一步提高硬體設計及動手能力。

(1)選用使用頻率比較高的五條基本指令:mov、add、store、load、jmp。

(2)定址方式採用暫存器定址及直接定址兩種方式。

(3)指令格式採用單字長及雙字長兩種格式。

(4)設計不採用微程式,在cpld中設計控制邏輯。

單字長指令格式為:

操作碼 rs

rd

雙字長指令格式為:

操作碼 rs

rdaddr

其中rs、rd為不同狀態,則選中不同的暫存器:

rs或rd

暫存器 00

01 10

11 r0 r1

r2 ac

指令系統如下:

mov rs, rd

add rs, rd

jmp rs

load [addr], rd

store rs, [addr]

mov,add,jmp三條指令為單週期執行完成。store,load兩條指令為兩週期執行完成,addr為存或取數的直接位址。第一機器週期完成取操作碼、作標記;第二機器週期完成取直接位址並完成取數或存數。

圖中pld模組用able語言設計來實現,它是用來產生各部件的控制訊號。其餘模組根據裝置上提供的資源用硬佈線來構成。

1.實驗步驟 (

1)在ispdesignexpert

系統中建立 (

2)按所給的接線圖連線線路。

(3)用所設計的指令系統,編寫一段機器指令程式。

(4)執行cmpp20進行聯機,將上述程式裝載到實驗系統的ram中。

(5)將時序單元的stop開關撥至run狀態,step開關撥至step狀態,通過按start微動開關,來單步機器指令,可通過位址顯示燈檢查指令執行的位址,執行完後檢查ram中的運算結果。

實驗中若將時序單元(

stateunit)中的φ接至訊號源單元(signalunit)的h23上則可用來單步執行機器指令操作;若將φ接至kk2+上則可單步執行每個節拍來除錯實驗程式,其方法是將step開關撥至exec狀態後,按一下start啟動鍵,然後每按動一次kk2鍵產生乙個節拍。

(6)聯機執行程式時,進入軟體介面,裝載機器指令後,選擇risc通路圖,按相應功能鍵即可聯機執行、監控、除錯程式。

2. cpld晶元設計

頂層模組電路圖

(top.sch)

3.risc接線圖

4.pld的abel程式

module   pld

t1,t2,t3,t4                pin ;

i7,i6,i5,i4,i3,i2,i1,i0    pin ;

pc_b, alu_b ,cs,wr         pin ;

ld,ldar,ldac,ldir,ldpc     pin ;

clr, r0_b,r1_b,r2_b        pin ;

lddr, ldr0,ldr1,ldr2       pin ;

mov,add,jmp,load,sta       node istype 'com' ;

rs_b, ldri                 node ;

f                          node istype 'reg';

equations

mov=!i6&!i5&!i4;     add=!i6&!i5&i4;     jmp=!i6&i5&!i4;

load=!i6&i5&i4;      sta=i6&!i5&!i4;

f.ar=clr;      f.clk=!((load#sta)&t4);   f:=!f.fb;

pc_b     =(!t1&!(load&t3)&!(sta&t3))#f;

cs       =(!t2&!f)#(!t1&!(t2&load)&!(t3&sta)&f);    

ldir     =t3&!f;

ldpc     =!t2&!(jmp&t3);

lddr     =(!add&t4);

alu_b    =!(add&t4);

wr      =!(t3&sta&f);

ld       =!(jmp&(t3#t4))#f; 

ldar     =t2#load&t4&!f#sta&t4&!f;

rs_b     =((!(mov&t3)&!(add&t3)&!(jmp&(t4#t3)))&!f)

#(!(sta&t3)&f);

ldri     =(!(mov&t3)&!(add&t4)#f)&(!(load&t2)#!f);

r0_b     =rs_b#i3#i2;       r1_b=rs_b#i3#!i2;

r2_b     =rs_b#!i3#i2;

ldac     =ldri#!i1#!i0;     ldr0=ldri#i1#i0;

ldr1     =ldri#i1#!i0;      ldr2=ldri#!i1#i0;

end

5.除錯程式

各指令操作碼

(i6i5i4):

mov  000

add  001

jmp  010

load 011

sta 100

一段功能偽**:

$p00 load  r0

$p01 08

$p02 mov r0 ac

$p03 add ro

$p04 store ro

$p05 09

$p06 mov r0 r1

$p07 jmp r1

$p08 01

$p09 ff

對應的機器碼實現:

$p0030

$p0108

$p0203

$p0314

$p0440

$p0509

$p0601

$p0725

$p0801

$p09ff 6.

除錯結果

說明:主要標出了變化的暫存器(或ram)和源(或目的)暫存器(或ram)

arir

pcalu

memr0

acdr

r1load [08] r00t1

0000

0030

0000

t230

t301

t401081

t108

01t2

01t3

02t4

mov r0 ac2t1

0203

t203

t303

01t4

add ac r03t1

0314

t214

t304

01t4

0202

store r0 [09]4t1

0440

t240

t305

4at4

05095t1

09t2

t306

02t4

mov r0 r16t1

0601

t201

t307

0202

t4jmp r17t1

0725

t225

t302

02t4

課程設計報告

c 程式設計 課程設計報告 一problem b 題意 輸出所有在給定範圍內的水仙花數 水仙花數是乙個三位數,它的各位數字的立方和等於其本身 解題思路 用while語句輸入多組資料,首先用for語句迴圈給定範圍的每乙個數,接著把個十百位數表示出來,用if語句進行判斷。細節處理 每一組資料的輸出要換行...

課程設計報告

1 水仙花數 是指乙個三位數,它的各位數字的立方和等於其本身,現在要求輸出所有在m和n範圍內的水仙花數。如下 include include include using namespace std int h 20 int main if h 0 0 else if h 0 0 cout 總結 這個...

課程設計報告總結

總結 從開始接觸這一新的 語言 到現在為止,差不多已經三四個月的時間。有喜有悲。喜 的是接觸到了新的東西 開闊了眼界 get到乙個新的技能 還有就是遇到了乙個好的老師 最重要的是讓我們知道自學的重要性。悲 的是熬夜敲 被一道題目 折磨 好幾天 還有就是,下學期我們不再開設這門課程,而我們學到的連皮毛...