实验四 32 位 ALU 设计实验

一、实验预习要求

  1. 预习《计算机组成原理》慕课附录 3.4 节、《计算机硬件系统设计》慕课 4.3
    节。
    二、实验目的
  2. 掌握定点数加减法溢出检测方法。
  3. 理解算术逻辑运算单元 ALU 的基本构成。
  4. 掌握 Logisim 中各种运算组件的使用方法:
  1. 逻辑运算:与、或、非、异或
  2. 算术运算:乘法器、除法器、求补器、比较器
  3. 移位器
  1. 熟练掌握多路选择器的使用方法。
  2. 能利用前述实验完成的 32 位加法器(禁止使用 Logisim 自带的加法器/减法
    器组件)和 Logisim 的运算组件构造指定规格的 ALU 单元。

三、实验内容
使用 Logisim 软件打开实验电路图“alu.circ”完成算术逻辑运算单元 ALU
子电路的设计,并在 ALU 自动测试电路中进行测试。
7. 算术逻辑运算单元 ALU 子电路设计。
8. ALU 自动测试。

先上电路图:
在这里插入图片描述
实验原理分析:
ALU 运算操作码定义 如下:
在这里插入图片描述

根据OP进行操作的原理

使用数据选择器,将op(这里的s)所有取值的对应运算功能实现,最后根据op的值来进行数据选择。

0,1,2操作

这三个操作类似,我们可以一起说。需要实现的运算功能,我们都可以直接在logisim中直接找到。
实验很明显的说到,
Y取低五位,因为x的数据位宽就是32位,所以最多只能被移动5位(2^5=32),取Y低五位我们可以用分线器实现。
在这里插入图片描述

3操作

实现乘法使用乘法器即可,由于相乘可能出现溢出,R2对应端口连接高进位。

4操作

将x和y连接触发器,将商和余数连接对应端口即可。

5,6操作

加法直接连接加法器输入端即可,减法我们可以看成x+(-y),使用一个求补器将y的补码送进加法器。
有符号加减法溢出,我们将最高位和符号位进位异或(下面有图片)。
无符号加法溢出很好理解,如果最高的两位相加,产生了进位,那么肯定就是溢出了!
无符号减法,因为我们求补码多加了一个模,按理说就应该会产生一个进位,所以当进位为1是,其实并未溢出。进位为0,说明1(应该进的)+1(溢出的)=>0,此时是真正溢出了!所以我们要取反!

引用一张ppt吧,嘿嘿,挺简明的。
这里是引用

7,8,9,10操作

根据需要实现的逻辑功能,连接对应即可。

11,12操作

我们可以使用现成的比较器进行比较,同时注意比较器中有 无符号和有符号的 选项,注意选择。
此外,由于比较结果数据位宽为1位,而选择器数据位宽为32位,这里需要使用位扩展器
在这里插入图片描述
在这里插入图片描述
[外链图片转存中…(img-luESZXLn-1618490852793)]

其他细节

1) 由于不能有引脚悬空,所以不输入的都要接地
2)result2只在X和Y进行乘除操作才会有数值,其他时候都是0,这同样可以使用一个 数据选择器实现
3)同样的,UOF和OF只在X和Y进行加减操作才会有数值,其他时候都是0,同样可以使用一个 数据选择器实现
4)Equal可以在比较器的 ‘=’ 那里直接连接

### 实现32二进制数的求补运算 为了在Logisim中实现32二进制数的求补运算,即按取反后再加1的操作,可以按照以下思路构建电路: #### 构建按取反模块 对于每一输入的二进制信号,可以通过逻辑非门(NOT Gate)来完成按取反操作。由于需要处理的是32数据,因此需要创建一个由32个非门组成的阵列。 ```plaintext +---+ +---+ | 0 |---->| ! |---> out_0 (第0输出) +---+ +---+ ... (重复上述结构共32次) +---+ +---+ |31 |---->| ! |---> out_31 (第31输出) +---+ +---+ ``` 该部分负责将原始输入`in[31:0]`转换成其逐反转的结果`out_inv[31:0]`[^1]。 #### 添加全加器链路以执行最终加法 接下来,在已经获得的逆向版本基础上加上数值1。这一步骤需要用到一个多比特宽度的全加器链表。考虑到这是最基础级别的算术逻辑单元(ALU),这里会涉及到串联多个单比特全加器实例形成一条完整的路径来进行累加工作。 具体来说,就是把之前提到过的经过非门变换后的各作为被加数A传给对应的FA(full adder, 即全加器)组件;而另一个加数B则全部设置为零——除了最低有效置设为一之外,其余皆保持不变。这样做是为了模拟“+1”的效果[^2]。 ```plaintext Cin=1 | V +--+ +--+ ... +--+ |FA|--->FA|------>...---->|FA| +--+ +--+ +--+ A0 Ainv Ainv31 B0=0 Binvi=0 Binvi=0 ``` 其中Cin代表来自低到高传递过来可能存在的进信息,对于整个链条而言初始状态应当置为高电平也就是逻辑真(True)/'1'[^4]。 通过这种方式组合起来之后便构成了能够正确处理任意长度(此处特指32bit)带符号整型变量之间相互转化所需的硬件设施架构模型[^3]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值