您的位置:首页 > 理论基础

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

2017-01-08 20:13 246 查看
在上一篇中讲了用组内串行的方式构造了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位的加法器连线太多,导致根本不能看清楚,有兴趣的可以尝试画画,保证您画到想吐^-^;



另外需要说明,为了使连线尽可能少,故使用了很多的局部变量,但是Labview是数据驱动的语言(实际的计算机运行也类似于数据驱动,即数据流有一定的顺序),而使用了全局变量后,破坏了原来的数据流,所以可能导致运算错误,为了解决数据流混乱的问题,使用了顺序结构;

第一帧:将整数化为布尔数组;

第二帧:计算本地进位函数G和传递进位函数P;

第三帧:将数据送入全加器中进行计算;

该程序中,由于空间有限,没有画出该4位加法器的进位C4,oCarry直接输出为0;

实验所得前面板如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  计算机