资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
.Verilog课程实验报告实验1十六位超前进位加法器1.1系统设计要求 用超前进位加法器实现一个有符号位的16位加法器,并且考虑溢出的情况2.1详细设计 根据超前进位加法器的原理Co = G | ( P & Ci ) S = P Ci设计出4位加法器的子模块,然后通过4个4位加法器的相连来得到十六位的加法器。原理如下图所示。溢出用flag=0表示。 3.1程序/-16位超前进位加法器-module cla16(a,b,s,flag); /含有a,b,输出s,进位flag的模块input 15:0 a,b;/输入a,boutput 16:0 s; /输出 soutput reg flag; /进位wire pp4,pp3,pp2,pp1;wire gg4,gg3,gg2,gg1;wire 15:0 Cp;wire 15:0 p,g;pg i0 (a15:0,b15:0,p15:0,g15:0); add i1 (p3,p2,p1,p0,g3,g2,g1,g0,pp1,gg1);add i2 (p7,p6,p5,p4,g7,g6,g5,g4,pp2,gg2);add i3 (p11,p10,p9,p8,g11,g10,g9,g8,pp3,gg3);add i4 (p15,p14,p13,p12,g15,g14,g13,g12,pp4,gg4);add i5 (pp4,pp3,pp2,pp1,gg4,gg3,gg2,gg1,pp5,gg5);/调用四位加法器模块add4 l0 (p3,p2,p1,p0,g3,g2,g1,g0,1b0,Cp3,Cp2,Cp1,Cp0);add4 l1 (p7,p6,p5,p4,g7,g6,g5,g4,Cp3,Cp7,Cp6,Cp5,Cp4);add4 l2 (p11,p10,p9,p8,g11,g10,g9,g8,Cp7,Cp11,Cp10,Cp9,Cp8);add4 l3 (p15,p14,p13,p12,g15,g14,g13,g12,Cp11,Cp15,Cp14,Cp13,Cp12);assign s0=p01b0; /保留位assign s1=p1Cp0;assign s2=p2Cp1;assign s3=p3Cp2;assign s4=p4Cp3;assign s5=p5Cp4;assign s6=p6Cp5;assign s7=p7Cp6;assign s8=p8Cp7;assign s9=p9Cp8;assign s10=p10Cp9;assign s11=p11Cp10;assign s12=p12Cp11;assign s13=p13Cp12;assign s14=p14Cp13;assign s15=p15Cp14;assign s16=pp5|gg5;/溢出判断模块 always(a,b,s) beginif (a15=1&b15=1&s15=0)|(a15=0&b15=0&s15=1) flag=1b1; else flag=1b0; endendmodule/4位加法器模块module add4(p3,p2,p1,p0,g3,g2,g1,g0,Co,Cp3,Cp2,Cp1,Cp0); input 3:0p,g;input Co;output 3:0 Cp;assign Cp0=g0|p0&Co;assign Cp1=g1|p1&Cp0;assign Cp2=g2|p2&Cp1;assign Cp3=g3|p3&Cp2;endmodule/模块间的进位module add(p3,p2,p1,p0,g3,g2,g1,g0,pp,gg); input 3:0p,g;output pp,gg;assign pp=p3&p2&p1&p0;assign gg=g3|(p3&(g2|p2&(g1|p1&g0);endmodule/进位信号的产生module pg(a,b,p,g); input 15:0 a,b;output 15:0 p,g;assign p=ab;assign g=a&b; endmodule4.1测试程序通过产生一个随机输入a和b,来验证c=a+b。/16位加法器的测试文件timescale 1ns/1nsinclude./sixteenadder.vmodule sixteenaddertest; wire 15:0 s; reg 15:0a,b; wire flag; parameter times=5; /随机产生一个数 ,总共产生6次 initial begin a=$random%65536; b=$random%65536; repeat(times) begin #100 a=$random%65536; b=$random%65536; end #100 $stop; end cla16 cal161(a,b,s,flag); endmodule5.1仿真波形用mudelsim10.0仿真得到的波形如下所示: 如图a=13604,b=24193 s=-27739.s为负数,产生溢出,溢出标位sto=1.当a=-10743,b=22115.s=11372没有溢出,sto=0.通过这个实验验证了s=a+b,实现了带符号位的加法器。实验二 十六位加减法器1.1系统设计要求 将加法器和减法器结合到一起,实现带符号位的16位加减法运算,并考虑溢出。2.1详细设计 在16位加法器的基础上,加上一条判断语句,如果出现减的操作,被减数取反加一,这样就实现了减的运算,用add_sub来表示加减运算符,当add_sub=0时候实现的是减运算,add_sub=1的时候实现的是加运算。3.1程序/-16位加减法器-module cla16(a,b,s); /定义模块包括a,b,sinput 15:0 a,b;/输入a,boutput 16:0 s; /输出swire pp4,pp3,pp2,pp1;wire gg4,gg3,gg2,gg1;wire 15:0 Cp;wire 15:0 p,g;pg i0 (a15:0,b15:0,p15:0,g15:0);add i1 (p3,p2,p1,p0,g3,g2,g1,g0,pp1,gg1);add i2 (p7,p6,p5,p4,g7,g6,g5,g4,pp2,gg2);add i3 (p11,p10,p9,p8,g11,g10,g9,g8,pp3,gg3);add i4 (p15,p14,p13,p12,g15,g14,g13,g12,pp4,gg4);add i5 (pp4,pp3,pp2,pp1,gg4,gg3,gg2,gg1,pp5,gg5);add4 l0 (p3,p2,p1,p0,g3,g2,g1,g0,1b0,Cp3,Cp2,Cp1,Cp0);add4 l1 (p7,p6,p5,p4,g7,g6,g5,g4,Cp3,Cp7,Cp6,Cp5,Cp4);add4 l2 (p11,p10,p9,p8,g11,g10,g9,g8,Cp7,Cp11,Cp10,Cp9,Cp8);add4 l3 (p15,p14,p13,p12,g15,g14,g13,g12,Cp11,Cp15,Cp14,Cp13,Cp12);assign s0=p01b0;assign s1=p1Cp0;assign s2=p2Cp1;assign s3=p3Cp2;assign s4=p4Cp3;assign s5=p5Cp4;assign s6=p6Cp5;assign s7=p7Cp6;assign s8=p8Cp7;assign s9=p9Cp8;assign s10=p10Cp9;assign s11=p11Cp10;assign s12=p12Cp11;assign s13=p13Cp12;assign s14=p14Cp13;assign s15=p15Cp14;assign s16=pp5|gg5;endmodulemodule add4(p3,p2,p1,p0,g3,g2,g1,g0,Co,Cp3,Cp2,Cp1,Cp0); input 3:0p,g;input Co;output 3:0 Cp;assign Cp0=g0|p0&Co;assign Cp1=g1|p1&Cp0;assign Cp2=g2|p2&Cp1;assign Cp3=g3|p3&Cp2;endmodulemodule add(p3,p2,p1,p0,g3,g2,g1,g0,pp,gg); input 3:0p,g;output pp,gg;assign pp=p3&
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号