您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > verilog组合逻辑实验报告
组合逻辑实验报告无02季涛2010012107一多路选择器实验目的掌握组合逻辑基本设计方法;掌握多路选择器的基本原理。设计方案如图为二选一多路选择器的基本结构,根据真值表推出逻辑表达式为y=~s&a|s&b。卡诺图如下图所示:s/AB00011110011111冒险分析:根据两级网络的冒险检测和消除理论我们得知,如果初始输入值和最终输入值能够被同一个本原蕴含想覆盖就不会出现毛刺,当输入变化跨越了多个本原蕴含项就会产生毛刺。由卡诺图上可以看出,当AB=11,从s=0到s=1状态跳变时,这个过程没有包含在上面的逻辑表示式中,因此电路会产生冒险。消除冒险的根本策略是添加冗余的本原蕴涵项。在这道题里,只要在逻辑表达式中加上a&b这一项即可。当然我们这里只考虑了单个输入发生变化的问题,因为在实际应用中,输入是按一定顺序变化的,即使有多个输入发生变化也是如此。还有一种方案就是利用采样脉冲消除冒险。在这里就不多说了。在此基础上可以设计出四选一的多路选择器,也就是实例化两个二选一多路选择器,然后再对这两个选择器的输出进行一次二选一。代码二选一多路选择器:modulemux_2_1(a,b,s,y,leda,ledb,leds);inputa,b,s;outputy,leda,ledb,leds;wires1,a1,a2;bufb1(leda,a);bufb2(ledb,b);bufb3(leds,s);notnot1(s1,s);andand1(a1,s1,a);andand2(a2,s,b);oror1(y,a1,a2);endmodule管脚约束:NETaLOC=T10;NETbLOC=T9;NETsLOC=V9;NETyLOC=T11;NETledaLOC=U16;NETledbLOC=V16;NETledsLOC=U15;四选一多路选择器:modulemux_4_1(a,b,c,d,s1,s2,y,leda,ledb,ledc,ledd,leds1,leds2);inputa,b,c,d,s1,s2;outputy,leda,ledb,ledc,ledd,leds1,leds2;wireledy1,ledy2;wirey1,y2;mux_2_1m1(a,b,s1,y1,leda,ledb,leds1);mux_2_1m2(c,d,s1,y2,ledc,ledd,leds1);mux_2_1m3(y1,y2,s2,y,ledy1,ledy2,leds2);endmodule管脚约束:NETaLOC=T10;NETbLOC=T9;NETcLOC=V9;NETdLOC=M8;NETs1LOC=N8;NETs2LOC=U8;NETyLOC=T11;NETledaLOC=U16;NETledbLOC=V16;NETledcLOC=U15;NETleddLOC=v15;NETleds1LOC=M11;NETleds2LOC=N11;仿真结果上图为四选一多路选择器的modelsim仿真结果。符合实验要求。综合和硬件调试情况调试结果符合预期,没有问题二译码器实验目的掌握组合逻辑设计方法;掌握译码器设计原理。设计方案三八译码器如上图所示,真值表如下:由真值表很容易得出逻辑表达式。分别用门级和行为级来实现。上图为数码管七段译码基本结构,直接由真值表进行行为级的描述。代码三八译码器行为级描述:moduledec3to8men(a,d);input[2:0]a;output[7:0]d;assignd[0]=~a[2]&~a[1]&~a[0];assignd[1]=~a[2]&~a[1]&a[0];assignd[2]=~a[2]&a[1]&~a[0];assignd[3]=~a[2]&a[1]&a[0];assignd[4]=a[2]&~a[1]&~a[0];assignd[5]=a[2]&~a[1]&a[0];assignd[6]=a[2]&a[1]&~a[0];assignd[7]=a[2]&a[1]&a[0];endmodule三八译码器门级描述:moduledec3to8men(a,d);input[2:0]a;output[7:0]d;wire[2:0]f;wirenotnot1(f[0],a[0]);notnot2(f[1],a[1]);notnot3(f[2],a[2]);andand1(d[0],f[2],f[1],f[0]);andand2(d[1],f[2],f[1],a[0]);andand3(d[2],f[2],a[1],f[0]);andand4(d[3],f[2],a[1],a[0]);andand5(d[4],a[2],f[1],f[0]);andand6(d[5],a[2],f[1],a[0]);andand7(d[6],a[2],a[1],f[0]);andand8(d[7],a[2],a[1],a[0]);endmodule三八译码器管脚约束:NETa[0]LOC=T10;NETa[1]LOC=T9;NETa[2]LOC=V9;NETd[0]LOC=U16;NETd[1]LOC=V16;NETd[2]LOC=U15;NETd[3]LOC=v15;NETd[4]LOC=M11;NETd[5]LOC=N11;NETd[6]LOC=R11;NETd[7]LOC=T11;七段译码器:moduledecoder7(x,a,b,c,d,e,f,g);input[3:0]x;outputrega,b,c,d,e,f,g;always@(*)case(x)4'b0000:begina=0;b=0;c=0;d=0;e=0;f=0;g=1;end4'b0001:begina=1;b=0;c=0;d=1;e=1;f=1;g=1;end4'b0010:begina=0;b=0;c=1;d=0;e=0;f=1;g=0;end4'b0011:begina=0;b=0;c=0;d=0;e=1;f=1;g=0;end4'b0100:begina=1;b=0;c=0;d=1;e=1;f=0;g=0;end4'b0101:begina=0;b=1;c=0;d=0;e=1;f=0;g=0;end4'b0110:begina=0;b=1;c=0;d=0;e=0;f=0;g=0;end4'b0111:begina=0;b=0;c=0;d=1;e=1;f=1;g=1;end4'b1000:begina=0;b=0;c=0;d=0;e=0;f=0;g=0;end4'b1001:begina=0;b=0;c=0;d=0;e=1;f=0;g=0;end4'b1010:begina=0;b=0;c=0;d=1;e=0;f=0;g=0;end4'b1011:begina=1;b=1;c=0;d=0;e=0;f=0;g=0;end4'b1100:begina=0;b=1;c=1;d=0;e=0;f=0;g=1;end4'b1101:begina=1;b=0;c=0;d=0;e=0;f=1;g=0;end4'b1110:begina=0;b=1;c=1;d=0;e=0;f=0;g=0;end4'b1111:begina=0;b=1;c=1;d=1;e=0;f=0;g=0;enddefault:begina=0;b=0;c=0;d=0;e=0;f=0;g=0;endendcaseendmodule管脚约束:NETx[0]LOC=T10;NETx[1]LOC=T9;NETx[2]LOC=V9;NETx[3]LOC=M8;NETaLOC=T17;NETbLOC=T18;NETcLOC=U17;NETdLOC=U18;NETeLOC=M14;NETfLOC=N14;NETgLOC=L14;仿真结果三八译码器仿真结果如上图所示。七段译码器的仿真结果如图所示。综合和硬件调试情况七段译码器没有设置使能信号,因此四位全都显示。其他没有问题。三加法器实验目的掌握运算组合逻辑的设计方法;加法器的设计原理;逐次进位加法器和超前进位加法器。设计方案一位全加器的框图如图所示由此可以设计出一位全加器的门级电路,在此基础上分别设计四位逐次进位和四位超前进位全加器。逐次进位的框图如下图;超前进位的框图如下图我们定义gi=ai&bi,pi=ai^bi。于是有通过迭代就可以提前计算出进位信号。在此基础上,通过两个四位超前进位加法器可以设计出一个八位加法器;通过补码的运算把减法转化为加法,因此也设计出了四位减法器。代码一位全加器:`timescale1ns/1psmodulefulad1bit(x,y,cin,sum,cout);inputx,y,cin;outputsum,cout;wirexy,an1,an2;xorxor1(sum,x,y,cin);xorxor2(xy,x,y);andand1(an1,xy,cin);andand2(an2,x,y);oror1(cout,an1,an2);endmodule四位逐次进位:`timescale1ns/1psmoduleripple(a,b,cin,s,cout);input[3:0]a,b;output[3:0]s;inputcin;outputcout;wirecout0,cout1,cout2;fulad1bitf1(a[0],b[0],cin,s[0],cout0);fulad1bitf2(a[1],b[1],cout0,s[1],cout1);fulad1bitf3(a[2],b[2],cout1,s[2],cout2);fulad1bitf4(a[3],b[3],cout2,s[3],cout);endmodule四位超前进位:`timescale1ns/1psmodulelook_carry(a,b,cin,s,cout);input[3:0]a,b;output[3:0]s;inputcin;outputcout;wire[3:0]g,p;wire[4:0]ci;wirepc0,pc1,pc2,pc3;//assigng[0]=a[0]&b[0];andand1(g[0],a[0],b[0]);//assignp[0]=a[0]^b[0];xorxor1(p[0],a[0],b[0]);//assigng[1]=a[1]&b[1];andand2(g[1],a[1],b[1]);//assignp[1]=a[1]^b[1];xorxor2(p[1],a[1],b[1]);//assigng[2]=a[2]&b[2];andand3(g[2],a[2],b[2]);//assignp[2]=a[2]^b[2];xorxor3(p[2],a[2],b[2]);//assigng[3]=a[3]&b[3];andand4(g[3],a[3],b[3]);//assignp[3]=a[3]^b[3];xorxor4(p[3],a[3],b[3]);//assignci[0]=cin;bufbuf1(ci[0],cin);//assignci[1]=g[0]+p[0]*ci[0];andand5(pc0,p[0],ci[0]);oror1(ci[1],g[0],pc0);//assignci[2]=g[1]+p[1]*ci[1];andand6(pc1,p[1],ci[1]);oror2(ci[2],g[1],pc1);//assignci[3]=g[2]+p[2]*ci[2];andand7(pc2,p[2],ci[2]);oror3(ci[3],g[2],pc2);//assignci[4]=g[3]+p[3]*ci[3];andand8(pc3,p[3],ci[3]);oror4(ci[4],g[3],pc3);fulad1bitf1(a[0],b[0],ci[0],s[0],cout0);fulad1bitf2(a[1],b[1],ci[1],s[1],cout1);fulad1bitf3(a[2],b[2],ci[2],s[2
本文标题:verilog组合逻辑实验报告
链接地址:https://www.777doc.com/doc-5858995 .html