计算机组成原理课程设计_微程序控制的运算器设计

实验四 微程序控制的运算器设计

实验分析

设计要求:

  • 利用之前设计的具有超前进位功能的8位ALU,实现简单算术或逻辑运算
  • 两操作数由八位寄存器R0、R1提供,其结果放入R2中。具体何种操作可由微命令任意设定(物理运算由ALU电路完成)。

实验要求完成如下所示的虚线框内的部分:
这里写图片描述

其中图片上方是运算器(ALU),下方是计数器(μPC)

另外因为实验要求的器件更改,图中有一部分是错误的,对照试验过程ALU中的右四位不应该是LM、DM、RM和C0,而应该是5位:M、S0-S3(对应74818的功能输入)

实现的功能

  1. 按一下单脉冲(会形成一个负脉冲),会输入到三个信号中
    a. 在μRD的作用下,根据μPC的地址从ROM中取出24位的微指令代码(输入到μRD管脚中)
    b. 在CPμIR的作用下,ROM中的24位微指令代码输出到μIR微指令寄存器中(输入到CPμIR管脚中)
    c. μPC+1,形成下一次的8位地址(输入到μPC的clk中)
  2. 其中,按第一次形成的24位微指令,将前八位输入R0(后5位不用管)
  3. 按第二次,前八位输入R1(后5位不用管)
  4. 按第三次,得到R2(后5位调成相应 命令)

负脉冲
这里写图片描述


运算器结构:

这里写图片描述

输入:
1. 微指令数据的输入:μIR(23-16)共8个
2. 为了控制输入由R0还是R1保存,以及R2是否保存:需要额外3个输入用于选择(CPR0,CPR1,CPR2)
3. ALU选择进行哪些操作:需要5个输入(M,S0-S3)
输出:
1. R2的运算结果(8个)(从R2中输出)

取出的是24位的微指令代码,但只需要16个输入,也就是有8位是没有用处的,观察下图,μIR23-μIR16和μIR7-μIR0是用到的,其他是没有用到的
这里写图片描述

p是脉冲,CPRi是相应的寄存器的打入脉冲,只有在有p脉冲和底部CPRi的脉冲共同作用下,寄存器才能存储μIR23-μIR16的数据


μPC的结构:

见下图连接,这里略



微程序控制器的连接:

需求:

  • 控制存储器ROM
    • 字长24位,由三个字长8位的ROM组成(实验系统自带)
  • 微程序μPC计数器
    • 字长8位,向控制存储器提供8位的微地址(自己搭建)
  • 微指令寄存器μIR(23-0)
    • 字长24位,需要显示出来(用24个信号灯L23-L0)(实验系统自带)
  • 运算器ALU
    • 每次接收13个输入(前8位和后5位),经过命令后会产生8个输出

这里写图片描述


运行流程

  1. 按下脉冲键,形成一次脉冲,脉冲输入充当三个输入(μRD、CPμIR、CPRi)
  2. μPC提供8位微地址 + 控存读信号(μRD、低电平有效) -> 控制存储器读出24位的微指令代码
  3. 控制存储器的24位微指令代码 + 打入命令(CPμIR、高电平有效) -> 送入微指令寄存器
  4. 微指令寄存器的24位指令中,前8位直接输出到2个寄存器中;中8位没有用处;
  5. 后8位中,前三位用来控制哪个寄存器有效,即控制前两个寄存器是否接受前8位的数据以及第三个寄存器是否接受ALU的运算结果,后五位用来控制ALU接受了前两个寄存器的输入后,经过怎样的运算输出

μPC


μPC其实就是一个PC计数器,用来实现脉冲+1和预置功能的,本次实验用两个74161实现8位计数器,样式如下
这里写图片描述

74161的功能表
这里写图片描述

上表一个没有说明的功能是:计数到1111时RCO=1,这样就使得进位可以连续下去


8位寄存器


8位寄存器是由8个D触发器组成的,用于实现存储值,具体实现如下:
这里写图片描述

D触发器的功能表:
这里写图片描述
也就是只要没有上升沿脉冲触发,output永远是之前的值不会变


8位超前进位ALU


然后是今天最后的8位超前进位ALU了,它有两个74181和一个74182组成。

原理:其中74181是4位加法器,本来可以通过串联直接变成8位加法器,但为了解决串联过程的延迟,于是通过一个74182(超前进位产生器)来实现超前进位,使运算速度更快(通俗一点,74182就是接收低四位的进位信息反馈给高四位的,本来可以直接两个74181传递,但是用74182更快一点)

实现如下:
这里写图片描述

74181的功能表
这里写图片描述
简单的说,An和Bn是输入的两组数,Sn是用于控制A和B实现什么运算的,Fn是运算的4位输出,C是是否有进位。
G和P有些特殊,G称为进位产生函数,Gi=Ai*Bi,也就是A和B都为1的时候本位会产生下一位的进位。
P称为进位传递函数,Pi=Ai+Bi,也就A和B有一个为1的时候,如果低位进1,则本位会产生进位
GN =G3+P3G2 +P3P2G1 +P3P2P1G0
PN =P3P2P1P0


运算器设计


最后就是将这些组件全都连接起来,并设置相应的管脚
这里写图片描述

这个如果不懂原理,直接照着连可能会看不懂..因为还设置了一些输出是用于调试的(没设置名字,直接是pin_namei的),建议弄清楚整个流程后再连。

整个过程是这样的:
这里写图片描述
红线和橙线先执行,然后执行蓝线
红线允许ROM从μPC的8位数据对应的地址中取24位数据输出到μIR指令寄存器,橙线允许指令寄存器接收ROM的24位数据并保存
这里写图片描述
随后μIR指令寄存器的数据保持输出状态,赋给上图橙色标注的管脚,执行相关的命令。
最后返回一开始的图,执行蓝线,计数器+1

在ROM中输入指令,重复三次脉冲,看到最后的结果

实验中的ROM指令是16进制输入的,找个进制转换网站解决吧。


总结

这个实验一开始做是很懵逼的…而且老师的ppt我感觉很乱,就有种不知道从何处下手的感觉,其实这个实验理解透了很简单…就是控制ROM读指令到μIR,然后从μIR接收指令完成操作,也就是将μIR指令控制代替了开关控制,中间多了一步操作就是,但整个PPT我很难找到一个具有概括性质的话语,写这篇文章的时候我尽力的理清了一下思路,不敢说每个人都能看懂,但就逻辑的清晰度来看我觉得是要好很多的,就酱紫,下次实验见…

猜你喜欢

转载自blog.csdn.net/sailist/article/details/80010937