計算機組成原理課程設計基於cop2000

目 錄

1總體設計方案 - 1 -
1.1 課程設計的目的 - 1 -
1.2利用COP2000實驗平臺上設計指令微指令(微程序)系統並驗證,掌握微程序設計控制器的基本方法並瞭解指令系統與硬件結構的對應關係; - 1 -
1.3 課程設計的任務 - 1 -
1.4 詳細瞭解並掌握COP2000模型機的微程序控制原理,通過綜合實驗來實現 - 1 -………………………………………………………………………………….
2設計原理 - 6 -
3設計結論和心得 - 23 -

1總體設計方案
1.1 課程設計的目的
1.利用COP2000實驗平臺上設計指令微指令(微程序)系統並驗證,掌握微程序設計控制器的基本方法並瞭解指令系統與硬件結構的對應關係;
2.在部件單元電路實驗的基礎上,進一步將其組成,系統地構造一臺基本模型計算機。
1.2 課程設計的任務
利用COP2000實驗儀,詳細瞭解該模型機的指令/微指令系統入手,以實現加法和減法運算功能爲應用目標,在COP2000的集成開發環境下,設計全新的指令系統並編寫對應的微程序;之後編寫實現直接尋址、間接尋址、加減法、與、或、移位、跳轉操作、輸出操作的程序進行設計的實驗。
注意:
 每個設計彙編語言程序代碼不得少於10條。
1.2.1 詳細瞭解並掌握COP2000模型機的微程序控制原理,通過綜合實驗來實現
COP2000模型機指令系統的特點:
COP2000 模型機包括了一個標準 CPU 所具備所有部件,這些部件包括:運算器 ALU、 累加器 A、工作寄存器 W、左移門 L、直通門D、右移門R、寄存器組 R0-R3、程序計數器 PC、地址寄存器 MAR、堆棧寄存器 ST、中斷向量寄存器IA、輸入端口IN、輸出端口寄存 器 OUT、程序存儲器EM、指令寄存器 IR、微程序計數器 uPC、微程序存儲器 uM,以及中 斷控制電路、跳轉控制電路。其中運算器和中斷控制電路以及跳轉控制電路用 CPLD 來實 現,其它電路都是用離散的數字電路組成。微程序控制部分也可以用組合邏輯控制來代替。 這裏寫圖片描述
模型機爲 8 位機,數據總線、地址總線都爲8 位,但其工作原理與16 位機相同。相比而 言 8 位機實驗減少了煩瑣的連線,但其原理卻更容易被學生理解、吸收。 模型機的指令碼爲 8 位,根據指令類型的不同,可以有 0 到 2 個操作數。指令碼的最低 兩位用來選擇 R0-R3 寄存器,在微程序控制方式中,用指令碼做爲微地址來尋址微程序存 儲器,找到執行該指令的微程序。而在組合邏輯控制方式中,按時序用指令碼產生相應的控 制位。在本模型機中,一條指令最多分四個狀態週期,一個狀態週期爲一個時鐘脈衝,每個 狀態週期產生不同的控制邏輯,實現模型機的各種功能。模型機有 24 位控制位以控制寄存 器的輸入、輸出,選擇運算器的運算功能,存儲器的讀寫。
24 位控制位分別介紹如下:
XRD : 外部設備讀信號,當給出了外設的地址後,輸出此信號,從指定外設讀數據。
EMWR: 程序存儲器 EM 寫信號。
EMRD: 程序存儲器 EM 讀信號。
PCOE: 將程序計數器 PC 的值送到地址總線 ABUS 上。
EMEN: 將程序存儲器 EM 與數據總線 DBUS 接通,由 EMWR 和 EMRD 決定是將 DBUS 數據寫 到 EM 中,還是從 EM 讀出數據送到 DBUS。
IREN: 將程序存儲器 EM 讀出的數據打入指令寄存器 IR 和微指令計數器 uPC。 EINT: 中斷返回時清除中斷響應和中斷請求標誌,便於下次中斷。
ELP: PC 打入允許,與指令寄存器的 IR3、IR2 位結合,控制程序跳轉。
MAREN:將數據總線 DBUS 上數據打入地址寄存器 MAR。
MAROE:將地址寄存器 MAR 的值送到地址總線 ABUS 上。
OUTEN:將數據總線 DBUS 上數據送到輸出端口寄存器 OUT 裏。
STEN: 將數據總線 DBUS 上數據存入堆棧寄存器 ST 中。
RRD: 讀寄存器組 R0-R3,寄存器 R?的選擇由指令的最低兩位決定。
RWR: 寫寄存器組 R0-R3,寄存器 R?的選擇由指令的最低兩位決定。
CN: 決定運算器是否帶進位移位,CN=1 帶進位,CN=0 不帶進位。
FEN: 將標誌位存入 ALU 內部的標誌寄存器。
X2: X2、X1、X0 三位組合來譯碼選擇將數據送到 DBUS 上的寄存器。
X1: 見 16 頁表。
X0: WEN: 將數據總線 DBUS 的值打入工作寄存器 W 中。
AEN: 將數據總線 DBUS 的值打入累加器 A 中。
S2: S2、S1、S0 三位組合決定 ALU 做何種運算。
S1: 見 14 頁表。
S0:
1.2.2 模型機尋址方式
模型機的尋址方式分五種:
累加器尋址: 操作數爲累加器 A,例如“CPL A”是將累加器 A 值取反,還有些 指令是隱含尋址累加器 A,例如“OUT”是將累加器 A 的值輸出到輸 出端口寄存器 OUT。
寄存器尋址: 參與運算的數據在 R0-R3 的寄存器中,例如 “ADD A,R0”指令 是將寄存器 R0 的值加上累加器 A 的值,再存入累加器 A中。
寄存器間接尋址: 參與運算的數據在存儲器 EM 中,數據的地址在寄存器 R0-R3 中,例 如 “MOV A,@R1”指令是將寄存器 R1 的值做爲地址,把存儲器 EM 中該地址的內容送入累加器 A中。
存儲器直接尋址: 參與運算的數據在存儲器 EM 中,數據的地址爲指令的操作數。例如 “AND A,40H”指令是將存儲器 EM 中 40H 單元的數據與累加器 A的值做邏輯與運算,結果存入累加器 A。
立即數尋址: 參與運算的數據爲指令的操作數。例如 “SUB A,#10H”是從累加 器 A 中減去立即數 10H,結果存入累加器 A。
1.2.3該模型機指令系統的特點(包括其微指令格式的說明等):
①總體概述
該模型機的微指令是以直接表示法進行編碼的,其特點是操作控制字段中的每一位代表一個微命令。這種方法的優點是簡單直觀,其輸出直接用於控制。缺點是微指令字較長,因而使控制存儲器容量較大、
②微指令格式的說明
模型機有24位控制位以控制寄存器的輸入、輸出,選折運算器的運算功能,存儲器的讀寫。微程序控制器由24位控制信號,而微程序的地址又是有指令碼提供的,也就是說24位控制信號是由指令碼確定的。該模型機的微指令長度爲24位。其中微指令中只含有微命令字段,沒有微地址字段。其中微命令字段採用直接按位的表示法,哪位爲0,表示選中該微操作,而微程序的地址則有指令碼確定。這24位操作控制信號的功能如表1所示
表1 24位控制位
操作控制信號 控 制 信 號 的 說 明
XRD 外部設備讀信號,當給出了外設的地址後,輸出此信號,從指定外設讀數據。
EMWR 程序存儲器EM寫信號。
EMRD 程序存儲器EM讀信號。
PCOE 將程序計數器PC的值送到地址總線ABUS上。
EMEN 將程序存儲器EM與數據總線DBUS接通,由EMWR和EMRD決定是將DBUS數據寫到EM中,還是從EM讀出數據送到DBUS。
IREN 將程序存儲器EM讀出的數據打入指令寄存器IR和微指令計數器μPC。
EINT 中斷返回時清除中斷響應和中斷請求標誌,便於下次中斷。
ELP PC打入允許,與指令寄存器的IR3、IR2位結合,控制程序跳轉。
MAREN 將數據總線DBUS上數據打入地址寄存器MAR。
MAROE 將地址寄存器MAR的值送到地址總線ABUS上。
OUTEN 將數據總線DBUS上數據送到輸出端口寄存器OUT裏。
STEN 將數據總線DBUS上數據存入堆棧寄存器ST中。
RRD 讀寄存器組R0~R3,寄存器R?的選擇由指令的最低兩位決定。
RWR 寫寄存器組R0~R3,寄存器R?的選擇由指令的最低兩位決定。
CN 決定運算器是否帶進位移位,CN=1帶進位,CN=0不帶進位。
FEN 將標誌位存入ALU內部的標誌寄存器。
X2 X2、X1、X0三位組合來譯碼選擇將數據送到DBUS上的寄存器。
X1
X0
WEN 將數據總線DBUS的值打入工作寄存器W中。
AEN 將數據總線DBUS的值打入累加器A中。
S2 S2、S1、S0三位組合決定ALU做何種運算。
S1
S0
③ 模型機部件說明
COP2000中有7個寄存器可以向數據總線輸出數據, 但在某一特定時刻只能有一個寄存器輸出數據. 由控制位X2,X1,X0決定那一個寄存器輸出數據。
X2 X1 X0 輸出寄存器
0 0 0 IN_OE 外部輸入門
0 0 1 IA_OE 中斷向量
0 1 0 ST_OE 堆棧寄存器
0 1 1 PC_OE PC寄存器
1 0 0 D_OE 直通門
1 0 1 R_OE 右移門
1 1 0 L_OE 左移門
1 1 1 沒有輸出
COP2000中的運算器由一片EPLD實現. 有8種運算, 通過S2,S1,S0來選擇。運算數據由寄存器A及寄存器W給出, 運算結果輸出到直通門D。
S2 S1 S0 功能
0 0 0 A+W 加
0 0 1 A-W 減
0 1 0 A|W 或
0 1 1 A&W 與
1 0 0 A+W+C 帶進位加
1 0 1 A-W-C 帶進位減
1 1 0 ~A A取反
1 1 1 A 輸出A
3. 微程序控制器組成及原理
微程序控制器主要由控制存儲器、微指令寄存器和地址轉移邏輯三大部分組成。其工作原理爲:
① 將程序和數據通過輸入設備送入存儲器;
② 啓動運行後,從存儲器中取出程序指令送到控制器去識別,分析該指令要求什麼事;
③ 控制器根據指令的含義發出相應的命令(如加法、減法),將存儲單元中存放的操作數據取出送出運算器進行運算,再把運算結果送回存儲器指定的單元中;
④ 運算任務完成後,就可以根據指令將結果通過輸出設備輸出。
2設計原理
2.1本次設計,將綜合利用乘法的算法來實現一個數與相鄰的數的乘法,並將乘數減到0,主體設計爲在主程序中實現n的遞減,然後調用小程序中的乘法,這樣達到實現n的鄰乘的目的,,且在實現鄰乘的過程中,其中每次將乘數減1,直到0爲止,同時將乘法算出來的中間結果暫時存放在R0裏面,然後通過加減法,來實現乘數的減1,與被乘數的更新,即將中間結果替換被乘數。也實現了別的操作,如直接尋址、間接尋址、加減法、與、或、移位、跳轉操作、輸出操作, 這其中還有入棧和出棧的操作。
2.2小程序調用的原理:
2.2.1小程序示列:
MOV A,#00H ;立即數00H存入累加器A
LOOP: ;調用子程序
CALL INCA ;跳轉到子程序
JMP LOOP ;跳轉到循環
INCA:
ADD A,#1 ;累加器加1
RET ;子程序返回
END ;結束

2.2.2小程序跟蹤結果:
這裏寫圖片描述
2.2.3小程序執行結果的分析:
程序的開始執行一條取指的微指令,讀入程序第一條指令。
MOV A, #00: 將累加器的值設爲00H,以便下面觀察A加1後的結果。
CALL 06:本指令有四個狀態週期。在T3狀態,根據指令碼爲0BCH,讀出微指令值爲0FF7F7FH,有效位爲PCOE、MAREN,X2X1X0 的值爲011(二進制),PCOE有效是將PC加1,以便在下步將PC壓棧時,存入堆棧的是程序下一條指令的地址,MAREN有效及X2X1X0的 值表示從PC中讀出值並送到MAR中。在T2狀態,讀出微指令爲0FFEF7FH,有效位STEN,X2X1X0=100(二進制),表示從PC中讀數據並 存入堆棧寄存器ST中。在T1狀態,微指令值爲0D6BFFFH,表示以MAR爲地址從EM中讀出數據,此數據就是子程序的地址,此時堆棧中 保存的是調用子程序下條指令的地址。將此數據送到DBUS,再存入PC中,實現程序跳轉。在T0狀態,按新的PC值,取出下條將要執 行的指令。
ADD A,01:本指令將累加器加1。
RET: 本指令有兩個狀態週期。在T1狀態,上條取指操作讀出的指令碼爲0CCH,存入IR後,IR3、IR2的值爲11(二進制),取出 的微指令的值爲0FEFF5FH,有效位爲ELP,X2X1X0=010(二進制)表示從ST中輸出數據到總線,ELP有效與IR3、IR2=11表示無條件將數 據總線DBUS的數據打入PC,實現子程序返回功能。在T0狀態,按新PC取出指令,準備執行。
JMP 02: 程序無條件跳轉到02地址,執行程序。

2.3.計算機中實現乘法原理
(1)無符號乘法
(1)無符號乘法
①實例演示(即,列4位乘法具體例子演算的算式):
乘數與被乘數假設爲1100(12)與1000(8),結果應該爲96(十進制)。

運算圖示爲:
1 1 0 0 被乘數
X 1 0 0 0 乘數
0 0 0 0 初始部分積
+ 0 0 0 0 乘數最低位爲0,部分積加0,被乘數左移一位,乘數右移一位
0 0 0 0
+ 0 0 0 0 情況同上

           0    0   0    0   0

   +     0  0   0   0            情況同上
         0   0  0    0    0   0
  +     1 1   0  0                乘數最低位爲1,部分積加被乘數,被乘數左移一位,乘數右移一位

(0) 1 1 0 0 0 0 0 計算完畢,運算結果爲01100000(96)
算法流程圖:如下章所示

硬件原理框圖:

  相關說明: 將R1打入A中,R0存放的爲部分積,部分積初值爲0,若乘數最低位爲1,之後被乘數與部分積通過ALU加和,結果存於R0中。由於上一步嗎R(即被乘數)已在A中,所以直接通過X2X1X0的控制可實現A的邏輯左移1位。之後可將R2(乘數) 打入A中,通過對X2X1X0的控制可實現A的邏輯右移1位。期間判斷乘數、被乘數是否爲0的操作。

2.4.對應於以上算法如何分配使用COP2000實驗儀中的硬件
無符號乘法對應與COP2000乘法儀的硬件具體分配情況如下表所示:
表 無符號乘法的硬件分配情況

硬件名稱 實現算法功能描述
寄存器R0 計算時用來存放部分積和最後的積
寄存器R1 ① 初始化時,用來存放被乘數;
② 在程序執行的過程中,用來存放向左移後的被乘數
寄存器R2 ② 初始化時,用來存放乘數;
③ 在程序執行的過程中,用來存放向右移後的乘數
累加器A 執行ADD R?,A(加法)、SHL R?,#Ⅱ(左移1位)、SHR R?(右移一位)等命令時所必需使用的寄存器
寄存器W 執行ADD R?,A(加法)、TEST R?,#Ⅱ(測試與)等命令時所必需使用的寄存器
左移門L 用來實現相應數據左移一位的運算,並能夠控制該運算的結果是否輸出到數據總線。
直通們D 用來控制ALU的執行結果(未經移位)是否輸出到數據總線。
右移們R 用來實現相應數據右移一位的運算,並能夠控制該運算的結果是否輸出到數據總線
程序計數器PC ① 控制程序按順序正常執行;
② 當執行轉移指令時,從數據線接收要跳轉的地址,使程序能夠按需要自動執行
③ 當要從EM中讀取數據時,由PC提供地址。
存儲器EM 存儲指令和數據
微程序計數器UPC 向微程序存儲器uM提供相應微指令的地址
微程序存儲器uM 存儲相應指令的微指令。微程序
輸出寄存器OUT 可以將相應的運算結果輸出到輸出寄存器OUT
堆棧ST 可以用來暫放操作數或者對寄存器值進行保護
2.5在COP2000集成開發環境下設計的指令/微指令系統

(1)新的指令集:
助記符 機器碼1 機器碼2 指令說明
FATCH 實驗機佔用,不可修改
Mov R? #Ⅱ 寄存器傳送立即數
Mov A R? 寄存器的數傳送到累加器A上
Mov A @R? 寄存器間接尋址
Mov @R? A 寄存器間接尋址
Mov A #Ⅱ 累加器傳送立即數
Mov MM A 吧累加器的數寫入到存儲器
ADD R? A 累加器和某個寄存器的數相加
ADD R? #Ⅱ 某個寄存器數加上立即數
SUB R? A 累加器與寄存器作減法
SUB R? #Ⅱ 寄存器減去立即數
PUSH A 將累加器數入棧
POP A 將累加器數出棧
IN 輸入寄存器
OUT 輸出寄存器
AND A #Ⅱ 與運算
OR A #Ⅱ 或運算
CPL A 按位取反
CALL MM 調用小程序
RET 返回
TEST R? #Ⅱ 測試指令
JMP MM 跳轉
SHL R? 右移
SHR R? 左移
JZ MM 跳轉
CMP R? A
這裏寫圖片描述

(2)微指令集
① 將窗口切換到uM 微程序窗口, 現在此窗口中所有微指令值都是0FFFFFFH,也就是無任何操作,我們需要在此窗口輸入每條指令的微程序來實現該指令的功能。這裏寫圖片描述

② 選擇菜單[文件|保存指令系統/微程序]功能將新建的指令系統/微程序保存下來以便以後調用爲了不與已有的指令系統衝突將新的指令系統/微程序保存爲MY.INS。
④ 將所設計的微指令截圖顯示入下表中。

這裏寫圖片描述

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

2.6源程序:
MOV R0,#00H ;初始化R0
MOV R1,#03H ;給R1賦值
MOV A,R1 ;吧R1的值傳送到A
PUSH A ;吧A入棧
AND A,#00H ;吧A與0作於運算
OUT ;
OR A ,#00H ;吧A與0作或運算
OUT ;
CPL A ;吧A按位取反
OUT
CPL A ;再把A按位取反
OUT
MOV A,@R1 ;間接尋址
OUT
POP A ;出棧
OUT
MOV R2,#03H ;給R2賦值
TEST R2,#0FH ;檢查R2末位是否爲0
JZ OVER ;跳轉到結束
LOOP: SUB R2,#01H ;將R2減去1
CALL INCA ;調用小程序
MOV A,R0 ;吧R0的值傳給A
ADD R1,A ;吧A的值加到R1上
ADD R2,#01H ;R2加1
MOV A,R2 ; 吧R2的值傳送到A
SUB R1,A ; R1值減去A的值
SUB R2,#01H ; R2減去1
JMP LOOP ;跳轉到循環
INCA: TEST R2,#0FH ;檢查R2末位是否爲0
JZ OVER ; 跳轉結束
TEST R2,#01H ; 測試末位爲1,是就跳轉
JZ NEXT ;跳轉
MOV A,R1 ;吧R1的值傳送到A中
ADD R0,A ; 吧累加器A的數與寄存器R0的數進行加和
RET ;返回
NEXT: SHL R1 ;將被乘數左移一位
SHR R2 ; 將乘數右移一位
JMP INCA ; 繼續下一次判定並作乘法
OVER: JMP OVER ;死循環鎖住PC的值
這裏寫圖片描述
這裏寫圖片描述
6.程序運行根棕
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

3設計結論和心得
3.1 調試運行程序時是否出現問題,是否有重新調整指令/微指令系統設計的情況出現?請在此具體說明。
1. 設計指令系統時,發現JC,JZ,JMP所對應的微指令是一樣的,經過查詢說明手冊後發現其實根據機器碼的後2位來區分的。
2. 在最開始運行時助記符OK所對應的微程序是CBFFFF,即爲取下一條指令,可是在箱子上運行時發現,PC這樣會一直動,於是我將原來的OK指令改成了一個JMP OVER語句形成了一個死循環,從而保證在運行時PC不動,從而使結果穩定輸出。
3. 在測試階乘數據時發現,運用的乘法的算法有缺陷,並不能實現階乘,因爲用到的乘法算法只能計算一次完整的乘法,計算完畢就跳出結束了,所以只能實現倆個數的乘法運算,於是便設計成相鄰倆個數的乘法,並將乘數減置0.。
3.2、本次課程設計的總結體會
在本次課程設計中,我設計了無符號的4位乘法的指令系統和相應的微指令系統、以及編寫了相對應的彙編語言程序和子程序。
在這次課程設計中,我將課堂所學的知識運用到實踐工作中,這種學以致用的感覺真是非常好,紙上得來終覺淺,絕知此事要躬行,在沒做這次課設之前,我對CPU的指令系統,微指令系統只有一個初步的映像,並不清楚微指令在CPU實際運行過程中對應的是什麼。
在這次課程設計中,我知道了,所謂微指令,其實就是對一些控制位所置的高低電平的組合。除此之外,在這次實驗中,我還了解了計算機中是如何實現乘法的,並且
自己實現了他,雖然說課設規模不是很大,不過經過自己完整的做下來還是很有成就感的,這將爲我以後的學習工作打下堅實的基礎,總而言之,這次課設真是讓我收益匪淺,希望以後能多一些這樣的鍛鍊機會。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章