Labview设计计算机--加法器(3)
2017-01-08 20:13
246 查看
在上一篇中讲了用组内串行的方式构造了8位加法器,并用8位加法器以组间串行的方式构造了32位加法器;但是,效率并不是最高;本篇通过将8位加法器设计为组内并行进位的方式来提高运算效率;
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;
实验所得前面板如下:
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;
实验所得前面板如下:
相关文章推荐
- 使用 Libki 来管理公共用户访问计算机
- 微型计算机的始祖:Altair 8800
- 通过手机、电脑远程开关机,Windows和linux机手机,电脑相互控制
- php实现用手机关闭计算机(电脑)的方法
- 用IE重起计算机或者关机的示例代码
- 一张图告诉你计算机编程语言的发展历史
- 计算机科学中32个常用的基础算法
- 不能在本地计算机启动 apache2.2解决方法
- python获取本地计算机名字的方法
- python获取当前计算机cpu数量的方法
- Win7系统计算机属性打不开怎么办?Win7系统计算机属性打不开的解决方法
- Xp系统下查看计算机所有程序的方法
- 人机大战赛前思考 | 计算机会有超人的智能吗?
- VMware Authorization Service无法启动,1086错误
- 第一台冯·诺伊曼结构量子计算机售价1000万美元
- 首台“混合”超级计算机突破千万亿次计算大关
- 代理服务器
- 五种让你一键关机的技巧经验技巧
- 回顾UNIX LINUX BSD架构
- 2008年最新最全计算机相关精品资源学习“宝典”系列典藏版电子书