山东大学软件学院计算机组成原理课程设计整机实验(1)

article/2025/10/16 14:22:55

文章目录

    • 一、实验时间
    • 二、实验要求
    • 三、整机实验基本思路
      • 3.1 前序知识
      • 3.2 关于机器指令和微指令的存放,读取和跳转
    • 四、电路图
      • 4.1 启动电路
      • 4.2 模8计数器
      • 4.3 24和38译码器
      • 4.4 总图
    • 五、实验中遇到的问题和注意事项
      • 5.1 脉冲问题
      • 5.2 微指令问题
      • 5.3 取指周期不断循环的问题
      • 5.4 状态位不正确的问题
    • 六、机器指令和微指令

一、实验时间

2021年4月29日星期四,第9周
2021年5月6日星期四,第10周

整机实验总共四次,由于第一次实验出现问题,没做出来,第二次实验成功了,因此这次的博客包含了第一次和第二次整机实验的内容

二、实验要求

前两次整机实验的主要目的是完成老师要求的整机实验的基本功能

基本功能如下

1.设计基本指令系统,包含以下几个机器指令

  • LOAD Ri AD:取数指令,指令长度为两字节,(AD)–> Ri,AD为操作数在内存中的地址,根据AD取得操作数,打入Ri
  • STORE Ri AD:存数指令,指令长度为两字节,将Ri的值存入内存中(地址为AD)
  • ADD Ri,Rj:加法指令,指令长度为一字节,Ri+Rj->Rj,将Ri和Rj中保存的数求和,存入Rj中
  • HALT:停机指令,指令长度为一字节,实现停机功能

2.模型机的基本结构为单总线,根据模型机框架图画出具体的电路图

具体的结构框架图参考老师ppt里的这个图
在这里插入图片描述
注意,千万不要参考例子里的图

3.在保存两数相加的结果时,也要保存相应的状态位

  • C:反映无符号数的运算是否产生进位。运算结果的最高有效位向更高位进位或者借位,C置1,否则置0
  • V:反映有符号数的运算是否溢出。运算结果超过了规定字长有符号数的表示范围,V置1,否则置0
  • N:反映运算结果的符号。运算结果为负,N置1,否则置0。
  • Z:判断结果是否为0。运算结果0,Z置1,否则置0。

其实有符号数和无符号数不用区分得太清楚,可以全部当成有符号数来算

4.基本要求
在这里插入图片描述
注意以下几点

  1. 要求必须使用连续脉冲,程序执行结束后自动停机
  2. 总共4条机器指令,其中LOAD和STORE指令为双字长,ADD和HALT指令为单字长
  3. LOAD指令取操作数采用的是直接寻址的方式,而不是老师示例里给的立即寻址

三、整机实验基本思路

3.1 前序知识

在进行整机实验之前,由于涉及机器指令和微指令,比较复杂,因此一开始的时候我没弄清楚思路。

这里强烈建议整机实验思路很不清晰的同学去看一下大二上计组书第10章10.2节的内容

10.2 节主要描述的是微程序设计的基本思路,在书本 P403-P410

相信看完之后对整机实验微指令的理解会更充分一些

3.2 关于机器指令和微指令的存放,读取和跳转

首先明确以下几点

  1. 机器指令和数据存在RAM中
  2. 每条机器指令对应的一段微指令存放在ROM的相应内存中

实验思路

整机实验分为两个部分,一个是机器指令和微指令的部分,另一个是电路图的部分

(1)机器指令和微指令

机器指令按顺序存放在RAM里,微指令存放在ROM里

整机实验跟之前的第四次部件级实验很像(有uPC和PC),都涉及RAM和ROM的同时操作,上次的实验是从ROM中取微指令,而下一条微指令的地址只能是uPC+1,而这整机实验下一条微指令的地址则复杂多变,可能有三种情况(uPC+1,JP,QJP)。

在上次实验里,取出的微指令负责操控取RAM的PC,MAR,MBR等寄存器,还负责对RAM进行读写,这次实验也是一样,只不过上次实验中从RAM中取来的只是地址或数据,而这次从RAM中取来的既有机器指令,又有数据。

所以,整机实验在本质上和上次的实验有很多相似的地方,只不过功能变得更多了控制打入寄存器的方式也变多了,之前是某一位控制一个寄存器的打入脉冲,现在是三位2进制数控制好几个寄存器,使用38译码器对微指令进行译码

由于本次实验在RAM中一共有4条机器指令
注意要通过机器指令选择打入哪个寄存器

比如:
LOAD Ri Ai
ADD Ri,Rj
STORE Rj,AD3
HLAT

而我们按下脉冲的时侯,连续脉冲自动工作,如果不预设初值的话,uPC自动从ROM的0地址开始取出微指令,前几条微指令的功能就是从RAM中取出第一条机器指令(注意是双字长)

在取出第一条机器指令的第一个字长的时候,根据第一个字长中的OP,自动在OP后加上0000,形成这条机器指令要执行的微指令的地址,之后uPC的初值设为这个地址,跳转到这条机器指令对应的微指令执行

要特别注意的是这条机器指令是双字长指令,因此在这条机器指令对应的微指令里,还要再设计一个取指周期,取出第二个字长的机器指令

微指令在执行的过程中,需要指定下一条微指令的地址,共有三种方式,一种是uPC+1,另一种是JP(无条件转移,微地址由uIR23-16提供),还有一种是QJP(按照高4位操作码,第4位为0转移)。

刚刚上面说的这种转移方式就是使用QJP方式转移的

这就是取出第一条机器指令并执行的全部过程

在执行完第一条机器指令之后(即执行到第一条机器指令对应的最后一条微指令的时候),会使用JP进行无条件转移,转移到下一条机器指令的取值周期部分,取出机器指令之后,再根据这条机器指令的OP判断对应要执行的微程序的地址,然后执行,以此类推

最后一个指令是停机指令,用于终止连续脉冲

以上就是对微程序执行过程的分析,我们要做的就是明确流程,写好对应的微程序和机器指令

具体的微指令编码可以参考老师课件上的这个图,但要注意的是,老师的这个只是示例,我们最后写的跟老师的这个不一样,还是要根据具体的图来写相应的微指令
在这里插入图片描述
(2)电路图部分

电路图部分的结构框图参考上面的结构框架图,其中ALU有多种运算功能,R0,R1使用寄存器组封装,IR采用普通寄存器,PC采用带有三台门,可置位的PC,MDR采用带有三态门的寄存器,锁存器Z采用带三态门的寄存器,暂存器Y采用普通寄存器

特别注意的是CU部分,由于这一部分的输出和uPC相连(相当于CU部分要确定微指令的地址),所以CU部分需要连选择器,两路选择的数据分别为OP(IR)+0000和微指令的高8位,目的是给uPC设置初值(即下一条微指令的地址)

另外要注意的地方就是24位微指令的输出,在必要的地方需要使用24或38译码器,然后连接对应的寄存器的CP

特别注意MDR的部分,MDR有两路输入,两路输出,一路输入从总线中获得,另一路输入从RAM里来,需要加2路选择器进行选择。一路输出总线,另一路输出RAM,都需要加三态门

四、电路图

4.1 启动电路

注意,这里最后的输出没加非门,跟上次实验不一样,在总图中,启动电路输出连uPCPC的部分加了非门,这样是为了适应时序问题
在这里插入图片描述

4.2 模8计数器

在这里插入图片描述

4.3 24和38译码器

在这里插入图片描述
在这里插入图片描述

4.4 总图

总图里使用了寄存器组,寄存器组我只封装了两个,有的老师要求必须封装4个
总图由于太大(大于5MB),这里没法上传,我之后会上传到我的资源里

这里把MDR的连线结构展示一下,输出连了两个三态门
在这里插入图片描述
启动电路部分注意加非门的部分,如果不这样画,可能会出现脉冲问题
在这里插入图片描述

五、实验中遇到的问题和注意事项

5.1 脉冲问题

让我觉得非常疑惑的是,在整机实验中,使用上次实验(实验四)的启动电路时会出现问题,虽然不论是更改前还是更改后,原理都是一样的,但是就是会出现问题。因此要对启动电路部分进行以下修改,修改后指令执行正确

  1. 去掉启动电路输出那里的非门
  2. 在CPuPC的输入加非门(启动电路输出加非门),uRD和CPuIR直接连启动电路的输出

具体的连线方法在上面的启动电路图和总图中有

5.2 微指令问题

在一开始设计微指令的时候,出现了一些问题,导致运行结果不正确

首先是ADD指令对应的微指令中不需要PC+1,因为ADD指令是单字长指令,之前设计了PC+1的微指令,导致PC多加了一次

另外就是ADD指令中要将R0和R1的数同时送给ALU相加,否则会出问题
一开始的时候先把R0送ALU,再把R1送ALU,相加之后结果有误

5.3 取指周期不断循环的问题

在第一次整机实验时,出现了取值周期循环的问题,无法实现正常跳转
后来发现有两个问题,第一个问题是我自己的电路图连错了,第二个问题是我的微指令写错了,导致出现无限循环无法跳转
在解决了这两个问题之后,指令正常执行跳转
此外,取值周期的循环问题还可能是由上面5.1的脉冲问题导致的,我没有遇到,但是有的同学遇到过这样的情况

5.4 状态位不正确的问题

之前调试的时候,将CPPSW和CPRi两个信号放在同一条微指令里执行,理论上应该即保存状态位,又保存运算的结果,但是却出现了状态位不对,结果正确的情况
因此在之后的微指令中,我先打入状态位,再打入结果,这样状态位就正确了

六、机器指令和微指令

机器指令
在这里插入图片描述

微指令和具体的微操作

具体的二进制位在这里就不给了,因为不同人设计的微指令不同,具体的二进制也不同

取指微指令
在这里插入图片描述

LOAD
在这里插入图片描述
ADD
在这里插入图片描述

STORE
在这里插入图片描述

HALT

在这里插入图片描述


http://chatgpt.dhexx.cn/article/19cMJLgM.shtml

相关文章

计算机组成原理课程设计基于cop2000

目 录 1总体设计方案 - 1 - 1.1 课程设计的目的 - 1 - 1.2利用COP2000实验平台上设计指令微指令(微程序)系统并验证,掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系; - 1 - 1.3 课程设计的任务 - 1 - 1.4 详细了解并掌握COP2000模型机的微程序控制原理…

北航计算机组成原理课程设计-2020秋 PreProject-Logisim-时序逻辑电路

北航计算机学院-计算机组成原理课程设计-2020秋 PreProject-Logisim-Logisim时序逻辑电路 本系列所有博客,知识讲解、习题以及答案均由北航计算机学院计算机组成原理课程组创作,解析部分由笔者创作,如有侵权联系删除。 从本节开始&#xff0…

计算机组成原理课程设计报告总结

实验0 ROM仿真 1、实验目的 (1)掌握ROM的工作原理; (2)画出逻辑电路图及布出美观整齐的接线图; (3)掌握ROM读出原理。 2、实验原理 存储元由有否二极管组成,若有&#x…

计算机组成原理论文5000字,计算机组成原理课程设计论文

计算机组成原理课程设计论文 (25页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 计算机组成原理庁果程设计扌艮告设计题目:设计八位全加器院系:计算机科学与信息工程学院专…

计算机组成原理 中断综合设计实验,模型机中断实验计算机组成原理课程设计报告...

模型机中断实验计算机组成原理课程设计报告 计算机组成原理课程设计报告2014 计算机组成原理课程设计报告 班级:计科 1202组号 2-3北京化工大学计算机科学与技术专业计算机组成原理课程设计报告院 系: 信息科学与技术学院 专 业: 计算机科学…

计算机组成原理课程设计——CPU与简单模型机设计

一、设计目的 1、掌握一个简单CPU的组成原理。 2、在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机。 3、掌握微程序控制器设计。 二、设计任务与要求 设计任务: 用所学知识,设计并构造一台简单模型机。验证指导书…

计算机组成原理——课程设计

《计算机组成原理》 课程设计 一、目的和要求 深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。…

计算机组成原理课程设计:复杂模型机

课程设计报告 课程名称: 计算机组成原理 设计题目: 复杂模型机 目 录 1、课程设计任务书 3 1.1设计任务 3 1.2性能指标和设计要求 3 2、本设计的模型机体系结构及功能 4 2.1 模型机的体系结构 5 2.2 模型机所具有的基本功能 5 3、 模型机硬件设计 5 3…

用excel、matlab、python绘制正态分布图

用excel、matlab、python绘制正态分布图 excel绘图matlab绘图python绘图 为加深对统计知识的理解,老师要求用excel和matlab绘图,在这想介绍3个常见的绘图软件来绘制正态分布密度函数曲线和正态分布分布函数曲线。 excel: matlab: excel绘图…

统计信号处理基础 习题解答1-2

题目: 一个未知参数θ影响一个随机变量实验的结果,这个随机实验可以看成随机变量x。x的PDF为 进行一系列的实验,发现x总是在区间[97,103]内。结果我们得出结论:θ肯定是100,这种推测正确么? 解答&#xf…

数学建模(NO.9斯皮尔曼相关系数)

斯皮尔曼相关系数 一. 定义方法一:计算公式法三.方法二:利用皮尔逊相关系数法四.Matlab计算五.斯皮尔曼和皮尔逊对比六.斯皮尔曼相关系数的假设检验1.小样本(查表)2.大样本(计算统计量) 七.两个比较八.相关…

【FinE】统计与计量指标计算(Matlab)

导航 CDF函数(normal distribution)CDF函数(t-location-scale distribution)CAPM模型 β \beta β计算误差项 ε i \varepsilon_i εi​计算correlation and covariance t t t分布拟合序列Generalized Hyperbolic Distributionapproximation method 1approximation method 2 Go…

【概率论与数理统计】python实验

实验一抛硬币试验的模拟 利用python产生一系列0和1的随机数,模拟抛硬币试验。验证抛一枚质地均匀的硬币,正面向上的频率的稳定值为0.5。 实验步骤 (1)生成0和1的随机数序列,将其放入列表count中;也可用函数…

matlab 数理统计,概率论和数理统计(matlab应用)1

概率论和数理统计(matlab应用)1 (2006-04-29 08:53:49) 12.1 概 述 自然界和社会上会发生各种各样的现象,其中有的现象在一定条件下是一定要发生的,有的则表现出一定的随机性,但总体上又有一定的规律可循。一般称前者为确定性事件&#xff0c…

正态分布中normpdf和normcdf的区别

同时,也可以扩展为其它函数的区别,即pdf与cdf

matlab中normcdf函数用法,Matlab中标准正态分布的密度函数是normcdf(x,0,1)

中标准正属于项目资本现金流量表中现金流出构成的是() 态分USCI模块中的波特率由分频器和调制器共同作用生成。 在MSP430F66xx时钟设置中XT1的XIN和XOUT引脚接32768Hz低频晶振,密度则UCSCTL6的UCSCTL6 & ~XT1OFF表示使能XT1,UCSCTL6 | XCAP_3表示选择…

matlab中normcdf和normpdf区别

最近准备参加个数学建模,其中校赛题目是有关于正态分布的排队论,在做的时候总是发现有问题,后来仔细研究才发现在matlab中关于正态分布有两个函数normcdf和normpdf。

【Matlab】正态分布常用函数normpdf_normcdf_norminv_normrnd_normfit

1.normpdf 功能:正态分布概率密度函数 用法 Y normpdf(X,mu,sigma) Y normpdf(X) % (mu 0, sigma 1) Y normpdf(X,mu) % (sigma 1)例子 % code1 % 画标准正态分布概率密度函数 x -10:0.01:10; y normpdf(x, 0, 1); plot(x,y); grid on;结果&#xff1a…

firefox iMacros

iMacros是一个基于firefox的插件,它可以帮助你自动填写表单,自动提交,自动上传下载等 iMacros就是一个可以帮助你实现自动化重复性的任务。无论你对Firefox做什么,iMacros可以自动执行它。网络设计人员可以使用的功能测试和回归测…

SEO必备的利器–iMacros

Via http://www.snailtoday.com/2012/02/imacros/ 今天向大家介绍一个做SEO必备的利器–iMacros,我们可以用它来自动发布博客评论、自动注册论坛账号、自动发布文章等,几乎可以和一些SEO软件相媲美。其实在之前翻译的一篇文章《10000美元/天是这样炼成的…