实验四 微程序控制的运算器设计
实验分析
设计要求:
- 利用之前设计的具有超前进位功能的8位ALU,实现简单算术或逻辑运算
- 两操作数由八位寄存器R0、R1提供,其结果放入R2中。具体何种操作可由微命令任意设定(物理运算由ALU电路完成)。
实验要求完成如下所示的虚线框内的部分:
其中图片上方是运算器(ALU),下方是计数器(μPC)
另外因为实验要求的器件更改,图中有一部分是错误的,对照试验过程ALU中的右四位不应该是LM、DM、RM和C0,而应该是5位:M、S0-S3(对应74818的功能输入)
实现的功能
- 按一下单脉冲(会形成一个负脉冲),会输入到三个信号中
a. 在μRD的作用下,根据μPC的地址从ROM中取出24位的微指令代码(输入到μRD管脚中)
b. 在CPμIR的作用下,ROM中的24位微指令代码输出到μIR微指令寄存器中(输入到CPμIR管脚中)
c. μPC+1,形成下一次的8位地址(输入到μPC的clk中) - 其中,按第一次形成的24位微指令,将前八位输入R0(后5位不用管)
- 按第二次,前八位输入R1(后5位不用管)
- 按第三次,得到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个输出
运行流程
- 按下脉冲键,形成一次脉冲,脉冲输入充当三个输入(μRD、CPμIR、CPRi)
- μPC提供8位微地址 + 控存读信号(μRD、低电平有效) -> 控制存储器读出24位的微指令代码
- 控制存储器的24位微指令代码 + 打入命令(CPμIR、高电平有效) -> 送入微指令寄存器
- 微指令寄存器的24位指令中,前8位直接输出到2个寄存器中;中8位没有用处;
- 后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我很难找到一个具有概括性质的话语,写这篇文章的时候我尽力的理清了一下思路,不敢说每个人都能看懂,但就逻辑的清晰度来看我觉得是要好很多的,就酱紫,下次实验见…