夏宇闻第五章综述Word文档格式.docx
《夏宇闻第五章综述Word文档格式.docx》由会员分享,可在线阅读,更多相关《夏宇闻第五章综述Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
Ci-1
Si
Ci
1
表5.1一位全加器的真值表
表中Xi、Yi表示两个加数,Si表示和,Ci-1表示来自低位的进位、Ci表示向高位的进位。
从真值表很容易写出逻辑表达式如下:
Ci=XiYi+YiCi-1+XiCi-1
Si=XiCi+YiCi+Ci-1Ci+XiYiCi-1
全加器和Si的表达式也可以表示为:
Si=Pi⊕Ci其中Pi=Xi⊕Yi(5.1)
Ci=Pi·
Ci-1+Gi其中Gi=Xi·
Yi(5.2)
5.2式就是进位递推公式。
参考清华大学出版社出版的刘宝琴老师编写的《数字电路与系统》,可以很容易地写出超前进位形成电路的逻辑,在这里不再详细介绍。
在数字信号处理的快速运算电路中常常用到多位数字量的加法运算,这时需要用到并行加法器。
并行加法器比串行加法器快得多,电路结构也不太复杂。
它的原理很容易理解。
现在普遍采用的是Carry-Look-Ahead-Adder加法电路(也称超前进位加法器),只是在几个全加器的基础上增加了一个超前进位形成逻辑,以减少由于逐位进位信号的传递所造成的延迟。
下面的逻辑图表示了一个四位二进制超前进位加法电路。
同样道理,十六位的二进制超前进位加法电路可用四个四位二进制超前进位加法电路再加上超前进位形成逻辑来构成。
同理,依次类推可以设计出32位和64位的加法电路。
在实现算法时(如卷积运算和快速富里叶变换),常常用到加法运算,由于多位并行加法器是由多层组合逻辑构成,加上超前进位形成逻辑虽然减少了延迟,但还是有多级门和布线的延迟,而且随着位数的增加延迟还会积累。
由于加法器的延迟,使加法器的使用频率受到限制,这是指计算的节拍(即时钟)必须要大于运算电路的延迟,只有在输出稳定后才能输入新的数进行下一次运算。
如果设计的是32位或64位的加法器,延迟就会更大。
为了加快计算的节拍,可以在运算电路的组合逻辑层中加入多个寄存器组来暂存中间结果。
也就是采用数字逻辑设计中常用的流水线(pipeline)办法,来提高运算速度,以便更有效地利用该运算电路,我们在本章的后面还要较详细地介绍流水线结构的概念和设计方法。
我们也可以根据情况增加运算器的个数,以提高计算的并行度。
用VerilogHDL来描述加法器是相当容易的,只需要把运算表达式写出就可以了,见下例。
moduleadd_4(X,Y,sum,C);
input[3:
0]X,Y;
output[3:
0]sum;
outputC;
assign{C,Sum}=X+Y;
endmodule
而16位加法器只需要扩大位数即可,见下例:
moduleadd_16(X,Y,sum,C);
input[15:
output[15:
这样设计的加法器在行为仿真时是没有延时的。
借助综合器,可以根据以上VerilogHDL源代码自动将其综合成典型的加法器电路结构。
综合器有许多选项可供设计者选择,以便用来控制自动生成电路的性能。
设计者可以考虑提高电路的速度,也可以考虑节省电路元件以减少电路占用硅片的面积。
综合器会自动根据选项为你挑选一种基本加法器的结构。
有的高性能综合器还可以根据用户对运算速度的要求插入流水线结构,来提高运算器的性能。
可见在综合工具的资源库中存有许多种基本的电路结构,通过编译系统的分析,自动为设计者选择一种电路结构,随着综合器的日益成熟它的功能将越来越强。
然后设计者还需通过布局布线工具生成具有布线延迟的电路,再进行后仿真,便可知道该加法器的实际延时。
根据实际的延迟便可以确定使用该运算逻辑的最高频率。
若需要重复使用该运算器,则需要在控制数据流动的状态机中为其安排必要的时序。
5.2乘法器
乘法电路:
在数字信号处理中经常需要进行乘法运算,乘法器的设计对运算的速度有很大的影响。
本节讨论两个二进制正数的乘法电路和运算时间延迟问题以及怎样用VerilogHDL模型来表示乘法运算。
还将讨论当用综合工具生成乘法运算电路时,怎样来控制运算的时间延迟。
设两个n位二进制正数X和Y:
X:
Xn-1·
·
X1X0
Y:
Yn-1·
Y1Y0
则X和Y的乘积Z有2n位:
并且
式中YiX称为部分积,记为Pi,有
显然,两个一位二进制数相乘遵循如下规则:
0×
0=0;
1=0;
1×
1=1
因此YiXj可用一个与门实现,记Pi.j=YiXj
例:
两个四位二进制数X和Y相乘。
被乘数:
X3X2X1X0
×
)乘数:
Y3Y2Y1Y0
______________________________________________________________
Y0X3Y0X2Y0X1Y0X0
Y1X3Y1X2Y1X1Y1X0
Y2X3Y2X2Y2X1Y2X0
Y3X3Y3X2Y3X1Y3X0
__________________________________________________________
乘积:
Z7Z6Z5Z4Z3Z2Z1Z0
快速乘法器常采用网格形式的迭带阵列结构,图5.3示出两个四位二进制数相乘的结构图,图中每一个乘法单元MU的逻辑图如图5.4所示,即每一个MU由一个与门和一个全加器构成。
事实上,图5.3中第一行的每个MU可用一个与门实现,每一行最右边一个MU中的全加器可用半加器实现。
图5.3实现乘法的最长延时为1个与门的传输延时加上八个全加器的传输延时。
假设每个全加器产生和与产生进位的传输延时相同,并且均相当4个与门的传输延时,则图5.3逐位进位并行乘法器的最长延时为1+8×
4=33个门的传输延时。
为了提高乘法运算速度可以改为图5.5所示的进位节省乘法器(Carry-SaveMultiplier)。
图中用了一个三位的超前进位加法器,九个图5.4所示的乘法单元,七个与门。
显然,图5.5中第二行的乘法单元中全加器可改为半加器。
图5.5执行一次乘法运算的最长延时为1个与门的传输延时加上3个全加器的传输延时,再加上三位超前进位加法器的传输延时。
设三位超前进位加法器的传输延时为5个门的传输延时,则最长延时为1+3×
4+1×
5=18的传输延时。
节省乘法运算时间的关键在于每个乘法单元的进位输出向下斜送到下一行,故有进位节省乘法器之称。
根据加法器类似的道理,八位的二进制超前进位乘法电路可用两个四位二进制超前进位乘法电路再加上超前进位形成逻辑来构成。
同理,依次类推可以设计出16位、32位和64位的乘法电路。
用VerilogHDL来描述乘法器是相当容易的,只需要把运算表达式写出就可以了,见下例。
modulemult_4(X,Y,Product);
output[7:
0]Product;
assignProduct=X*Y;
而8位乘法器只需要扩大位数即可,见下例:
modulemult_8(X,Y,Product);
input[7:
这样设计的乘法器在行为仿真时是没有延时的。
借助综合器,可以根据以上VerilogHDL源代码自动将其综合成典型的乘法器电路结构。
设计者可以考虑提高速度,也可以考虑节省电路元件以减少电路占用硅片的面积。
综合器会自动根据选项和约束文件为你挑选一种基本乘法器的结构。
随着综合工具的发展,其资源库中将存有越来越多种类的基本电路结构,通过编译系统的分析,自动为设计者选择一种更符合设计者要求的电路结构。
然后设计者通过布局布线工具生成具有布线延迟的电路,再进行后仿真,便可精确地知道该乘法器的实际延时。
若需要重复使用该运算器,便可以根据此数据在控制数据流动的状态机中为其安排必要的时序。
所以借助于硬件描述语言和综合工具大大加快了计算逻辑电路设计的过程。
5.3比较器
数值大小比较逻辑在计算逻辑中是常用的一种逻辑电路,一位二进制数的比较是它的基础。
下面列出了一位二进制数比较电路的真值表:
X
Y
(X>
Y)
=Y)
(X=Y)
(X<
(X<
(X!
从真值表很容易写出一位二进制数比较电路的布尔表达式如下:
Y)=X·
(~Y)
Y)=(~X)·
(X=Y)=(~X)·
(~Y)+X·
也很容易画出逻辑图。
位数较多的二进制数比较电路比较复杂,以前我们常用7485型四位数字比较器来构成位数较多的二进制数比较电路,如8位、16位、24位、32位的比较器。
同学们可以参考清华大学出版社刘宝琴老师编写的“数字电路与系统”中,有关多位并行比较器的设计的章节,在这里不再详细介绍。
用VerilogHDL来设计比较电路是很容易的。
下面就是一个位数可以由用户定义的比较电路模块:
modulecompare_n(X,Y,XGY,XSY,XEY);
input[width-1:
0]X,Y;
outputXGY,