计组头哥实验 实验四 MIPS运算器设计

实验目的

算术逻辑运算单元(ALU)的基本构成,掌握 Logisim 中各种运算组件的使用方法,熟悉多路选择器的使用,能利用前述实验完成的32位加法器、 Logisim 中的运算组件构造指定规格的 ALU 单元。

实验内容

1、实验封装好的32位加法器以及 Logisim 平台中现有运算部件,构建一个32位算术逻辑运算单元(禁用 Logisim 系统自带的加法器,减法器),可支持算术加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移、算术右移运算,支持常用程序状态标志(有符号溢出 OF 、无符号溢出 UOF ,结果相等 Equal ),ALU 功能以及输入输出引脚见后表,在主电路中详细测试自己封装的 ALU ,并分析该运算器的优缺点。

2、电路框架

3、电路引脚及ALUOP功能表

 

4、电路测试

电路框架提供了自动测试子电路,也可以自行评分,具体测试电路如下图所示:

 

实验过程

  1. 创建新的 Logisim 电路文件。在 Logisim 中创建新的电路文件,并命名为“ALU”。

  2.添加输入输出引脚。根据表格中的输入输出引脚添加对应的输入输出端口,包括 x、y(两个32位操作数)、op(4位运算符)、cin(加减运算中的进位/借位)和输出 z(32位运算结果)、OF、UOF、Equal、cout(加减运算中的进位/借位)。

  3.添加 32 位加法器和状态标志寄存器。在 Logisim 的工具栏中选择 Add 工具,然后在窗口中找到 32 位加法器和状态标志寄存器组件,分别添加到电路中。

  4.实现逻辑运算器。在 Logisim 的工具栏中选择 Add 工具,然后在窗口中找到 与门、或门、非门 和 异或门 元件,分别添加到电路中。

  5.实现移位器。在 Logisim 的工具栏中选择 Add 工具,然后在窗口中找到 左移位、右移位和 右移算数 元件,分别添加到电路中。

   6. 实现乘法器。采用 Booth 算法实现,由多个 32 位 Booth 子单元组成。

   7. 实现除法器。采用 Restoring Division 算法实现,由多个 32 位 Restoring Division 子单元组成。

   8.实现多路选择器。在 Logisim 的工具栏中选择 Add 工具,然后在窗口中找到 Multiplexer 元件,添加到电路中,并连接相应的输入和控制信号。

   9. 连接 ALU 各个组件。根据电路框架设计,将各个组件按照要求连接起来,并仔细调整每个组件的参数和输入输出端口,确保它们能够正确地协同工作。

   10. 测试 ALU 是否正常工作。进行全面的测试,包括加、减、乘、除、与、或、非、异或、逻辑左移、逻辑右移、算术右移运算是否正确,并检查状态标志是否正确。

    11.分析 ALU 的优缺点。对 ALU 的实现原理、速度、功耗和可靠性等方面进行综合分析,并提出改进意见。

实验详细操作步骤

设计思路

先构造出每一种功能的输出,再根据OP的值来选择输出:

0~2:分别用一个移位器实现,设置对应的属性;

3~4:分别用自带的乘法器、除法器实现;

5:加法,用封装好的32位加法器,OF判断最高位进位和符号位进位是否一致,UOF判断是否有进位(需一个异或门),C0取0;

6:减法,用封装好的32位加法器,Y取反用一个非门实现,无符号数的减法溢出,带加减功能的ALU的进位取反后表示,有符号数的减法溢出,仍然用最高位和符号位是否相等来判断,C0取1;

7~10:分别用与门、非门、异或门、或非门实现;

11:比较器用补码型,结果0拓展;

12:比较器用无符号型,结果0拓展,还需要一个equal信号;

都构造好之后,根据OP的值输出resualt。

电路框架.

电路引脚

 

 实验结果

疑难小结

  本次实验是针对算术逻辑运算单元(ALU)的基本构成和 Logisim 中各种运算组件的使用方法进行的。通过实验,我深入了解了 ALU 的工作原理、状态标志的计算方法以及多种运算组件的使用方法,并具备了使用 Logisim 构建 ALU 的能力。

在实验过程中,我遇到了一些问题,比如  

1.没有正确连接端口。在构建 ALU 时,一定要注意每个组件的输入输出端口是否正确连接,否则可能会导致电路无法正常工作。

2.组合逻辑实现的复杂度高。由于 ALU 采用组合逻辑实现,所以其复杂度很高,需要精心设计和调试。因此,在实验过程中,需要耐心地进行测试和分析,以确保 ALU 正常工作。

3. 测试向量选择不当。在测试 ALU 时,需要选择合适的测试向量,包括正常/异常情况和边界情况。如果测试向量选择不当,可能会导致测试结果不准确。

4.状态标志计算错误。ALU 中的状态标志计算复杂,需要仔细检查计算公式和实现方法,以确保结果正确。

5.缺乏可扩展性。由于 ALU 的实现方式比较固定,所以缺乏可扩展性。如果需要支持更多的操作或者提高性能,可能需要重新设计 ALU。但通过仔细检查和琢磨,最终都得到了解决。

通过本次实验,我还学习到了一些实用的调试技巧,比如使用仿真工具进行测试、采用分步调试的方式找出问题所在等,这些技巧对我的电路设计以及其他实验项目也有很大帮助。

最后,我认为本次实验的收获非常大,不仅提高了我的实验技能和编程能力,而且拓宽了我的知识面和思维方式。我将继续努力,在未来的实验中取得更好的成果。

  • 16
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真的卷不栋了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值