《VerilogHDL程序设计与仿真实验报告》1、实验名称:VerilogHDL程序设计与仿真实验2、实验设计要求以及内容:利用VerilogHDL语言和描述下列芯片的功能,编写激励测试程序并在Modelsim软件中仿真运行、记录相关波形。芯片包括:CD4532、74X138、74HC4511、74HC151、74HC85、74HC283、74HC194、74LVC161。3、实验软件:Modelsim软件。4、芯片功能与真值表:CD4532:8位优先编码器:输入输出𝑬𝑰𝑰𝟕𝑰𝟔𝑰𝟓𝑰𝟒𝑰𝟑𝑰𝟐𝑰𝟏𝑰𝟎𝒀𝟐𝒀𝟏𝒀𝟎CSE00xxxxxxxx10000000011xxxxxxx101xxxxxx1001xxxxx10001xxxx100001xxx1000001xx10000001x1000000010000000001111101101010110100100111001010001100001074X138:3线-8线译码器:输入输出𝑬𝟑𝑬𝟐̅̅̅̅𝑬𝟏̅̅̅̅𝑨𝟐𝑨𝟏𝑨𝟏𝒀𝟎̅̅̅̅𝒀𝟏̅̅̅̅𝒀𝟐̅̅̅̅𝒀𝟑̅̅̅̅𝒀𝟒̅̅̅̅𝒀𝟓̅̅̅̅𝒀𝟔̅̅̅̅𝒀𝟕̅̅̅̅x1xxx11xx100100100100100100100100xxxxxxxxx000001010011100101110111111111111111111111111111011111111011111111011111111011111111011111111011111111011111111074HC4511:七段显示译码器:十进制或功能输入输出字形LE𝑩𝑳̅̅̅̅𝑳𝑻̅̅̅̅𝑫𝟑𝑫𝟐𝑫𝟏𝑫𝟎abcdefg0123456789101112131415000000000000000011111111111111111111111111111111000000010010001101000101011001111000100110101011110011011110111111111100110000110110111110010110011101101100111101110000111111111110110000000000000000000000000000000000000000000123456789熄灭熄灭熄灭熄灭熄灭熄灭灯测试xx0xxxx11111118灭灯x01xxxx0000000熄灭锁存111xxxx**74HC151:八选一数据选择器:输入输出使能𝑬̅选择𝑺𝟐𝑺𝟏𝑺𝟎Y𝒀̅100000000xxx00000101001110010111011101𝑫𝟎𝑫𝟎̅̅̅̅𝑫𝟏𝑫𝟏̅̅̅̅𝑫𝟐𝑫𝟐̅̅̅̅𝑫𝟑𝑫𝟑̅̅̅̅̅𝑫𝟒𝑫𝟒̅̅̅̅𝑫𝟓𝑫𝟓̅̅̅̅𝑫𝟔𝑫𝟔̅̅̅̅𝑫𝟕𝑫𝟕̅̅̅̅74HC85:4位数值比较器:74HC283:4位二进制全加器:74HC194:4位双向移位寄存器:输入输出功能清零控制信号时钟串行输入并行输入𝑸𝟎𝒏+𝟏𝑸𝟏𝒏+𝟏𝑸𝟐𝒏+𝟏𝑸𝟑𝒏+𝟏CR𝑺𝟏𝑺𝟎CP右移𝑫𝑺𝑹左移𝑫𝑺𝑳𝑫𝟏𝟎𝑫𝟏𝟏𝑫𝟏𝟐𝑫𝟏𝟑LHHHHHHxxLLLHLHHLHLHHxx↑↑↑↑↑xxxxLxHxxLxHxxxxxxxxxxxxxxxxxxxxxxxxxx𝑫𝟏𝟎∗𝑫𝟏𝟏∗𝑫𝟏𝟐∗𝑫𝟏𝟑∗LLLL𝑸𝟎𝒏𝑸𝟏𝒏𝑸𝟐𝒏𝑸𝟑𝒏L𝑸𝟎𝒏𝑸𝟏𝒏𝑸𝟐𝒏H𝑸𝟎𝒏𝑸𝟏𝒏𝑸𝟐𝒏74LVC161:4位二进制同步计数器:输入输出清零CR预支PE使能CEPCET时钟CP预支数据输入𝑫𝟑𝑫𝟐𝑫𝟏𝑫𝟎𝑸𝟑𝑸𝟐𝑸𝟏𝑸𝟎进位TCLxxxxxxxxLLLLLHHHHLHHHxxLxxLHH↑xx↑𝑫𝟑∗𝑫𝟐∗𝑫𝟏∗𝑫𝟎∗xxxxxxxxxxxx𝑫𝟑𝑫𝟐𝑫𝟏𝑫𝟎保持保持保持##L#5、实验具体设计:CD4532-8位优先编码器:模块设计代码:moduleCD4532(EI,I,Y,GS,EO);//8位优先编码器inputEI;input[7:0]I;outputreg[2:0]Y;outputregGS,EO;always@(EI,I)beginif(EI==0)beginY=3'd0;GS=0;EO=0;endelse//当EI=1时,实现优先编码器的功能beginGS=1;EO=0;//当编码器输入信号有效时,设定GS、EO的输出值if(I[7])Y=3'd7;else//根据I的高位情况对Y的输出进行控制if(I[6])Y=3'd6;elseif(I[5])Y=3'd5;elseif(I[4])Y=3'd4;elseif(I[3])Y=3'd3;elseif(I[2])Y=3'd2;elseif(I[1])Y=3'd1;elseif(I[0])Y=3'd0;elsebeginY=3'd0;GS=0;EO=1;end//当编码器输入信号无效时,设定GS、EO的输出值endendendmodule对应testbench设计代码:`timescale1ns/1ns//设定仿真时间间隔单位,之后的testbench中这句代码功能类似moduleCD4532_tb;reg[7:0]D_in;//设定testbench输入数据类型为reg型regEI_in;wire[2:0]Q_result;///设定testbench输出数据类型为wire型wireGS_result,EO_result;initialbeginEI_in=0;//初始化相关数据的值D_in=8'b0000_0001;#80EI_in=1;#80$stop();//上一个语句执行完毕后的80个时间单位后仿真终止endalways#10//每隔10个时间单位执行一次beginif(D_in==8'b1000_0000)D_in=8'b0000_0001;elseD_in=(D_in1);endCD4532U1(.EI(EI_in),.I(D_in),.Y(Q_result),.GS(GS_result),.EO(EO_result));endmodule74X138-3线-8线译码器:模块设计代码:module_74X138(A,EN,Y);//3线-8线译码器,输出为低电平有效input[2:0]A;inputEN;//使能端outputreg[7:0]Y;integerk;always@(A,EN)beginY=8'b1111_1111;for(k=0;k=7;k=k+1)beginif((EN==1)&&(A==k))Y[k]=0;//EN=1时根据输入的A进行译码elseY[k]=1;//使能无效时或输入无效endendendmodule对应testbench设计代码:`timescale1ns/1nsmodule_74X138_tb;reg[2:0]A_in;regEI_in;wire[7:0]Y_result;initialbeginEI_in=0;A_in=3'b000;#80EI_in=1;#160$stop();endalways#10beginif(A_in==3'b111)A_in=3'b000;elseA_in=A_in+1;end_74X138U1(.A(A_in),.EN(EI_in),.Y(Y_result));endmodule74HC4511-七段显示译码器:模块设计代码:module_74HC4511(D,LE,BL,LT,a,b,c,d,e,f,g);//七段显示译码器input[3:0]D;//输入信号端口inputLE,BL,LT;//控制信号outputrega,b,c,d,e,f,g;always@(LE,BL,LT,D)beginif(LT==0){a,b,c,d,e,f,g}=7'b111_1111;//显示器全亮elseif(BL==0){a,b,c,d,e,f,g}=7'b000_0000;//显示器全灭elseif(LE==0){a,b,c,d,e,f,g}={a,b,c,d,e,f,g};//显示器保持当前显示elsecase(D)//根据输入的8421BCD码进行译码4'd0:{a,b,c,d,e,f,g}=7'b111_1110;//04'd1:{a,b,c,d,e,f,g}=7'b011_0000;//14'd2:{a,b,c,d,e,f,g}=7'b110_1101;//24'd3:{a,b,c,d,e,f,g}=7'b111_1001;//34'd4:{a,b,c,d,e,f,g}=7'b011_0011;//44'd5:{a,b,c,d,e,f,g}=7'b101_1011;//54'd6:{a,b,c,d,e,f,g}=7'b001_1111;//64'd7:{a,b,c,d,e,f,g}=7'b111_0000;//74'd8:{a,b,c,d,e,f,g}=7'b111_1111;//84'd9:{a,b,c,d,e,f,g}=7'b111_1011;//9default:{a,b,c,d,e,f,g}=7'b000_0000;//非8421BCD码输入时,不译码endcaseendendmodule对应testbench设计代码:`timescale1ns/1nsmodule_74HC4511_tb;reg[3:0]D_in;regLE_in,BL_in,LT_in;wireA,B,C,D,E,F,G;initialbegin//开始为全亮LE_in=1;//保持,低电平有效BL_in=1;//全灭,低电平有效LT_in=0;//全亮,低电平有效D_in=4'b0000;#100beginLE_in=1;BL_in=0;LT_in=1;end//全灭#100beginLE_in=1;BL_in=1;LT_in=1;end//正常显示#100beginLE_in=0;BL_in=1;LT_in=1;end//保持#100$stop();endalways#10beginif(D_in==4'd9)D_in=4'b0000;elseD_in=D_in+1;end_74HC4511U1(D_in,LE_in,BL_in,LT_in,A,B,C,D,E,F,G);endmodule74HC151-八选一数据选择器:模块设计代码:module_74HC151(S,D,E,Y0,Y1);//八选一数据选择器input[2:0]S;//控制信号input[7:0]D;//输入信号inputE;//使能端outputregY0,Y1;//Y0,Y1分别为同相和反相输出信号always@(E,S,D)beginif(~E)beginY0=0;Y1=1;end//不工作,输出默认信号elsebegincase(S)//根据控制信号选择不同通道的输入信号作为输出3'b000:beginY0=D[0];Y1=~Y0;end//03'b001:beginY0=D[1];Y1=~Y0;end//13'b010:beginY0=D[2];Y1=~Y0;end//23'b011:beginY0=D[3];Y1=~Y0;end//33'b100:beginY0=D[4];Y1=~Y0;end//43'b101:beginY0=D[5];Y1=~Y0;end//53'b110:beginY0=D[6];Y1=~Y0;end//63'b111:beginY0=D[7];Y1=~Y0;end//7default:beginY0=0;Y1=~Y0;end//若控制信号不符合要求则输出默认信号endcaseendendendmodu