华 中 科 技 大 学 课 程 实 验 报 告
1 实验目的...............................................................................................1
2 实验环境...............................................................................................1
3 实验内容...............................................................................................1
3.1 构建 16 位运算器............................................................................. 1
3.2 构建自动运算电路........................................................................... 2
4 方案设计...............................................................................................2
4.1 构建 16 位运算器............................................................................. 2
4.2 构建自动运算电路........................................................................... 3
4.3 自动运算电路封装........................................................................... 5
5 过程与调试...........................................................................................5
5.1 实验步骤...........................................................................................5
5.2 测试结果与分析............................................................................... 5
5.3 故障与调试.......................................................................................7
6 总结与心得...........................................................................................8
6.1 实验总结...........................................................................................8
6.2 实验心得...........................................................................................8
7 参考文献...............................................................................................9
I
计算机科学与技术学院
华 中 科 技 大 学 课 程 实 验 报 告
1 实验目的
熟悉 Logisim 软件平台。
掌握算术逻辑运算单元构成原理。
熟悉运算通路构成。
熟悉存储器的使用。
复习有关运算器的内容,对数据通路的构成、数据在数据通路中的流动及控制
方法有基本的了解。
熟悉 logisim 中存储模块,运算模块,寄存器模块的使用。
2 实验环境
Logisim 是一款数字电路模拟的教育软件,每一位用户都可以通过它来学习如
何创建逻辑电路,方便简单。 它是一款基于 Java 的应用程序,可运行在任何支持
JAVA 环境的平台,方便学生来学习设计和模仿数字逻辑电路。Logisim 中的主要组
成部分之一就在于设计并以图示来显示 CPU。当然 Logisim 中还有其他多种组合分
析模型来对你进行帮助,如转换电路,表达式,布尔型和真值表等等。同时还可以
重新利用小规模的电路来作为大型电路的一部分。
3 实验内容
3.1 构建 16 位运算器
利用 logisim 平台中现有运算部件构建一个 16 位运算器,可支持算数加减乘除,
逻辑与、或、非、异或运算、逻辑左移、逻辑右移,算数右移运算,支持常用程序
状态字(进位、溢出,结果为零),在主电路中测试自己封装的运算器
1
华 中 科 技 大 学 课 程 实 验 报 告
3.2 构建自动运算电路
利用封装好的运算器,以及 RAM 模块,寄存器模块,计数器等 logisim 模块构
建一个自动运算电路,该电路由时钟驱动,可自动完成 RAM 模块(32*16 位)0-15
号单元的累加,并将累加的中间结果回存到同一 RAM 模块 16-31 号单元。
主电路最上面一行请将所有关键点的值用探测和隧道方式结合引出,用 10 进制
方式显示,便于检查,运算器结果直接用 16 进制数码管显示。
4 方案设计
4.1 构建 16 位运算器
(1)对于算数加减乘除,逻辑与、或、非、异或运算,logisim 平台已经提供了,
我只需要把它们设置为 16 位即可。逻辑左移、逻辑右移可以通过分离器分离出 16
位,再用分离器错 1 位进行连接,空出来的一位补上常数 0。计算机的算术左移竟
然和逻辑左移相同的,一次移位相当于乘以 2。算术右移是将各位依次右移指定位
数,然后在左侧用原符号位补齐,一次移位相当于除以 2。
(2)关于溢出的判断也是用了多路选择器,同时关于乘除运算的无符号溢出检测,
可以加一个比较器,当有乘法有进位或除法存在余数时,与零进行比较则可以判断
是否溢出。
将各类运算用 logisim 平台中现有运算部件实现后,先将两个 16 进制数输入到
各种运算中,其各种结果通过多路选择器输出所需要的那一个。进而构建好了 16
位运算器,如图 4.1
2
华 中 科 技 大 学 课 程 实 验 报 告
如图 4.2 列出了自己构建的 16 位运算器的功能表
图 4.1
16 位运算器
M
0000
0001
0010
0011
0100
0101
F
F=A+B
F=A-B
F=A*B
F=A/B
F=AB 逻辑与
F=AB 逻辑或
M
0111
1000
1001
1010
1011
0110
F
F=AB 逻辑异或
F=A 逻辑左移
F=A 逻辑右移
F=A 算术左移
F=A 算术右移
F=A 逻辑非
图 4.2
16 位运算器的功能表
4.2 构建自动运算电路
归纳每个元件的基本设计思路:
3
华 中 科 技 大 学 课 程 实 验 报 告
a.对于自己封装好的 16 进制运算器,只需要使用加法运算,所以在运算
选择出加一个关于加法的常数即可。
b. 对于时钟自动启停控制,当计数器累加到 16 的时候,通过比较器输出“1”
再与时钟通过或门连接,从而实现当自动运算结束后,运算器能停止。
c. 用到两个计数器,第一个是用来指出要读取的数据在 RAM 中的地址,第二
个和第一个计数器是受同一个时钟触发的,唯一的不同在于输出值会再加 15,用来
指出要存储的数据在 RAM 中的地址。
d. 用到的 RAM 是采取分离加载和存储引脚的方式,并且用到了周期只有主时
钟周期一半的独立时钟来控制。通过这样,方便实现加载和存储能够分别刷新,整
个自动运算器能够正常工作。
e. 通过计数器累加到 16 的时候,比较器输出“1”,然后连接二路选择器,使
得 16 进制数字显示器只会输出最后结果。
f. 将各个部件的清零端口连在一起,实现整体清零。
由此可以构建自动运算电路如图 4.3 所示。在图 4.3 的最下面,我已经通过隧道,
探测器,输出引脚设置了自动运算电路的检测装置,以便出现错误能够及时修改。
图 4.3 自动运算电路
4
华 中 科 技 大 学 课 程 实 验 报 告
4.3 自动运算电路封装
将实现的自动运算电路封装,该电路封装如下图 4.4,其中设置了清零按钮,
当需要重新进行试验的时候,可以通过这个按钮让自动运算电路回到初始状
态。运算器结果直接用 16 进制数码管显示,图 4.4 中用到四个 16 进制数码
管来表示。
图 4.4 自动运算电路封装电路
5 过程与调试
5.1 实验步骤
首先导入 RAM 的初始值,启动时钟模拟,观察封装电路中各个数据的表示。
5.2 测试结果与分析
A.可以观察到计数器从 0 累加到 16,然后停止。此时 16 进制数字显示器输出
最后结果,如图 5.1
5
华 中 科 技 大 学 课 程 实 验 报 告
图 5.1 最后结果的显示
B.当读取数据显示正常的时候,此时的地址就表示读取数据的地址
C.当读取数据显示不正常的时候,累加中间结果和地址的值对应,另外可以
观察到前一次读取数据显示正常时读取数据和累加中间结果相加正好等于
这次当读取数据显示不正常的时候累加中间结果的值,如图 5.2 和图 5.3 所
示,其中有 6+4=10.
图 5.2 读取数据显示正常,表示读取数据的地址
图 5.3 读取数据显示不正常,地址对应累加中间结果
6
华 中 科 技 大 学 课 程 实 验 报 告
D.能够自动完成 RAM 模块(32*16 位)0-15 号单元的累加,并将累加的中间
结果回存到同一 RAM 模块 16-31 号单元。如图 5.4 和 5.5
图 5.4
RAM 模块初始数据
图 5.3 自动运算结束后 RAM 模块数据
5.3 故障与调试
5.3.1 故障 1
对于时钟自动启停控制,当计数器累加到 16 的时候,通过比较器输出“1”。开
始的时候,并没有想到比较器,尝试了许多逻辑门电路,发现都无法达到预期效果。
经过与同学交换意见,知道了比较器的独特之处,通过再与时钟或门连接,从而实
现当自动运算结束后,运算器能停止。
5.3.2 故障 2
关于随机存储器 RAM,数据接口有三种方式,起初我就感觉到采取分离加载
和存储引脚的方式会比较简单,然后我就讲主时钟连到了 RAM 上,出现上升沿时
更新数据,可是发现加载和存储总会出错,要么是只加载不存储,要么是只加载存
储的不是累加结果。所以用到了周期只有主时钟周期一半的独立时钟来控制,通过
这样,方便实现加载和存储能够分别刷新,整个自动运算器能够正常工作。
5.3.3 故障 3
7