16位超前进位加法器
module cla16 (a,b,s);//top module 含有四个4 位超前进位加法器子模块input a, b;
output s;
wire pp4,pp3,pp2,pp1;
wire gg4,gg3,gg2,gg1;
wire Cp;
wire p,g;
claslice i1 (p,p,p,p,g,g,g,g,1'b0,Cp,Cp,Cp,pp1,gg1);
claslice i2 (p,p,p,p,g,g,g,g,Cp,Cp,Cp,Cp,pp2,gg2);
claslice i3 (p,p,p,p,g,g,g,g,Cp,Cp,Cp,Cp,pp3,gg3);
claslice i4 (p,p,p,p,g,g,g,g,Cp,Cp,Cp,Cp,pp4,gg4);
claslice i5 (pp4,pp3,pp2,pp1,gg4,gg3,gg2,gg1,1'b0,Cp,Cp,Cp,pp5,gg5);
pg i0(a,b,p,g);
assign s=p^1'b0;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
assign s=p^Cp;
endmodule
module claslice(p,p,p,p,g,g,g,g,Co,Cp,Cp,Cp,pp,gg);//4位超前进位加法器模块
input p, g;
input Co;
output Cp;
output pp,gg;
assign Cp=g|p&Co;
assign Cp=g|p&Cp;
assign Cp=g|p&Cp;
assign pp=p&p&p&p;
assign gg=g|(p&(g|p&(g|p&g)));
endmodule
module pg(a,b,p,g);//进位产生信号、进位传递信号 产生模块
input a, b;
output p,g;
assign p=a^b;
assign g=a&b;
endmodule 谢谢楼主!!呵呵 楼主应该把LA的原理讲讲清楚呀,恭喜楼主做出来,呵呵。<br>
pass位=a^b;意思是会不会传递一个进位,如果a与b异或等于1,那么ab=10或者10,这时,由下向上的进位将会被传递。如果为0,也就是ab=00或者11,这时,由下向上的进位将会被忽略,产生进位与否只在于generate信号。<br>
generate位=a&b;意思是是否产生一个进位,如果ab=11,那么就一定会产生一个进位。<br>
有了这两个信号,就有了LA的核心想法。 module claslice(p,p,p,p,g,g,g,g,Co,Cp,Cp,Cp,pp,gg); //4位超前进位加法器模块<br>
<br>
input p, g;<br>
input Co;<br>
output Cp;<br>
output pp,gg;<br>
assign Cp=g|p&Co;<br>
assign Cp=g|p&Cp;<br>
assign Cp=g|p&Cp;<br>
assign pp=p&p&p&p;<br>
assign gg=g|(p&(g|p&(g|p&g)));<br>
endmodule<br>
<br>
请问楼主一下,你的这个仿真结果是正确的吗? 我仿真了一下怎么有的结果是不对的亚?<br>
请问一下哪里体现了超前进位呀? 这样不还是第二位用到第一位的进位,第三位用到第二位的进位,仍然会产生延时,不是很懂,提的问题如果不对,请原谅。<br>
也期望其他人给与回答 ,谢谢!!! 先看一下 ! 看看,不错!!! 原帖由 anni 于 2006-6-27 11:19 发表<br>
module claslice(p,p,p,p,g,g,g,g,Co,Cp,Cp,Cp,pp,gg); //4位超前进位加法器模块<br>
<br>
input p, g;<br>
input Co;<br>
output Cp;<br>
output pp,gg;<br>
assign Cp=g|p&Co;<br>
assign Cp=g|p&Cp;<br>
assign Cp=g|p& ... 不好意思 ,楼主的程序仿真结果是正确的 ,是我理解错了。 向各位大侠学会了不少东西啊!多谢.如能进一不注释就更好了. 可不可以用VHDL 写吖!!多谢楼主~ 正在学习,感觉是个好的例子!!!
页:
[1]
2