资源描述:
《第11讲 Verilog数字电路设计I.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、在系统可编程技术第11讲Verilog数字电路设计I第9章Verilog数字电路设计9.1加法器9.2乘法器加法、乘法作为基本的运算,大量应用在数字信号处理和数字通信的各种算法中。由于加法器、乘法器的使用频繁,所以其速度往往影响整个系统的运行速度。如果可实现快速加法器和快速乘法器的设计,则可以提高整个系统的速度。因此,对加法运算的实现进行一些研究是非常必要的,实现加法运算的方法有:级联加法器并行加法器超前进位加法器流水线加法器9.1加法器返回9.1.1级联加法器级联加法器是由1位全加器构成的,本级的进位输出作为下一级的进位输入,图9.1是8位级联加法器的
2、结构示意图。级联加法器的结构简单,但N位级联加法运算的延时是1位全加器的N倍。因此,在需要高性能的设计中,这种加法结构不宜采用。例9.18位级联加法器(RTL综合原理图)moduleadd_jl(sum,cout,a,b,cin);output[7:0]sum;outputcout;input[7:0]a,b;inputcin;full_add1f0(a[0],b[0],cin,sum[0],cin1);full_add1f1(a[1],b[1],cin1,sum[1],cin2);full_add1f2(a[2],b[2],cin2,sum[2],ci
3、n3);full_add1f3(a[3],b[3],cin3,sum[3],cin4);full_add1f4(a[4],b[4],cin4,sum[4],cin5);full_add1f5(a[5],b[5],cin5,sum[5],cin6);full_add1f6(a[6],b[6],cin6,sum[6],cin7);full_add1f7(a[7],b[7],cin7,sum[7],cout);endmodulemodulefull_add1(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;wires
4、1,m1,m2,m3;and(m1,a,b),(m2,b,cin),(m3,a,cin);xor(s1,a,b),(sum,s1,cin);or(cout,m1,m2,m3);endmodule9.1.2并行加法器采用Verilog语言的加法运算符直接描述。实现起来容易,其运算速度快,但是耗用的资源多。例9.28位并行加法器moduleadd_bx(cout,sum,a,b,cin);output[7:0]sum;outputcout;input[7:0]a,b;inputcin;assign{cout,sum}=a+b+cin;endmodule9.1
5、.3超前进位加法器级联加法器的延时主要是由进位的延时造成的,因此要加快加法器的运算速度,就必须减少进位延迟,超前进位链能有效减少进位的延迟。在级联运算时,高位的进位输入其实是低位的进位输出,只有完低位运算后,才知道高位有没有进位。而超前进位链是研究各个进位之间的关系。下面以4位超前进位链来介绍超前进位的概念。在书P197例7.14中,我们可以知道:从上面的式子可以看出,如果a和b都为1,则进位输出为1;如果a和b有一个为1,则进位输出等于cin。令G=ab,P=a+b,则有:G(pass):进位传输信号,表示上一级的信号是否要传递到下一级,eg.如果a[
6、0],b[0]分别为0,1或1,0,那么p[0]=1,就是表示上一级的进位需要传递到下一级,都为0肯定不会进位,全为1呢?那再看看g的含义就明白了。G(generate):进位产生信号,如果为1代表一定会有进位信号到下一级,固当a[0],b[0]全为1时,这个信号也为1,肯定会进位的,那么P就不重要了,所以G的优先级大于P。由此可以用G和P来写4位超前进位链。假设:从上面的超前进位链可以看出,各个进位之间是彼此独立产生的,因此可以先将每位的进位值计算出来,不需要按级联的方式,先计算低位相加的结果得出向高位进位的进位值。因此超前进位可将进位级联传播给去掉,
7、减小了进位产生的延迟时间。用样可推导下面的式子:例9.38位超前进位加法器moduleadd_ahead(sum,cout,a,b,cin);output[7:0]sum;outputcout;input[7:0]a,b;inputcin;wire[7:0]G,P;wire[7:0]C,sum;assignG[0]=a[0]&b[0];//产生第0本位值和进位值assignP[0]=a[0]
8、b[0];assignC[0]=cin;assignsum[0]=G[0]^P[0]^C[0];assignG[1]=a[1]&b[1];//产生第1本位值和进位值
9、assignP[1]=a[1]
10、b[1];assignC[1]=G[0]
11、(P[