一、实验时间

第三次实验:2021年4月8日星期四,第六周
第一次部件级实验,开始算分

二、实验内容

微程序控制的运算器设计

1. 实验目的

(1)熟悉简单运算器的结构
(2)熟悉微命令的产生和时序
(3)熟悉运算器功能测试。

2. 设计要求

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

3. 实验基本思路

整个实验由两个部分构成,一是设计的微指令,二是运算器和程序计算器的电路

项目整体架构图
在这里插入图片描述

一、用户自己设计的微指令

(1)用户设计的微指令默认从0号单元写入(如果计数器没有预置初值功能)
如果计数器有预置初值的功能,就可以指定某一号单元写入

(2)微指令字长为24位,采用立即寻址方式获得参与运算的数

我自己设计的微指令格式如下

微指令:A0-A7,A8-A15,A16-A23
最高八位为立即数
A23-A16 ----> D0-D7
中间八位中的前6位分别控制ALU的运算方式和进位
A15-A10 ----> C0,M,S0,S1,S2,S3
A9-A8—>值为0
最后八位
A7:寄存器R0的脉冲
A6:寄存器R1的脉冲
A5:寄存器R2的脉冲
A4:LM(左移)实现乘2功能
A3:DM(直送)
A2:RM(右移)实现除2功能

(3)使用软件将对应的微指令写入指定的单元内存中

要求会使用相应的软件,并明确微指令的格式,编写的含义和具体的存放地址

二、运算器和程序计算器的电路

(1)程序计数器uPC

程序计数器uPC模拟的是计算机中PC的用法,PC保存的是当前指令的地址,取完指令之后,
PC自动+1,寻找下一条指令
我的uPC采用的是异步模256加1计数器,可以预置初值(即初始指令的地址)
uPC来一次脉冲就计数+1,对应的输出就是微指令存储的地址
uPC同时具有清0的功能,当按下CPU复位键时,uPC自动清0

(2)运算器部分

运算器由三个寄存器和一个ALU电路构成
R0,R1保存要加的两个数
R2保存结果,并呈现到输出面板上
ALU电路由两个74181和一个74182电路构成
另外还有控制运算器采用什么运算的几个管脚

运算器框架图

在这里插入图片描述

(3)附加功能

在运算器输出端,可以加一个移位器,实现数据的左移(乘2),右移(除2),直送
而控制左移右移直送的信号由微程序提供

三、电路图

1. 可预置初值的模256异步计数器

这里复用了可预置初值的模16异步计数器
在这里插入图片描述

2. 8位ALU电路

在这里插入图片描述

3. 总图

这里最后的输出用了补码移位器

在这里插入图片描述

四、补充

1.脉冲的作用

在本次实验中,脉冲一共有四个作用,因此上面的总图中,脉冲CP并联了四个输出
在这里插入图片描述
2.绑定的管脚

uPC(模256计数器)的八个输出连到实验平台上的ROM,对应绑定的管脚如下
在这里插入图片描述

微指令的高八位连寄存器R0和R1的输入,而后其它位绑定对应的输入管脚
在这里插入图片描述
uPD和CPuIR绑定的管脚

在这里插入图片描述
单脉冲和清零(CPU复位)绑定的管脚号

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐