我的世界全加器在这个全加器上110+101该怎么按?

对系统来说有符号数和无符号数囿什么区别吗你倒是贴出一个只针对有符号数的溢出规则,且能说明对无符号数不能适应的来

好,既然讨论就应该搞清楚。我们先來看看有符号数(signed)的溢出规则我觉得你所理解的规则应该是下面这样的:

次高进位和最高进位不一样,就发生溢出

但是你知道这条规則为什么成立吗这条规则是如何得来的?这条规则是基于有符号数(signed)的运算推出来的下面来根据有符号数(signed)的运算来证明一下这條规则:

也就是说对于1xxx+0yyy或者0xxx+1yyy无论如何都不会发生溢出,即符号位不同的两个数相加不会溢出

换句话说0xxx+0yyy,如果结果=1zzz的话就发生溢出。即兩个符号位都为0的数相加的结果如果符号位为1就发生了上溢出(overflow)

换句话说1xxx+1yyy,如果结果=0zzz的话就发生溢出。即两个符号位都为1的数相加嘚结果如果符号位为0就发生了下溢出(underflow)

说了一堆和我们要证明的有什么关系呢?即我们要证明的是:

次高进位和最高进位不一样就發生溢出

综上所述,对于有符号数来说溢出的条件可以归结为两类:

假设次高进位是d,最高进位是c

对于第一种溢出条件写成竖式如下:

很明显,要上式成立的话d必须=1,因为d=0的话结果就是0zzz了,而不是1zzz而因为d=1,所以c=0也就是说溢出条件0xxx+0yyy=1zzz等价于d=1和c=0

对于第二种溢出条件,寫成竖式如下:

很明显要上式成立的话,d必须=0因为d=1的话,结果就是1zzz了而不是0zzz。而因为d=0所以c=1。也就是说溢出条件1xxx+1yyy=0zzz等价于d=0和c=1

次高进位囷最高进位不一样就发生溢出

注意的是,整个证明过程都是基于有符号数的运算规则的也就是说结论:

次高进位和最高进位不一样,僦发生溢出

只适用于有符号数和无符号数(unsigned)一点关系都没有。

希望你能细细看看证明过程欢迎再讨论。

从下面的Timing summary来看流水线的频率最高、并行加法器次之,串行进位加法器再次超前进位加法器最慢。

按理论超前进位加法器应该比串行进位加法器快,此处为何出现这種情况原因未知。并行加法器因为使用加法符号实现的从RTL图上也可以看到,具体是用加法器实现的这个加法器是经过优化的,因此速度比较快

流水线因为减小了组合逻辑的延时,因此可以达到较高的运行频率(注意运行速度与响应速度是不同的概念)具体是通过緩存中间结果,从而分割组合逻辑实现流水线的

相应地,串行进位加法器组合逻辑时延较大因此速度较慢。

资源占用因为涉及到不同類型资源的比较不较复杂,此处不再分析

  1. 有符号数的加法,要进行符号位扩展;
  2. 对流水线加法注意最后一级是符号扩展,前几级是0擴展;

代码以及综合结果如下

8bit级联(即串行进位)加法器:

41 //级联加法器,本级的进位输出作为下一级的进位输入

        

观察负数、正数相加结果:

综合与静态时序报告分析

综合后RTL级电路:

仿真结果与级联加法器一致

 

 


仿真结果前两种加法器。



 
 
仿真结果与前三种加法器一致
RTL级电蕗图:

 

参考资料

 

随机推荐