CHA 发表于 2010-6-27 23:35:07

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

ATA 发表于 2010-6-28 00:48:03

谢谢楼主!!呵呵

ATA 发表于 2010-6-28 02:45:35

楼主应该把LA的原理讲讲清楚呀,恭喜楼主做出来,呵呵。<br>
pass位=a^b;意思是会不会传递一个进位,如果a与b异或等于1,那么ab=10或者10,这时,由下向上的进位将会被传递。如果为0,也就是ab=00或者11,这时,由下向上的进位将会被忽略,产生进位与否只在于generate信号。<br>
generate位=a&amp;b;意思是是否产生一个进位,如果ab=11,那么就一定会产生一个进位。<br>
有了这两个信号,就有了LA的核心想法。

ups 发表于 2010-6-28 02:50:58

module claslice(p,p,p,p,g,g,g,g,Co,Cp,Cp,Cp,pp,gg);&nbsp;&nbsp;//4位超前进位加法器模块<br>
<br>
input p, g;<br>
input Co;<br>
output Cp;<br>
output pp,gg;<br>
assign Cp=g|p&amp;Co;<br>
assign Cp=g|p&amp;Cp;<br>
assign Cp=g|p&amp;Cp;<br>
assign pp=p&amp;p&amp;p&amp;p;<br>
assign gg=g|(p&amp;(g|p&amp;(g|p&amp;g)));<br>
endmodule<br>
<br>
请问楼主一下,你的这个仿真结果是正确的吗? 我仿真了一下怎么有的结果是不对的亚?<br>
请问一下哪里体现了超前进位呀? 这样不还是第二位用到第一位的进位,第三位用到第二位的进位,仍然会产生延时,不是很懂,提的问题如果不对,请原谅。<br>
也期望其他人给与回答 ,谢谢!!!

usb 发表于 2010-6-28 04:03:26

先看一下&nbsp;&nbsp;!

inter 发表于 2010-6-28 05:37:44

看看,不错!!!

interige 发表于 2010-6-28 05:50:28

原帖由 anni 于 2006-6-27 11:19 发表<br>
module claslice(p,p,p,p,g,g,g,g,Co,Cp,Cp,Cp,pp,gg);&nbsp;&nbsp;//4位超前进位加法器模块<br>
<br>
input&nbsp;&nbsp;p, g;<br>
input Co;<br>
output&nbsp;&nbsp;Cp;<br>
output pp,gg;<br>
assign Cp=g|p&amp;Co;<br>
assign Cp=g|p&amp;Cp;<br>
assign Cp=g|p&amp; ... 不好意思 ,楼主的程序仿真结果是正确的 ,是我理解错了。

ATA 发表于 2010-6-28 07:45:42

向各位大侠学会了不少东西啊!多谢.如能进一不注释就更好了.

usb 发表于 2010-6-28 09:13:06

可不可以用VHDL 写吖!!多谢楼主~

longtim 发表于 2010-6-28 09:40:51

正在学习,感觉是个好的例子!!!
页: [1] 2
查看完整版本: 16位超前进位加法器