計算機組成原理與體系結構-實驗四 微程序控制器 (Proteus 8.15)

一、實驗目的

1、理解“微程序”設計思想,了解“指令-微指令-微命令”的微程序結構。

2、掌握微程序控制器的結構和設計方法。

二、實驗內容

設計一個“最簡版本”的 CPU 模型機:利用時序發生器來產生 CPU 的預定時序,通過微程序控制器的自動控制,在數據通路中完成“唯一”的 CPU 功能——程序跳轉。

三、實驗器件

1、ROM存儲器(2764)和計數器(74LS163、74LS192)。

2、D觸發器(74LS74)、寄存器(74LS273)及移位寄存器(74LS194)。

四、實驗原理

4.1 理論解釋

說明:由于筆者能力有限,加上覺得實驗指導的描述專業性、條理性較強,所以摘抄到下文。同時,建議形成自己的理解。筆者覺得,這個實驗雖然只設計了4條微指令,但是由于2條微指令的內容又和PC或者說程序的運行(跳轉)本身有關,所以理解起來需要費一些功夫;如果設計的微指令可以和實驗一的加法器或實驗二的ALU相關,理解上的難度會降低。

實驗電路由時序發生器(下圖中黃框部分)、微程序控制器(下圖中紅框部分)和數據通路組成。

數據通路由三個部件組成:指令寄存器 IR(74LS273)、程序計數器PC(74LS163 級聯)、程序存儲器 PROGRAM(ROM)及其地址寄存器 AR(74LS273)。所有 部件都并聯掛在單條的 8 位總線 BUS 上,通過數碼管顯示總線 BUS 信息。 其中,程序計數器 PC 是一個八位遞增計數器,由兩個同步二進制計數器 74LSl63 級聯構成。74LSl63 的邏輯功能如下圖所示:D0D1D2D3為并行輸入端; Q0Q1Q2Q3為并行輸出端;ENT、ENP 為遞增使能端;LOAD 為置數端;MR 為清 零端;CLK 為時鐘輸入端;RCO 為進位輸出端。當低四位 74LS163 輸出端 Q3-Q0 溢出后,則 RCO=1 送到高四位74LS163 的 ENT 和 ENP 端,允許高四位74LS163 在 CLK 上升沿自加 1 一次(僅允許一次)。注意:74LS163 的加載和自加 1 功能都必須滿足 CLK 端上升沿跳變的條件才能實現。

圖 17????? 74LS163計數器 邏輯功能

因為本次實驗的數據通路簡單,實現的功能有限。所以本實驗的 CPU 只能使用 四條基本指令:空指令 NOP、停機指令 HLT,以及直接尋址的跳轉指令 JMP1 和 間接尋址的跳轉指令 JMP2,如下圖所示。

圖 18????? Mini CPU(微程序控制法設計)--四條基本指令(無操作、停機(斷點)、一級跳轉、二級跳轉)

根據圖18所示的 CPU 指令格式,可以編寫機器語言(即二進制數據)形式的程序,存放在存儲器 PROGRAM 中。程序按地址順序存放(可以通過程序計數器PC 遞增尋址),每一個存儲器單元地址上存儲 8 位二進制數據,例如下圖所示的這段程序:

圖 19????? ROM-PROGRAM 燒錄程序

圖19所示的每一條指令,在其指令周期中都經歷了取指周期和執行周期兩個階段。所有指令的取指周期都是一樣的(除了HLT停機指令,該指令在取值周期的第二個微指令結束后就會使CPU“卡殼”),執行周期則各有不同(NOP 指令不存在執行周期<->總共1個機器周期4條微指令,JMP1執行周期1個<->總共2個機器周期8條微指令,JMP2執行周期2個<->總共3個機器周期12條微指令)。歸納起來所有指令在數據通路上出現的操作只有兩種:取指周期中的指令流ROM->IR,執行周期中單次或多次重復出 現的數據流ROM->PC。

總結一下,不同指令可能對應不等長的微指令個數,這在CISC體系的計算機處理器設計中很常見,也是微程序法主要的應用體系。總體上每個指令都劃分為取指周期和執行周期,每個周期由4個時鐘周期/4條微指令進行。微指令的結構和與微命令的關系見下文圖23。這就是微程序的架構:指令-微指令-微命令的層級模式了。

圖 20????? 微程序架構

指令流(ROM->IR)是從存儲器 PROGRAM 取出指令,經過總線 BUS 流向指令寄存器 IR,數據流(ROM->PC)是從存儲器 PROGRAM 取出數據,經過總線 BUS 流向程序計數器 PC。無論是指令流還是數據流,信息都是先從一個部件打到總線 BUS,再從總線 BUS打到另一個部件的過程。因為信息從源部件打出到總線 BUS 的操作必須先于信息從總線BUS 打入目標部件的操作。所以為了保證上述操作的先后次序,指令流和數據流內部都可以分為兩個周期 T1 和 T2。在 T1 周期,源部件 (例:程序存儲器 PROGRAM)的信息打入總線;在 T2 周期;總線的信息打入目標部件(例如指令寄存器 IR 或者程序計數器 PC)。

圖 21????? 微操作信號(單獨位控制方法)

圖 22????? 微命令的兩種設計方法(位單獨控制/位組合控制)[2]

數據通路上設計了一系列的微操作信號用來控制各個部件,如圖21所示。

本實驗的微指令結構如下圖所示:微指令字長 24 位,通過下址轉移方式確定后續運行的微指令,即微指令的 1-5 位表示下一條微指令地址 [uA4, uA0]。而微指令的 6-7 位留給判斷字段 Px(其中 P0 位空缺),P1=1,表示本微指令是取指周期的微指令;P1=0,表示本 微指令是執行周期的微指令。微指令的 8-24 位則是微命令字段,微命令即是數據通 路中電平觸發的微操作信號(詳見圖21)。某位置“1”,表示該位微操作信號有效;反之,置“0”則表示該位微操作信號無效。

圖 23????? 微指令的結構

本實驗用到的四種基本微指令,如圖24所示。

圖 24????? NOP/JMP1/JMP2/HLT 微指令

?將 CPU 指令周期示意圖圖20 用“微程序”設計原理闡述,可以得到 CPU 指令的微程序流程圖(圖25)。

圖25? CPU指令-微程序流程圖

注意,每個機器周期一定由T1、T2、T3、T4四個時鐘周期組成,對應4條微指令,對于00000 NOP微指令,下址字段還是自己,所以要跳轉到其他兩個指令,在T4的時候通過部分強制置位的方式設置MA微指令地址寄存器中的內容。

圖 26????? 從微指令00000(NOP)跳轉到00001(JMP1)或00010(JMP2)

如果要跳轉到00111(NOP),在T2的時候指令打入IR,通過三輸入與非門直接控制“節拍器”74LS194,停止機器周期的計數,從而實現硬件停機效果,見下圖。

圖 27 硬件停機指令HLT,停機在T2上升沿之后

那么對于其他的非NOP、非HLT指令怎么跳轉呢?T3的上升沿作為觸發信號直接把下址地址(5位)打入微指令地址寄存器MA0-MA4。

圖 28????? 微地址寄存器,普通指令內執行周期間跳轉

筆者在實驗電路中通過藍色數碼管顯示當前機器周期所處的時鐘周期位置,紅色數碼管記錄機器周期個數,綠色數碼管顯示程序或者數據(讀取PROGRAM ROM,可以是指令內容也可以是PC要跳轉到的指令位置)。

其他注意事項:時鐘信號的設置、機器周期計數顯示器、啟動設置、跳出斷點設置

從斷點HLT指令繼續時,按照我的理解,不是從下一個指令的T1開始,而是從HLT指令的T3開始,走完T3、T4之后才進入下一個指令的T1去取指,可以通過藍色數碼管直觀觀察(如果我對實驗內容理解準確而且連線設計無誤)。所以跳出斷點的操作一定不能有下圖的步驟2!74LS194的關鍵控制信號是{S0,S1}(見下圖),在跳出斷點的第一個步驟之后,S0=1,S1=1也就是送數模式,此時如果手動撥動CLK開關,會使74LS194節拍器回到HLT取指周期的T1,你會發現你將永遠跳不出第一條HLT指令的死循環(那種絕望感)。

圖 29????? 跳出斷點 三步操作VS兩步操作

關于手動清零的設計,涉及IR、MA、PC、MDR、AR這五個器件,指令地址寄存器AR可以清零也可以不清零,如果AR跳出斷點時沒有被清零就是上面我說的第一種絕望,如果被清零了就屬于下面我要說的第二種絕望。

圖 30????? 斷點-清零AR導致整個程序重新執行

下圖(圖31)中啟動設置的步驟1,通過RESET手動清零只能設計成可以清零IRMA0-MA4微地址寄存器,不能設計清零PC和三個MDR中的內容清零PC會導致跳出斷點之后程序無法記憶,從頭開始執行(仿真一開始PC指向0x00),那么你會發現你將永遠看不到第一條HLT指令后的世界(絕望感)。

啟動時不能清零MA0-MA4微指令地址寄存器,因為啟動時微指令默認指向00000(NOP),控制信號存在值為1的位,清零之后直接系統紊亂;但是,跳出斷點時“可以清零”MDR中的內容,因為圖24顯示HLT微指令(00111)的所有位都是0!但是設計時需要支持任何一種特殊情況,因此不能清零MDR寄存器。

圖 31????? 其他注意事項

4.2 電路架構

由于實驗四的電路過于龐雜,筆者把整個系統基于4.1開頭提到的三個子模塊按照功能進一步拆分,如下面幾張圖所示,有些在4.1節已經出現。

圖 32????? 微程序控制組件(2條總線MABUS/NABUS):微地址寄存器(下址地址,T3/T4有效)+微指令讀取

圖 33????? 紅:指令周期計數 綠:程序內容顯示 藍:節拍定位(指令周期內部)與數據通路(1條總線,數據和指令共享)

圖 34 ??? 00000微指令下址地址跳轉模塊(T4有效)、00111停機微指令作用模塊(T2生效)

圖 35????? 啟動/斷點調試與時鐘信號源選擇

圖 36????? 時序發生器(三種模式)

五、實驗步驟

  1. 根據圖24 微指令代碼表可以編寫下列微程序,編譯并生成三個 HEX 文件,分別燒寫到圖 2-34所示的控制存儲器 EPROM1、EPROM2 及 EPROM3。

  1. 問題:在寫入控制存儲器的微指令代碼表中,地址[00001](JMP1)和[00010](JMP2)的兩條執行周期微指令執行的微操作完全一樣。請問,可否合并這兩條微指令?若不能,原因是什么?

不能合并。因為[00010](JMP2)的下址地址是[00001](JMP1)微指令而非[00000](NOP)微指令,相當于JMP2并不是直接定義的,而是使用嵌套的間接定義方式,建立在JMP1的基礎上。

3)編譯如下所示的機器語言源程序,生成 HEX 文件燒寫到圖 2-34 所示的程序存儲器PROGRAM中。

個人在過CPU跳轉的時候認為燒錄程序的第四條 “指令”的助記符應該是“NOP”。這段程序相當于是一個死循環,JMP1執行1次,此后永久的執行第三行到JMP2指令的程序段。

1、啟動仿真前,時鐘信號CLK 接在 MANUAL_CLK 端;啟動仿真,使能復位信號RESET=1,然后手動按鈕 MANUAL_CLK,令時鐘信號 CLK上升沿跳變,初始節拍{T1,T2,T3,T4}={1,0,0,0};最后恢復復位信號 RESET=0,初始化過程完成。

2、手動按鈕 MANUAL_CLK,令時鐘信號 CLK 形成脈沖,單步執行上述機器語言程序。在 JMP1 或 JMP2 指令的指令周期中,對照微程序流程圖 2-37,觀察每一條微指令的作用,以及單步執行的結果(例如寄存器 AR、IR、PC 及總線 BUS 上的數據)。

3、時鐘信號 CLK 改接在 AUTO-CLK 信號源(主頻 10Hz),程序會自動運行到 HLT 指 令“斷點”暫停。查看“斷點”處的微指令周期數指示,以及寄存器 AR、 IR、PC 及總線 BUS上的數據。然后,使能復位信號 RESET“0->1->0”,跳出“斷點” ,進入 HLT 指令的后續下一條指令繼續運行。

?4)(實驗 2)增加一條二次間接尋址的跳轉指令 JMP3,嵌套定義在JMP2指令的基礎上。

并編譯如下所示的機器語言源程序,生成 HEX 文件燒寫到圖 2-34 所示的程序存儲器PROGRAM中。

這段程序是有限次數的執行。

5)問題:在本實驗程序中,有部分地址標示“NOP/[ADDR]”,為何相同代碼會有不同的執行效果?執行到該處,在什么情況下是不執行任何操作?在什么情況下是程序跳轉?

因為程序中的每一行可以解讀成指令或者指令需要的數據,比如有些地址標示NOP,如果是從NOP或者JMP1執行完到這一行那就是NOP;但如果是JMP2或者JMP3中間跳轉的暫停點就是作為數據的ADDR了。

六、思考題

1、微程序版本 CPU 最多有多少條微指令?最多有多少條 CPU 指令?微指令和 CPU 指令的容量分別由什么因素限定?

在本仿真實驗中,CPU微指令可以有32條,因為下址字段有5位;IR存儲的指令種操作碼長度是3位(I7I6I5),所以最多8條,實際應用時需要結合指令的操作碼長度以及操作碼的編碼方式(擴展操作碼或固定操作碼長度,見下圖)。因此在CISC體系中,微程序版本CPU微指令的容量受到下址字段的位數限定,CPU指令的容量受到指令的字數和字長(比如32位/64位操作系統的概念),以及操作碼的編碼方式等因素的限制。

圖 37????? 指令的字數和字長、操作碼的編碼方式[2]

2、請問微程序控制器“狀態機”可否提升效率,減少到三個狀態{T1,T2,T3}?即微指令周期可否減少到只用 T1、T2、T3 三個節拍即可完成一條微指令從取指到執行的全過程?

不可以,因為微指令結構中有PX位的設定,本實驗對于00000(NOP)微指令P1=1,其余(圖24,關鍵圖)其余微指令P1=0,這也引出了圖34(左)的設計,對于00000生效在T4,對于其他微指令生效在T3,所以不能再減少機器周期(指令周期,一個指令可以有多個周期)的數量。

附:實驗1-4設計演示視頻:

計算機組成原理專業實驗課有多“卷”?來看看什么叫細節的海洋~~~_嗶哩嗶哩_bilibili

參考資料

[1] 熱愛生活的fuyao. 學習筆記——3-8譯碼器實例(FPGA)[EB/OL]. (2021-01-24)[2025-06-29]. 學習筆記——3-8譯碼器實例(FPGA)_3-8譯碼器功能表-CSDN博客

[2] 華南理工大學計算機學院王國華老師的課件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86813.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86813.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86813.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

安卓端某音樂類 APP 逆向分享(二)協議分析

以歌曲搜索協議為例&#xff0c;查看charles中歌曲搜索協議詳情 拷貝出搜索協議的Curl形式 curl -H Host: interface3.music.xxx.com -H Cookie: EVNSM1.0.0; NMCIDoufhty.1667355455436.01.4; versioncode8008050; buildver221010200836; resolution2392x1440; deviceIdYDwXa…

七天學會SpringCloud分布式微服務——03——Nacos遠程調用

1、微服務項目配置類放在地方 配置類型應放位置說明通用配置類&#xff08;如&#xff1a;跨服務通用的攔截器、全局異常處理、統一響應體封裝等&#xff09;可放在一個**公共模塊&#xff08;common/config&#xff09;**中&#xff0c;被各服務引入實現代碼復用&#xff0c;…

基于Java+Spring Boot的校園閑置物品交易系統

源碼編號&#xff1a;S561 源碼名稱&#xff1a;基于Spring Boot的校園閑置物品交易系統 用戶類型&#xff1a;多角色&#xff0c;用戶、商家、管理員 數據庫表數量&#xff1a;12 張表 主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven 運行環境&#xff1…

SpringBoot 的 jar 包為什么可以直接運行?

一、普通jar包和SpringBoot jar包有什么區別&#xff1f;什么是jar包&#xff1f;&#xff1f; &#xff08;1&#xff09;什么是Jar包&#xff1f; 定義&#xff1a; JAR 包&#xff08;Java Archive&#xff09; 是 Java 平臺標準的歸檔文件格式&#xff0c;用于將多個 Jav…

算法-基礎算法-遞歸算法(Python)

文章目錄 前言遞歸和數學歸納法遞歸三步走遞歸的注意點避免棧溢出避免重復運算 題目斐波那契數反轉鏈表 前言 遞歸&#xff08;Recursion&#xff09;&#xff1a;指的是一種通過重復將原問題分解為同類的子問題而解決的方法。在絕大數編程語言中&#xff0c;可以通過在函數中再…

TVFEMD-CPO-TCN-BiLSTM多輸入單輸出模型

47-TVFEMD-CPO-TCN-BiLSTM多輸入單輸出模型 適合單變量&#xff0c;多變量時間序列預測模型&#xff08;可改進&#xff0c;加入各種優化算法&#xff09; 時變濾波的經驗模態分解TVFEMD時域卷積TCN雙向長短期記憶網絡BiLSTM時間序列預測模型 另外以及有 TCN-BILSTM …

深入淺出Node.js中間件機制

我們用一個實際的例子來看看中間件是如何運作的。假設我們有一個非常簡單的Express應用&#xff0c;它只有兩個中間件函數&#xff1a; const express require(express); const app express();app.use((req, res, next) > {console.log(第一個中間件);next(); });app.use…

Vue-15-前端框架Vue之應用基礎編程式路由導航

文章目錄 1 RouterLink的replace屬性1.1 App.vue1.2 應用效果2 編程式路由導航2.1 場景一Home.vue2.2 場景二News.vue3 路由重定向3.1 index.ts3.2 Detail.vue3.3 About.vue1 RouterLink的replace屬性 路由每次跳轉都有記錄,默認是push,可以改為replace。 RouterLink支持兩…

android14 設置下連續點擊5次Settings標題跳轉到撥號界面

部分項目隱藏了撥號器&#xff0c;但開發者需要間距跳轉到撥號界面 設置一級界面&#xff1a; packages/apps/Settings/src/com/android/settings/homepage/SettingsHomepageActivity.java 通過dispatchTouchEvent方法先獲取Settings標題的區域X,Y數據。 import java.util.Set…

MP分頁和連表常用寫法

1. 分頁查詢 方案一&#xff1a;MyBatis XML MyBatis 內置的使用方式&#xff0c;步驟如下&#xff1a; ① 創建 AdminUserMapper.xml 文件&#xff0c;編寫兩個 SQL 查詢語句&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE m…

使用 Spring AI Alibaba構建 AI Code Review 應用

很早的時候就想著用AI來做Code Review&#xff0c;最近也看到了一些不錯的實現&#xff0c;但是沒有一個使用Java來構建的&#xff0c;看的比較費勁&#xff0c;雖然說語言只是一種工具&#xff0c;但是還是想用Java重新寫一遍&#xff0c;正好最近Spring AI Alibaba出了正式版…

力扣1590. 使數組和能被 P 整除

這一題的難點在于模運算&#xff0c;對模運算足夠了解&#xff0c;對式子進行變換就很容易得到結果&#xff0c;本質上還是一道前綴和哈希表的題 這里重點講一下模運算。 常見的模運算的用法 (a-b)%k0等價于 a%kb%k 而在這一題中由于多了一個len&#xff0c;&#xff08;數組的…

FPGA內部資源介紹

FPGA內部資源介紹 目錄 邏輯資源塊LUT&#xff08;查找表&#xff09;加法器寄存器MUX&#xff08;復用器&#xff09;時鐘網絡資源 全局時鐘網絡資源區域時鐘網絡資源IO時鐘網絡資源 時鐘處理單元BLOCK RAMDSP布線資源接口資源 用戶IO資源專用高速接口資源 總結 1. 邏輯資源…

CSS 列表

CSS 列表 引言 CSS 列表是網頁設計中常用的一種布局方式&#xff0c;它能夠幫助我們以更靈活、更美觀的方式展示數據。本文將詳細介紹 CSS 列表的創建、樣式設置以及常用技巧&#xff0c;幫助您更好地掌握這一重要技能。 CSS 列表概述 CSS 列表主要包括兩種類型&#xff1a…

spring中的@Cacheable緩存

1. 使用方法 在方法上面加上注解Cacheable&#xff0c; OverrideCacheable(cacheNames "userCache", key "#id")public User getUserById(Long id) {System.out.println("查詢數據庫了");return getById(id);}如果你的項目中引入了&#xff…

Node.js特訓專欄-實戰進階:9.MySQL連接池配置與優化

?? 歡迎來到 Node.js 實戰專欄!在這里,每一行代碼都是解鎖高性能應用的鑰匙,讓我們一起開啟 Node.js 的奇妙開發之旅! Node.js 特訓專欄主頁 專欄內容規劃詳情 MySQL連接池配置與優化:提升數據庫交互性能的關鍵 一、MySQL連接池基礎概念 1.1 什么是連接池? 連接池是…

【innovus基礎】- 如何手動畫線?

后端實現的過程就是將邏輯連線變為物理的金屬連線的過程。 1、打開Pin shape的Visible 和 Selected開關&#xff0c;使其可見并可選 2、選中想要畫線的IOCell 3、鼠標選中對應的pin 4、使用dbGet 獲取此pin腳邏輯連線net的名字&#xff1b; dbGet selected.net.name 5、使用畫…

element-plus限制日期可選范圍(這里以7天為例)

element-plus日期范圍限制功能實現邏輯 1. 需求&#xff1a;通過限制時間的可選范圍減少請求的數據量 2. 實現效果&#xff1a; 日期選擇器做限制 3. 代碼邏輯&#xff1a; 思路&#xff1a;通過calendar-change獲取開始日期&#xff0c;然后通過disabled-date禁用不滿足條件…

機器學習2-梯度下降與反向傳播

損失函數 與 平均方差函數 傻傻分不清 損失函數是概念&#xff1b;平均方差函數是具體的實現 損失函數&#xff08;如均方誤差 MSE&#xff09;用于衡量模型預測值與真實值之間的差距。損失越小&#xff0c;說明模型對當前數據的擬合越好。 但模型并非擬合度越高越好&#xf…

安全生產風險管控平臺:企業安全管理的智能化解決方案

在工業生產、建筑施工、能源化工等領域&#xff0c;安全生產是企業可持續發展的基石。然而&#xff0c;傳統安全管理模式依賴人工巡檢、紙質記錄和事后處理&#xff0c;難以滿足現代化企業的高效風險管控需求。安全生產風險管控平臺應運而生&#xff0c;它利用物聯網、大數據、…