找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 改进溢出判断电路的设计与仿真研究

[复制链接]
admin 发表于 2013-3-26 03:26:42 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 传统数字芯片电路中,固定字长有符号数的加法或减法运算的溢出判断需要等到加法/减法运算结束之后才能进行。以四位有符号数加法/减法运算溢出判断逻辑为例提出一种改进的设计方式,能够在加法/减法运算结束之前对操作数进行判断,从而决定是否有溢出现象的发生。仿真发现,改进后的电路无论在规模上还是在运算速度上都有很大改善。
关键词: 改进;溢出判断;电路设计;仿真
       溢出现象的判断是固定字长有符号加法运算中必须要进行的操作,传统溢出现象的判断要等到加法运算结果产生以后才能进行,本文电路设计能够在加法运算开始之前通过对操作数的判断而进行溢出预判,从而减少了整个加法/减法运算的时间。
     溢出现象有可能出现在有符号数的加法或减法运算中,在进行固定字长的有符号数加法或减法运算时,如果出现以下四种情况:正数与正数相加得到负数、正数减负数得到负数、负数减正数得到正数、负数加负数得到正数,则认为有溢出现象产生。
1 传统溢出判断电路的设计[1]
     传统溢出判断电路的设计是建立在加法或减法运算已经产生结果的基础上,如果用Overflag表示当前的运算方式,当Overflag取值为“1”时表示的是进行有符号数的加法或减法运算,当Overflag取值为“0”时表示的是进行无符号数的加法或减法运算。用Adder表示当前的运算方式是加法或者减法运算。当Adder取值为“1”时表示进行加法运算,当Adder取值为“0”时表示进行减法运算。用A[3]、B[3]和R[3]分别表示两个操作数和加减法运算结果的最高位即符号位。用Overflow表示溢出结果,如果Overflow取值为“1”则表示产生了溢出;如果Overflow取值为“0”则表示没有产生溢出。如果利用Carry-Lookahead Adder[2]算法来产生R[3],则结合对溢出产生条件的分析,可以得到溢出判断电路图如图1所示。
    2012110704573769095570.gif
   2 具有预判功能的改进溢出判断电路的设计
     具有预判功能的溢出判断电路设计的原理是将Carry-Lookahead Adder[2]的算法与传统溢出逻辑判断逻辑算法相结合。如果将可能产生溢出的四种运算都转换为加法运算,则在有可能产生溢出的四种运算情况下只要数值位向符号位产生进位或者符号位本身相加产生进位就可以判断有溢出产生。因此在电路实现上需要有两部分功能块,一部分是判断当前的运算是否为可能产生溢出的四种运算,将这部分功能块称为初步判断功能块;另一部分是判断数值位的最高位有无向符号位产生进位或符号位本身相加有无进位产生,将这部分功能块称为进位判断功能块。最后需要将两部分功能块结合在一起成为完整的溢出预判电路。
2012110704573772220571.gif
2.2 进位判断功能块[2]
     在对溢出现象进行分析的过程中发现,可能产生溢出的四种情况的运算最后都可以转换为加法运算,具体分析如下:
     正数与正数相加,原本就是加法运算,所以毋须进行转换。
     正数减负数相当于正数与同负数有相同绝对取值的正数进行相加。即只要将被减数转换成与其本身有相同绝对取值的正数即可。
     负数减正数相当于负数与同正数有相同绝对取值的负数进行相加。即只要将被减数转换成与其本身有相同绝对取值的负数即可。
     负数加负数本身就是加法运算,毋须进行转换。
     假设A为加法或减法运算中的第一个操作数(被加数或被减数),B为第二个操作数(加数或减数),由以上分析可以发现,A不需要做任何变换,而B要根据需要进行变换,变换后的数字用D进行表示。对B进行变换的算法为:首先判断条件“A[3]=0且B[3]=1且Adder=0”或“A[3]=1且B[3]=0且Adder=0”是否成立,如果条件成立,则D的值等于对B做减1运算后再取反的数值,否则D=B。
     操作数B做了变换后,A与B的运算就转换成A与D的加法运算,运算结果用R表示。通过前面的分析可以发现在可能产生溢出的四种运算情况下(即:正数与正数相加、负数与负数相加、正数与负数相减、负数与正数相减),只要A与D的加法运算的结果中符号位的符号与操作数符号相反就标志着产生了溢出。用Ci+1表示第i位向第i+1位产生的进位,则C3=1或C4=1且C3 和C4不能同时为1时标志着溢出的产生。
     通过对Carry-Lookahead Adder[2-3]的分析可以发现进位的产生不必等到加法运算结束,即:
    2012110704573773783572.gif
     完整的电路图如图3所示。
    2012110704573775345573.gif
       通过比较图3与图1的电路结构发现,改进的溢出判断逻辑电路图在结构上要精简许多。
2.4 逻辑验证
     电路的功能验证利用TSPICE实现,仿真得到的波形如图4所示。在仿真波形图中,从上至下信号名依次为Overflag,Adder,A[3],A[2],A[1],A[0],B[3],B[2],B[1],B[0]和Overflow。通过分析仿真波形图中输入的A、B、Adder、Overflag共17组验证数据与输出信号Overflow的关系可以证明该电路能够正确判断溢出的产生情况。
    2012110704573776908574.gif
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-28 05:03 , Processed in 0.058741 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表