一、实验目的

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;它利用物联网、大数据、…