模拟微程序实现指令 HNUST【计算机组成原理】(2024)
1. 实验目的
模拟微程序实现机器语言指令
2. 实验原理
字发生器的一行输出数据可以作为一条微指令,一条机器语言指令由若干条微指令组成。用字发生器的输出取代图2-3中开关,模拟微指令自动执行实现一条机器语言指令。
3. 实验内容
在Multisim画出电路图并仿真,完成如下操作。
(1)产生任意数据存入通用寄存器GR1。
(2)产生任意数据存入通用寄存器GR2。
(3)完成GR1+GR2→GR1。
(4)完成GR1-GR2→GR2。
(5)完成GR1∧GR2→GR1。
(6)完成GR1∨GR2→GR2。
(7)完成GR1⊕GR2→GR1。
(8)~GR1→GR2。(“~”表示逻辑非运算)
(9)~GR2→GR1。
4. 实验要求
- 根据实验内容,认真完成实验操作,并做好记录。
- 实验报告。
5. 实验内容
基本原理
字发生器的一行输出数据可以作为一条微指令,一条机器语言指令由若干条微指令组成。用字发生器的输出取代开关,模拟微指令自动执行实现一条机器语言指令。
模块介绍
数据输入模块

数据输入控制模块

控制模块封装外观

封装内部电路
- 三态门数据输出控制(模块图片与实验3相同)
- 门电路控制组(模块图片与实验3相同)
- 缓存单元(模块图片与实验3相同)
- 锁存单元(模块图片与实验3相同)
- 8 BIT ALU
设计步骤
- 前面步骤与实验3相同。
- 增加字发生器,并写入字发生器数据。
- 运行调试结果。
流程图

设计图

微代码(这个只能用于上面的电路)
00000000010000000000100000011110 //加载数字1
00000000010000000000100010011110 //存入数字1
00000000010000000000100000011110 //关闭端口
00000000010000000000000000011110 //加载数字2
00000000010000000000000100011110 //存入数字2
00000000010000000000000000011110 //关闭端口
00000000010000000000000000011111 //存入缓存1,关闭输入
00000000010000000000000000010111 //打开锁存器1
00000000010000000000000000110111 //输入缓存1
00000000010000000000000000011111 //关闭缓存1,关闭锁存器1
00000000010000000000000000011111 //存入缓存2,关闭输入
00000000010000000000000000001111 //打开锁存器2
00000000010000000000000001001111 //输入缓存2
00000000010000000000000000011111 //关闭缓存2,关闭锁存器2
00000000010000000000000000011001 //输出缓存器1,2
10000000000110010000000000011001 //计算A+B
10000000100110010000000010011001 //输出A+B
10000000100110010000000000011001 //输出A+B
00000000010000000000000000011001 //输出缓存器1,2
01000000000001100000000000011001 //计算A-B
01000001000001100000000100011001 //输出A-B
01000001000001100000000000011001 //输出A-B
00000000010000000000000000011001 //输出缓存器1,2
00100000001010110000000000011001 //计算A^B
00100000101010110000000010011001 //输出A^B
00100000101010110000000000011001 //输出A^B
00000000010000000000000000011001 //输出缓存器1,2
00010000001011100000000000011001 //计算AvB
00010001001011100000000100011001 //输出AvB
00010001001011100000000000011001 //输出AvB
00000000010000000000000000011001 //输出缓存器1,2
00001000001010010000000000011001 //计算A⊕B
00001000101010010000000010011001 //输出A⊕B
00001000101010010000000000011001 //输出A⊕B
00000000010000000000000000011001 //输出缓存器1,2
00000100001000000000000000011001 //计算~A
00000101001000000000000100011001 //输出~A
00000101001000000000000000011001 //输出~A
00000000010000000000000000011001 //输出缓存器1,2
00000010001001010000000000011001 //计算~B
00000010101001010000000010011001 //输出~B
00000010101001010000000000011001 //输出~B
11111110010000000000000000011001 //结束
实验结果与分析如 计算数字01,11
|
6.小结与心得体会
该题目是所以题目中最难的,是前面几个题目的综合运用,对于知识的要求较高,调试的难度也是非常大的,电路简单,字发生器的代码开放困难,接口有32个,很难分清楚接口1与接口2的功能,因为字发生器编辑器不像文本编辑器一样方便,没有接口定义提示,不能直接删除、插入行代码,同时它不能同时增加多条指定代码,只能一条一条的添加,所以刚开始我打算用编程语言编写一个简单的编译程序,直接输出机器语言,方便编写自己的电路代码,不过由于时间的问题,这个需要耐心开放,我是一个一个编写功能的,不断完善它,简单来说这个题目难度还是比较大的。
7.下载电路文件(Github)
8.其他实验
我是芒果酱点一个关注吧 ( ´∀`)つt
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐









所有评论(0)