第1关:4位先行进位加法器设计-实验指导

首先祝贺自己成功通关!!

任务描述
        本关任务:实现4位先行进位加法器的设计。

实验目的
1、掌握先行进位部件CLU的设计方法
2、掌握先行进位加法器的设计方法
3、掌握进位生成函数和进位传递函数的设计方法
4、传播延迟时间对比检测

实验原理
          几乎所有算术运算都要用到ALU或加法器,而ALU的核心还是加法器,因此要提高计算机的运算速度,关键在于提升加法器的执行速度。为了提高加法器的速度,必须尽量避免进位之间的依赖关系和传递关系,先行进位(也称超前进位)部件(Carry Lookahead Unit,CLU)就能实现这一功能。
        把进位传递函数 Pi = Xi + Yi和进位生成函数Gi = XiYi 列入到4位二进制数加法器进位C1-C4的逻辑表达式中,可以得到以下4个先行进位Ci的逻辑表达式,从公式(4-1)中的表达式可以看出,Ci仅与Xi、Yi和C0有关,相互间的进位没有依赖关系。只要X1-X4、Y1-Y4和C0同时到达,就可几乎同时形成C1-C4,并同时生成各个数位的和。
C1 = G0+ P0C0
C2 = G1 + P1G0 + P1P0C0
C3 = G2 + P2G1 + P2P1G0 + P2P1P0C0
C4 = G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0C0
4位先行进位部件CLU设计原理图如下图所示。


        更多位数的加法器可通过分组的方式来实现,采用组内和组间都并行的进位方式。为了实现组间并行,需要在先行进位部件中输出组间进位生成函数Gg和组间进位传递函数Pg。
Pg= P3P2P1P0
Gg= G3+P3G2+P3P2G1+P3P2P1G0
        将式(4-1)中进位C4的逻辑表达式改写成为C4=Gg+PgC0,CLU部件中增加两个输出端口Pg和Gg。

编程要求
        在Logisim中打开/data/workspace/myshixun/lab4.1.circ文件,设计并实现4位先行进位加法器。请不要更改电路封装、修改引脚、移动引脚、添加引脚,否则评测将出错。
1)设计4位先行进位部件CLU。根据先行进位部件的原理图,在Logisim中设计4位先行进位部件子电路CLU。布局图如下所示。

2)设计支持进位生成函数和进位传递函数的全加器。在Logisim中添加全加器子电路FA,电路引脚图如下所示。


3)4位快速加法器CLA实验。在Logisim主电路的工作区中按下图所示的布局,定义输入输出引脚和组件布局,其中包含输入输出引脚、隧道、1个4位先行进位部件子电路、4个全加器子电路、LED数码管、逻辑门电路等组件。为了能够实现组间并行运算,增加了组间进位产生函数Gg和组间进位传递函数Pg的输出。修改属性,参照课件和教材上的电路原理图,连接组件,实现电路。通过设置不同的X、Y和Cin的输入值,观察结果F、进位Cout、Pg、Gg等输出值,以验证电路的正确性,记录测试数据。


测试说明
        平台会对你编写的代码进行测试:
X、Y、Cin表示输入的数据,分别表示被加数、加数和低位进位;Z、Cout、Gg、Pg表示输出数据,分别表示和、进位、组间进位生成信号和组间进位传递信号。
测试数据:

Cnt    X     Y     Cin   Z     Cout  Gg    Pg
00     f     2     0     1     1     1     1
01     e     3     0     1     1     1     1
02     d     4     0     1     1     1     0
03     c     5     0     1     1     1     0
04     b     6     0     1     1     1     1
05     a     7     0     1     1     1     1
06     9     8     0     1     1     1     0
07     8     9     0     1     1     1     0
开始你的任务吧,祝你成功!

不说废话,直接开干!!

CLA4:

CLU4:

FA:


 

### 设计8串行加法器电路的方法 在Logisim中设计8串行加法器需要基于一全加器(Full Adder, FA)构建。一全加器的核心逻辑可以通过布尔代数描述为: - 和输出:$ S = A \oplus B \oplus C_{in} $ -输出:$ C_{out} = (A \cdot B) + ((A \oplus B) \cdot C_{in}) $[^3] 通过封装一全加器模块,可以将其扩展到多结构。对于8串行加法器的设计过程如下: #### 构建一全加器 首先创建一个基本的一全加器模块。该模块接收两个输入比特 $ A $ 和 $ B $ 以及来自低的进输入 $ C_{in} $,并计算出和输出 $ S $ 及新的进输出 $ C_{out} $。 ```plaintext S = A XOR B XOR Cin; Cout = (A AND B) OR ((A XOR B) AND Cin); ``` 此逻辑已在多个引用中提及][^[^34]。 #### 扩展至8串行加法器 为了实现8串行加法器,需重复调用上述一全加器模块八次,并将每次产生的进传递给下一次操作作为其 $ C_{in} $ 输入。具体步骤包括但不限于以下要点: 1. **数据流管理** 使用移寄存器或其他机制逐提供被加数和加数的数据序列。 2. **时钟信号同步** 需要引入时钟信号来控制每一的处理顺序,确保每一步都按照预定的时间间隔执行。 3. **最终结果存储** 结果应保存在一个能够容纳至少9宽度的空间里(考虑到可能存在的最高有效1的情况),即8求和加上最后的一个进标志。 以下是简化版的伪代码展示如何迭代地连接这些组件: ```python for i from 0 to 7: sum[i], carry_out = full_adder(a[i], b[i], carry_in) carry_in = carry_out result = concatenate(sum_bits, final_carry_out) ``` 其中 `full_adder` 函数代表之前定义好的单比特加法规则;变量名如 `sum`, `carry_in/out` 对应实际硬件连线名称。 --- ### 注意事项 当利用Logisim工具进行仿真测试时,请务必验证每一级之间的衔接是否正确无误,尤其是初始状态下的最低设置通常默认为零除非另有说明[^5]。 此外,虽然理论上可行,但在实践中由于延迟累积效应可能导致性能下降的问题也值得注意——这便是为什么更复杂的算法比如先行进树会用于提升效率的原因之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值