64位乘法器设计实验是我在科大的第一个课程设计,verilog程序的熟练掌握对于微电子专业的学生来讲是非常必要的,对于此次设计我也花费了很长时间。
本设计分为3个部分,即控制和(1)状态选择部分,(2)乘法器部分,(3)加法器部分。 以下我将按此顺序进行说明。需要指出的是,在实际设计中的顺序恰好是颠倒的,这与设计思路有关,在刚开始的时候由于对整体没有一个很好的把握就先选择最简单的一部分几加法器开始入手,然后就是乘法器,最后作乐一个状态控制电路将两部分联系起来。
状态选择部分设计:
本电路状态选择部分设计比较简单,只有一个控制信号sel来控制电路的工作状态,我选定的状态是:sel为00的时候做加法,sel为01时做减法,sel为10时做乘法。从节省功耗的角度出发,当电路处于加法状态的时候,乘法器最好是能够不工作,反之也一样在乘法器工作时要求加法器也处于不工作状态。我在设计中在两个电路块的输入上都加了一个二选一开关,使不处于工作状态的电路块的输入始终为0,可是使电路减少由动态翻转产生的功耗。
加法器的设计:
为了能更好地掌握加法器的设计过程,本部分采用门级描述语言,本加法器采用流水线的设计方案。实际上该部分是不需要流水,因为乘法器是本电路的关键路径,即使乘法器采用流水线的设计方案延迟也肯定比加法器要大。为了能够掌握流水线设计,加法器也采用了流水线来实现。加法器的整体结构见附图(1),有超前进位产生电路,和超前进位电路来实现。
超前进位产生电路是对两个64位输入按位进行异或和与从而产生超前进位电路的输入信号P,Q。 教材上在此处也产生了部分和结果S,但我认为在此处产生结果不妥,因为要产生部分和结果必须有上一级的进位信号,对于本加法器进位信号将在下一步才产生。所以我将作后结果的产生放在了最后一拍来完成将P与产生的进位信号按位异或即可得到最后结果。但要注意P与进位信号CP产生的时间是不一致的,所以P信号要送到寄存器中等待一拍。以与CP信号保持时序上的一致。
毋庸置疑64位加法器的设计肯定要采用超前进位电路来实现。考虑到一般的与门或或门的扇入不大于4的原则,我对超前进位电路采取每4组一个超前进位块,同时分层超前进位来实现。这样做的好处是能降低每个超前进位块的设计复杂程度,实现电路在性能和复杂性之间的一个优化。电路超前进位部分的总体结构见附图(2)。超前进位按设计要求是产生除最高进位之外的所有进位信号。同时最高位的进位信号是由一个额外的组合电路来实现。
CP[63]=G[63]|(P[63] & G[62])|(P[63] & P[62] & G[61])|(P[63]&P[62]&P[61]&G[60])|(P[63]&P[62]&P[61]&P[60]&G[59]);
在所有进位信号产生之后加法器的输出就是:
sum[64:0]《={CP[63],(P_sec[63:0]^{CP[62:0],sel[0]})};
sel[0]下面将对此做出解释。我设定sel信号为01时做减法,sel为00时做加法。减法电路设计比较简单只要在sel为0是将输入信号Y取反再加1即可。为了减法不增加额外的开销,我将sel[0]作为加法器的最低位进位信号,这样就可以解决加1的问题。需要注意的是减法器的最高位不是进位信号,而是借位信号。为1表明输入X小于Y。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !