1电子科技大学实验报告学生姓名:郫县阿基王学号:2014666666666指导教师:唐明一、实验项目名称:Verilog组合逻辑设计二、实验目的:使用ISE软件和Verilog语言进行组合逻辑的设计与实现。三、实验内容:1.3-8译码器的设计和实现。2.4位并行进位加法器的设计和实现。3.两输入4位多路选择器的设计和实现。实验要求如下:1.采用Verilog语言设计,使用门级方式进行描述。2.编写仿真测试代码。3.编写约束文件,使输入、输出信号与开发板的引脚对应。4.下载到FPGA开发板,拨动输入开关,观察Led灯的显示是否符合真值表。四、实验原理:1.74x138译码器是输出低有效的3-8译码器。表1所示为74x138译码器的真值表。表174x138译码器的真值表输入输出G1G2A_LG2B_LCBAY7_LY6_LY5_LY4_LY3_LY2_LY1_LY0_L0xxxxx11111111x1xxxx11111111xx1xxx1111111110000011111110100001111111012100010111110111000111111011110010011101111100101110111111001101011111110011101111111根据3-8译码器的真值表,可得输出的函数表达式为12_2_0_1_2_3_4_5_6_7_GGGALGBLYLCBAGYLCBAGYLCBAGYLCBAGYLCBAGYLCBAGYLCBAGYLCBAG根据上述函数表达式,可画出逻辑电路图为。图13-8译码器的逻辑电路图32.数据选择器的逻辑功能是根据地址选择端的控制,从多路输入数据中选择一路数据输出。因此,它可实现时分多路传输电路中发送端电子开关的功能,故又称为复用器(Multiplexer),并用MUX来表示。表22输入1位多路选择器的真值表数据输入选择控制S输出YD0D1000001001001110100100111101011112选1数据选择器的真值表如表1所示,其中,D0、D1是2路数据输入,S为选择控制端,Y为数据选择器的输出,根据真值表可写出它的输出函数表达式为:01YSDSD如果输入再加上低有效的输入使能端,则输出的表达式变为0101_()__YENLSDSDENLSDENLSD根据上述函数表达式,可画出2输入4位多路选择器的逻辑电路图为。4图22输入4位多路选择器的逻辑电路图2.1位全加器的真值表如下表31位全加器的真值表输入变量输出变量ABCiCi+1S000000010101001011101000110110110101111101110根据真值表,输出表达式为:对于4位并行加法器,可以按入下公式进行设计i+1()iiiiiiiiiiSABCABCABCABCABCCABCABCABCABCABCAB5110002111110001101003222221101002212102100433333221210210()()(iiiiiiiiiigABpABCgpCCgpCCgpCgpgpCgpgppCCgpCgpgpgppCgpgppgpppCCgpCgpgpgppgpppC0332321321032100)()(())()iiiiiiiiiiiiiiiiigpgppgpppgppppCSABCABABCABABCgpC图3所示为4位并行进位加法器框图,本实验中用Verilog语句来描述。6图34位并行进位加法器五、实验器材(设备、元器件):PC机、WindowsXP、Anvyl或Nexys3开发板、XilinxISE14.7开发工具、DigilentAdept下载工具。六、实验步骤:7实验步骤包括:建立新工程、原理图或代码输入、设计仿真、输入输出引脚设置、生成流代码与下载调试。七、关键源代码:1.在ISE设计中可以直接输入如下3-8译码器的代码2.3-8译码器的仿真测试代码moduledecoder_74x138(G1,G2A_L,G2B_L,C,B,A,Y7_L,Y6_L,Y5_L,Y4_L,Y3_L,Y2_L,Y1_L,Y0_L);inputG1,G2A_L,G2B_L;inputC,B,A;outputY7_L,Y6_L,Y5_L,Y4_L,Y3_L,Y2_L,Y1_L,Y0_L;wireG1_L;wireG;wireA_L,B_L,C_L;wireA_H,B_H,C_H;not(G1_L,G1);nor(G,G1_L,G2A_L,G2B_L);not(A_L,A);not(B_L,B);not(C_L,C);not(A_H,A_L);not(B_H,B_L);not(C_H,C_L);nand(Y0_L,C_L,B_L,A_L,G);nand(Y1_L,C_L,B_L,A_H,G);nand(Y2_L,C_L,B_H,A_L,G);nand(Y3_L,C_L,B_H,A_H,G);nand(Y4_L,C_H,B_L,A_L,G);nand(Y5_L,C_H,B_L,A_H,G);nand(Y6_L,C_H,B_H,A_L,G);nand(Y7_L,C_H,B_H,A_H,G);endmodule8//AddstimulushereG1=0;G2A_L=1'bx;G2B_L=1'bx;C=1'bx;B=1'bx;A=1'bx;#100;G1=1'bx;G2A_L=1;G2B_L=1'bx;C=1'bx;B=1'bx;A=1'bx;#100;G1=1'bx;G2A_L=1'bx;G2B_L=1;C=1'bx;B=1'bx;A=1'bx;#100;G1=1;G2A_L=0;G2B_L=0;C=0;B=0;A=0;#100;G1=1;G2A_L=0;G2B_L=0;C=0;B=0;A=1;9#100;G1=1;G2A_L=0;G2B_L=0;C=0;B=1;A=0;#100;G1=1;G2A_L=0;G2B_L=0;C=0;B=1;A=1;#100;G1=1;G2A_L=0;G2B_L=0;C=1;B=0;A=0;#100;G1=1;G2A_L=0;G2B_L=0;C=1;B=0;A=1;#100;G1=1;G2A_L=0;G2B_L=0;C=1;B=1;A=0;#100;G1=1;G2A_L=0;G2B_L=0;C=1;B=1;A=1;10仿真结果如下图所示。图4译码器的仿真结果3.译码器在Nexys3开发板上的约束文件4.4位并行加法器的代码moduleAdder_4Bit(A3,A2,A1,A0,B3,B2,B1,B0,C0,C4,S3,S2,S1,S0);#SwitchNETALOC=T10;NETBLOC=T9;NETCLOC=V9;NETG2B_LLOC=M8;NETG2A_LLOC=N8;NETG1LOC=U8;#LedNETY0_LLOC=U16;NETY1_LLOC=V16;NETY2_LLOC=U15;NETY3_LLOC=V15;NETY4_LLOC=M11;NETY5_LLOC=N11;NETY6_LLOC=R11;NETY7_LLOC=T11;11InputA3,A2,A1,A0;inputB3,B2,B1,B0;inputC0;outputC4,S3,S2,S1,S0;wireg3_L,p3_L,g2_L,p2_L,g1_L,p1_L,go_L,p0_L;wirec0_L;wirew1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12,w13,w14;wirehs3,c3,hs2,c2,hs1,c1,hs0,c0;nand(g3_L,A3,B3);nor(p3_L,A3,B3);nand(g2_L,A2,B2);nor(p2_L,A2,B2);nand(g1_L,A1,B1);nor(p1_L,A1,B1);nand(g0_L,A0,B0);nor(p0_L,A0,B0);not(c0_L,C0);not(w1,p3_L);nand(w2,p2_L,g3_L);nand(w3,p1_L,g3_L,g2_L);nand(w4,p0_L,g3_L,g2_L,g1_L);nand(w5,g3_L,g2_L,g1_L,g0_L,c0_L);and(C4,w1,w2,w3,w4,w5);and(hs3,g3_L,~p3_L);not(w6,p2_L);nand(w7,p1_L,g2_L);nand(w8,p0_L,g2_L,g1_L);nand(w9,g2_L,g1_L,g0_L,c0_L);and(c3,w6,w7,w8,w9);xor(S3,hs3,c3);and(hs2,g2_L,~p2_L);not(w10,p1_L);nand(w11,p0_L,g1_L);nand(w12,g1_L,g0_L,c0_L);and(c2,w10,w11,w12);xor(S2,hs2,c2);125.加法器的仿真测试代码仿真结果如下图所示and(hs1,g1_L,~p1_L);not(w13,p0_L);nand(w14,g0_L,c0_L);and(c1,w13,w14);xor(S1,hs1,c1);and(hs0,g0_L,~p0_L);not(c0,c0_L);xor(S0,hs0,c0);endmodule#100;C0=1;#100;C0=0;B3=1;B2=1;B1=1;B0=1;#100;A3=1;A2=1;A1=1;A0=1;#100;C0=1;13图5加法器的仿真结果6.加法器在Nexys3开发板上的约束文件#SwitchNETB0LOC=T10;#SW0NETB1LOC=T9;#SW1NETB2LOC=V9;#SW2NETB3LOC=M8;#SW3NETA0LOC=N8;#SW4NETA1LOC=U8;#SW5NETA2LOC=V8;#SW6NETA3LOC=T5;#SW7#LedNETS0LOC=U16;#LD0NETS1LOC=V16;#LD1NETS2LOC=U15;#LD2NETS3LOC=V15;#LD3NETC4LOC=M11;#LD4#ButtonNetC0Loc=B8;#BTN0147.数据选择器的代码8.数据选择器的仿真测试代码modulemux_2in4bit(inputEN_L,S,input[4:1]D0,D1,output[4:1]Y);wirew0,w1,w2,w3,w4,w5,w6,w7,w8,w9;wireS_L;not(S_L,S);nor(w0,EN_L,S);nor(w1,EN_L,S_L);and(w2,D0[1],w0);and(w3,D1[1],w1);and(w4,D0[2],w0);and(w5,D1[2],w1);and(w6,D0[3],w0);and(w7,D1[3],w1);and(w8,D0[4],w0);and(w9,D1[4],w1);or(Y[1],w2,w3);or(Y[2],w4,w5);or(Y[3],w6,w7);or(Y[4],w8,w9);endmodule15仿真结果如下图所示。图6数据选择器的仿真结果9.数据选择器在Nexys3开发板上的约束文件#SwitchNETD0[1]LOC=T10;#SW0NETD0[2]LOC=T9;#SW1NETD0[3]LOC=V9;#SW2NETD0[4]LOC=M8;#SW3NETD1[1]LOC=N8;#SW4NETD1[2]LOC=U8;#SW5NETD1[3]LOC=V8;#SW6NETD1[4]LOC=T5;#SW7#LedNETY[1]LOC=U16;#LED0NETY[2]LOC=V16;#L