Labview设计计算机--加法器(3)

在上一篇中讲了用组内串行的方式构造了8位加法器,并用8位加法器以组间串行的方式构造了32位加法器;但是,效率并不是最高;本篇通过将8位加法器设计为组内并行进位的方式来提高运算效率;

8位并行进位加法器

首先复习一下全加器的3个输出和两个输入之间的关系;
3个输出:iA、iB分别为1位数据位,iCarry为1位的低位进位;
2个输出:oS为1位的结果值,oCarry为1位的本级进位;

关系运算为:
oS=iA ⊕ iB ⊕ iCarry
oCarry=iA·iB + (iA⊕iB)·iCarry
可见,每一个全加器的运算中,iA、iB都是已提供的,只有iCarry需要低位传递过来,这也是效率低的原因,只要将iCarry的值通过组合逻辑电路直接计算得到,就可省去等待进位的时间;

设第1位到第2位的进位为C1,输入分别为A1、B1及C0,设G1=A1·B1,称为本地进位函数,P1=A1⊕B1称为传递进位函数,则有:
C1=A1·B1+(A1⊕B1)·C0=G1+P1·C0,
同理有:
C2=A2·B2+(A2⊕B2)·C1=G2+P2·C1=G2+P2·(G1+P1·C0)
=G2+P2·G1+P2·P1·C0;即:
C2=G2+P2·G1+P2·P1·C0;
C3=G3+P3·G2+P3·P2·G1+P3·P2·P1·C0;
C4=G4+P4·G3+P4·P3·G2+P4·P3·P2·G1+P4·P3·P2·P1·C0;
C5=G5+P5·G4+P5·P4·G3+P5·P4·P3·G2+P5·P4·P3·P2·G1+P5·P4·P3·P2·P1·C0;
C6=G6+P6·G5+P6·P5·G4+P6·P5·P4·G3+P6·P5·P4·P3·G2+P6·P5·P4·P3·P2·G1+P6·P5·P4·P3·P2·P1·C0;
C7=G7+P7·G6+P7·P6·G5+P7·P6·P5·G4+P7·P6·P5·P4·G3+P7·P6·P5·P4·P3·G2+P7·P6·P5·P4·P3·P2·G1+P7·P6·P5·P4·P3·P2·P1·C0;
C8=G8+P8·G7+P8·P7·G6+P8·P7·P6·G5+P8·P7·P6·P5·G4+P8·P7·P6·P5·P4·G3+P8·P7·P6·P5·P4·P3·G2+P8·P7·P6·P5·P4·P3·P2·G1+P8·P7·P6·P5·P4·P3·P2·P1·C0;

可见位数越多,进位的表达式越复杂,将串行进位变为并行进位是典型的用增加成本的方式加快运行速度,即用money换取time;

如下为4位并行加法器的程序框图,之所以没有画8位并行加法器主要是8位的加法器连线太多,导致根本不能看清楚,有兴趣的可以尝试画画,保证您画到想吐^-^;
4位并行加法器程序框图
另外需要说明,为了使连线尽可能少,故使用了很多的局部变量,但是Labview是数据驱动的语言(实际的计算机运行也类似于数据驱动,即数据流有一定的顺序),而使用了全局变量后,破坏了原来的数据流,所以可能导致运算错误,为了解决数据流混乱的问题,使用了顺序结构;
第一帧:将整数化为布尔数组;
第二帧:计算本地进位函数G和传递进位函数P;
第三帧:将数据送入全加器中进行计算;
该程序中,由于空间有限,没有画出该4位加法器的进位C4,oCarry直接输出为0;
实验所得前面板如下:
4位并行加法器前面板

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值