加法器(行波与超前、全加与半加)
行波进位加法器
行波进位加法器,又称为逐级进位加法器,从左至右,每一级产生的进位传递到高一级的加法单元后该单元才能输出本级的运算结果,随着加数位宽的增加,最终得到的运算结果的延迟会不断增大,从而限制了系统的最高运算速度。
以32位二进制加法为例,就是将一位的二进制加法重复32次(逐位进位加法器),由于每一位的CIN都是由上一位的COUT提供的,所以第二位的计算必须在第一位之后,,以此类推,最后的32位必须在前31位全部计算出结果后才能开始计算,这样的计算使的实现32位的二进制加法所需时间是实现1位二进制加法的时间的32倍。
Example
以一个4位行波进位加法器代码进行说明,
FA u0( .a(a[0]),.b(b[0]),.cin(c_in),.sout(sum[0]),.cout(c_tmp[0]) );
FA u1( .a(a[1]),.b(b[1]),.cin(c_tmp[0]),.sout(sum[1]),.cout(c_tmp[1]) );
FA u2( .a(a[2]),.b(b[2]),.cin(c_tmp[1]),.sout(sum[2]),.cout(c_tmp[2]) );
FA u3( .a(a[3]),.b(b[3]),.cin(c_tmp[2]),.sout(sum[3]),.cout(cout) );
最终u3.模块的运算要在u0~u2全部运行完毕之后进行。
超前进位加法器
根据行波进位加法器可以知道,加法器中的每一级的和值sum和进位输出cout都取决于前一级的进位输入和本级的输入。
全加器
定义:进行加数、被加数和低位来的进位信号相加,并根据求和结果给出该位的进行信号
逻辑表达式
S1=A^B^C ……加数与被加数异或
C1=AB|AC|BC…… 加数与被加数相与
半加器
定义:加法中并没有考虑来自低位的定义,就是只求本位的和下一位的进位,暂不考虑低位送来的进位数。
逻辑表达式:
S=A^B ……加数与被加数异或
C=AB…… 加数与被加数相与