数电仿真Modelsim设计实验报告 Verilog HDL语言_第1页
数电仿真Modelsim设计实验报告 Verilog HDL语言_第2页
数电仿真Modelsim设计实验报告 Verilog HDL语言_第3页
数电仿真Modelsim设计实验报告 Verilog HDL语言_第4页
数电仿真Modelsim设计实验报告 Verilog HDL语言_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Verilog HDL程序设计与仿真实验报告1、 实验名称:Verilog HDL程序设计与仿真实验2、 实验设计要求以及内容:利用Verilog HDL语言和描述下列芯片的功能,编写激励测试程序并在Modelsim软件中仿真运行、记录相关波形。芯片包括:CD4532、74X138、74HC4511、74HC151、74HC85、74HC283、74HC194、74LVC161。3、 实验软件:Modelsim软件。4、 芯片功能与真值表:CD4532:8位优先编码器:输入输出 EI I7 I6 I5 I4 I3 I2 I1 I0 Y2 Y1 Y0 CS E00 x x x x x x x x

2、1 0 0 0 0 0 0 0 01 1 x x x x x x x1 0 1 x x x x x x1 0 0 1 x x x x x1 0 0 0 1 x x x x1 0 0 0 0 1 x x x1 0 0 0 0 0 1 x x1 0 0 0 0 0 0 1 x1 0 0 0 0 0 0 0 10 0 0 0 00 0 0 0 11 1 1 1 01 1 0 1 01 0 1 1 01 0 0 1 00 1 1 1 00 1 0 1 00 0 1 1 00 0 0 1 074X138:3 线8线译码器:输入输出E3 E2 E1A2 A1 A1Y0 Y1 Y2 Y3 Y4 Y5 Y6

3、Y7 x 1 xx x 11 x x1 0 01 0 01 0 01 0 01 0 01 0 01 0 01 0 0 x x xx x xx x x0 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 074HC4511:七

4、段显示译码器:十进制或功能输入输出字形LEBLLTD3 D2 D1 D0a b c d e f g01234567891011121314150000000000000000111111111111111111111111111111110 0 0 00 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 11 0 0 01 0 0 11 0 1 01 0 1 11 1 0 01 1 0 11 1 1 01 1 1 11 1 1 1 1 1 00 1 1 0 0 0 01 1 0 1 1 0 11 1 1 1 0 0 10 1 1 0 0 1 11 0

5、1 1 0 1 10 0 1 1 1 1 01 1 1 0 0 0 01 1 1 1 1 1 11 1 1 1 0 1 10 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00123456789熄灭熄灭熄灭熄灭熄灭熄灭灯测试xx0x x x x1 1 1 1 1 1 18灭灯x01x x x x0 0 0 0 0 0 0熄灭锁存111x x x x*74HC151:八选一数据选择器:输入输出使能E选择S2 S1 S0Y Y100000000x x x0 0 00 0 10 1 00 1 11

6、 0 01 0 11 1 01 1 10 1D0 D0D1 D1D2 D2D3 D3D4 D4D5 D5D6 D6D7 D774HC85:4位数值比较器:74HC283:4位二进制全加器:74HC194:4位双向移位寄存器:输入输出功能清零控制信号时钟串行输入并行输入Q0n+1 Q1n+1 Q2n+1 Q3n+1CR S1 S0CP右移DSR 左移 DSLD10 D11 D12 D13LHHHHHHx xL LL HL HH LH LH Hxxx xx xL xH xx Lx Hx xx x x xx x x xx x x xx x x xx x x xx x x xD10* D11* D12

7、* D13*L L L LQ0n Q1n Q2n Q3nL Q0n Q1n Q2nH Q0n Q1n Q2n74LVC161:4位二进制同步计数器:输入输出清零CR预支PE使能CEP CET时钟CP预支数据输入D3 D2 D1 D0Q3 Q2 Q1 Q0进位TCLHHHHxLHHHx xx xL xx LH Hxxxx x x xD3* D2* D1* D0*x x x xx x x xx x x xL L L LD3 D2 D1 D0保持保持保持L#L#5、 实验具体设计:CD4532-8位优先编码器:模块设计代码:module CD4532(EI,I,Y,GS,EO);/8位优先编码器 i

8、nput EI; input 7:0 I; output reg 2:0 Y; output reg GS,EO; always (EI,I) begin if(EI=0) begin Y=3d0; GS=0; EO=0; end else/当EI=1时,实现优先编码器的功能 begin GS=1; EO=0;/当编码器输入信号有效时,设定GS、EO的输出值 if(I7) Y=3d7; else/根据I的高位情况对Y的输出进行控制if(I6) Y=3d6; elseif(I5) Y=3d5; elseif(I4) Y=3d4; elseif(I3) Y=3d3; elseif(I2) Y=3d

9、2; elseif(I1) Y=3d1; elseif(I0) Y=3d0; elsebegin Y=3d0; GS=0; EO=1; end/当编码器输入信号无效时,设定GS、EO的输出值 end endendmodule对应testbench设计代码:timescale 1ns/1ns /设定仿真时间间隔单位,之后的testbench中这句代码功能类似module CD4532_tb; reg 7:0 D_in;/ 设定testbench输入数据类型为reg型 reg EI_in; wire 2:0 Q_result;/ / 设定testbench输出数据类型为wire型 wire GS_

10、result,EO_result; initial begin EI_in=0;/初始化相关数据的值 D_in=8b0000_0001; #80 EI_in=1; #80 $stop();/上一个语句执行完毕后的80个时间单位后仿真终止 end always #10 /每隔10个时间单位执行一次 begin if(D_in=8b1000_0000) D_in=8b0000_0001;else D_in=(D_in1); end CD4532 U1(.EI(EI_in),.I(D_in),.Y(Q_result),.GS(GS_result),.EO(EO_result); endmodule7

11、4X138-3 线8线译码器:模块设计代码:module _74X138(A,EN,Y);/3 线8线译码器,输出为低电平有效 input 2:0 A; input EN;/使能端 output reg 7:0 Y; integer k; always (A,EN) begin Y=8b1111_1111;for(k=0;k=7;k=k+1)begin if(EN=1)&(A=k) Yk=0;/EN=1时根据输入的A进行译码 elseYk=1;/使能无效时或输入无效end endendmodule对应testbench设计代码:timescale 1ns/1ns module _74X138_

12、tb; reg 2:0 A_in; reg EI_in; wire 7:0 Y_result; initial begin EI_in=0; A_in=3b000; #80 EI_in=1; #160 $stop(); end always #10 begin if(A_in=3b111) A_in=3b000;else A_in=A_in+1; end _74X138 U1(.A(A_in),.EN(EI_in),.Y(Y_result); endmodule74HC4511-七段显示译码器:模块设计代码:module _74HC4511(D,LE,BL,LT,a,b,c,d,e,f,g);

13、/七段显示译码器 input 3:0 D;/输入信号端口 input LE,BL,LT;/控制信号 output reg a,b,c,d,e,f,g; always(LE,BL,LT,D) begin if(LT=0) a,b,c,d,e,f,g=7b111_1111;/显示器全亮else if(BL=0) a,b,c,d,e,f,g=7b000_0000;/显示器全灭else if(LE=0) a,b,c,d,e,f,g=a,b,c,d,e,f,g;/显示器保持当前显示else case(D)/根据输入的8421BCD码进行译码 4d0: a,b,c,d,e,f,g=7b111_1110;/

14、0 4d1: a,b,c,d,e,f,g=7b011_0000;/1 4d2: a,b,c,d,e,f,g=7b110_1101;/2 4d3: a,b,c,d,e,f,g=7b111_1001;/3 4d4: a,b,c,d,e,f,g=7b011_0011;/4 4d5: a,b,c,d,e,f,g=7b101_1011;/5 4d6: a,b,c,d,e,f,g=7b001_1111;/6 4d7: a,b,c,d,e,f,g=7b111_0000;/7 4d8: a,b,c,d,e,f,g=7b111_1111;/8 4d9: a,b,c,d,e,f,g=7b111_1011;/9 d

15、efault:a,b,c,d,e,f,g=7b000_0000;/非8421BCD码输入时,不译码 endcase endendmodule对应testbench设计代码:timescale 1ns/1ns module _74HC4511_tb; reg 3:0 D_in; reg LE_in,BL_in,LT_in; wire A,B,C,D,E,F,G; initial begin /开始为全亮 LE_in=1;/保持,低电平有效BL_in=1;/全灭,低电平有效LT_in=0;/全亮,低电平有效D_in=4b0000; #100 begin LE_in=1; BL_in=0; LT_i

16、n=1; end/全灭#100 begin LE_in=1; BL_in=1; LT_in=1; end/正常显示 #100 begin LE_in=0; BL_in=1; LT_in=1; end/保持 #100 $stop(); end always #10 begin if(D_in=4d9) D_in=4b0000;else D_in=D_in+1; end _74HC4511 U1(D_in,LE_in,BL_in,LT_in,A,B,C,D,E,F,G); endmodule74HC151-八选一数据选择器:模块设计代码:module _74HC151(S,D,E,Y0,Y1);/

17、八选一数据选择器 input 2:0 S;/控制信号 input 7:0 D;/输入信号 input E;/使能端 output reg Y0,Y1;/Y0,Y1分别为同相和反相输出信号 always(E,S,D) begin if(E) begin Y0=0; Y1=1; end/不工作,输出默认信号else begin case(S)/根据控制信号选择不同通道的输入信号作为输出 3b000: begin Y0=D0; Y1=Y0; end/0 3b001: begin Y0=D1; Y1=Y0; end/1 3b010: begin Y0=D2; Y1=Y0; end/2 3b011: b

18、egin Y0=D3; Y1=Y0; end/3 3b100: begin Y0=D4; Y1=Y0; end/4 3b101: begin Y0=D5; Y1=Y0; end/5 3b110: begin Y0=D6; Y1=Y0; end/6 3b111: begin Y0=D7; Y1=Y0; end/7 default: begin Y0=0; Y1=Y0; end/若控制信号不符合要求则输出默认信号endcase end endendmodule对应testbench设计代码:timescale 1ns/1ns module _74HC151_tb; reg 2:0 S_in; re

19、g 7:0 D_in; reg E_in; wire Y0_result,Y1_result; initial begin E_in=0;S_in=3b000; D_in=8b0010_0110; #80 E_in=1;#80 D_in=8b1001_1110;#80 E_in=0; #80 $stop(); end always #10 begin if(S_in=3b111) S_in=3b000;else S_in=S_in+1; end _74HC151 U1(S_in,D_in,E_in,Y0_result,Y1_result); Endmodule74HC85-4位数值比较器:模块

20、设计代码:module _74HC85(A,B,I0,I1,I2,Fab0,Fab1,Fab2);/4位数值比较器,以下均为高电平有效 input 3:0 A,B;/输入信号 input I0,I1,I2;/低位比较结果,依次为低位A=B,AB output reg Fab0,Fab1,Fab2;/输出信号Fab0,Fab1,Fab2依次为A=B,AB. reg F000,F001,F002,F110,F111,F112,F220,F221,F222,F330,F331,F332;/中间节点,依次对应Ai=Bi,AiBi.i为位数(03) always(A,B,I0,I1,I2) begini

21、f(A3B3)/比较第4位 begin F330=0; F331=0; F332=1; endelse if(A3B2)/比较第3位 begin F220=0; F221=0; F222=1; endelse if(A2B1)/比较第2位 begin F110=0; F111=0; F112=1; endelse if(A1B0)/比较第1位 begin F000=0; F001=0; F002=1; endelse if(A0B0) begin F000=0; F001=1; F002=0; endelse begin F000=1; F001=0; F002=0; end /输出结果如下i

22、f(F000&F110&F220&F330)&I0)/低位进位信号出错 begin Fab2=0; Fab1=0; Fab0=1; endelse if(F000&F110&F220&F330)&(I0&I1&I2)/低位进位信号出错 begin Fab2=0; Fab1=0; Fab0=0; endelse if(F000&F110&F220&F330)&(I0&I1&I2)/低位进位信号出错 begin Fab2=1; Fab1=1; Fab0=0; end else/低位进位信号正常 begin Fab2=F332|F330&F222|F330&F220&F112|F330&F220&F

23、110&F002|F330&F220&F110&F000&I2;Fab1=F331|F330&F221|F330&F220&F111|F330&F220&F110&F001|F330&F220&F110&F000&I1;Fab0=F330&F220&F110&F000&I0; end endendmodule对应testbench设计代码:timescale 1ns/1ns module _74HC85_tb; reg 3:0 A_in,B_in; reg I0_in,I1_in,I2_in; wire Fab0_result,Fab1_result,Fab2_result; initial

24、begin I0_in=0;I1_in=0;I2_in=0;A_in=4b1010;B_in=4b0111; #10 begin I0_in=1; I1_in=0; I2_in=0; end/低位A=B#10 begin I0_in=0; I1_in=1; I2_in=0; end/低位AB #10 begin I0_in=0; I1_in=0; I2_in=0; /低位归位 A_in=4b0100;B_in=4b1001; end #10 begin I0_in=1; I1_in=0; I2_in=0; end/低位A=B#10 begin I0_in=0; I1_in=1; I2_in=0

25、; end/低位AB #10 begin I0_in=0; I1_in=0; I2_in=0; /低位归位 A_in=4b0010;B_in=4b0010; end #10 begin I0_in=1; I1_in=0; I2_in=0; end/低位A=B#10 begin I0_in=0; I1_in=1; I2_in=0; end/低位AB #10 $stop(); end _74HC85 U1(A_in,B_in,I0_in,I1_in,I2_in,Fab0_result,Fab1_result,Fab2_result); endmodule74HC283-4位二进制全加器:模块设计代

26、码:module _74HC283(A,B,Ci,Co,S);/4位二进制全加器 input Ci;/低位进位信号 input 3:0 A,B;/输入信号 output reg 3:0 S;/输出结果 output reg Co;/高位进位信号Co=C3 reg 3:0 C,G,P; integer k; always(A,B,Ci) begin for(k=0;k4;k=k+1) begin Gk=Ak&Bk;Pk=Ak&Bk|Ak&Bk; endC0=G0|P0&Ci;C1=G1|P1&C0;C2=G2|P2&C1;C3=G3|P3&C2;S0=P0&Ci|P0&Ci;S1=P1&C0|P

27、1&C0;S2=P2&C1|P2&C1;S3=P3&C2|P3&C2;Co=C3; endendmodule对应testbench设计代码:timescale 1ns/1ns module _74HC283_tb; reg 3:0 A_in,B_in; reg Ci_in;/低位进位信号 wire 3:0 S_out;/本位相加结果 wire Co_out;/高位进位信号 initial begin Ci_in=0; A_in=4b1010;B_in=4b0111;#10 begin A_in=4b0011; B_in=4b1111; end#10 begin A_in=4b0101; B_i

28、n=4b1001; end#10 begin A_in=4b1111; B_in=4b0010; end #10 $stop(); end always #5 begin Ci_in=Ci_in;/循环改变低位进位信号 end _74HC283 U1(A_in,B_in,Ci_in,Co_out,S_out); endmodule 74HC194-4位双向移位寄存器:模块设计代码:module _74HC194(S0,S1,Dsl,Dsr,CP,CR,D,Q);/4位双向移位寄存器_P339 input S0,S1;/输入端口 input Dsr,Dsl;/串行数据输入 input CP,CR

29、;/时钟和清零 input 3:0 D;/并行数据输入 output reg 3:0 Q;/输出结果 always(posedge CP, negedge CR) begin if(CR) Q=4b0000;/异步清零else case(S1,S0) 2b00:Q=Q;/输出保持不变 2b01:Q=Q2:0,Dsr;/右移,低位移向高位 2b10:Q=Dsl,Q3:1;/左移,高位移向低位 2b11:Q=D;/并行置数endcase endendmodule对应testbench设计代码:timescale 1ns/1ns module _74HC194_tb; reg 3:0 D_in;/并

30、行数据输入 reg S0_in,S1_in;/控制信号输入端口 reg Dsr_in,Dsl_in;/串行数据输入 reg CP_in,CR_in;/时钟和清零,清零为低电平有效 wire 3:0 Q_out;/输出结果 initial begin CP_in=1;CR_in=1;S0_in=1;S1_in=1;/开始先输入串行数据Dsr_in=0;Dsl_in=0;D_in=4b0110;#243 CR_in=CR_in; #20 $stop(); end always #5 begin CP_in=CP_in;/周期为10ns的时钟信号 end always #15/循环调整控制输入信号,

31、周期60ns begin case(S1_in,S0_in) 2b00:begin S1_in=0; S0_in=1; end 2b01:begin S1_in=1; S0_in=0; end 2b10:begin S1_in=1; S0_in=1; end 2b11:begin S1_in=0; S0_in=0; endendcase end always #10/循环调整串行数据输入信号,周期40ns begin case(Dsr_in,Dsl_in) 2b00:begin Dsr_in=0; Dsl_in=1; end 2b01:begin Dsr_in=1; Dsl_in=0; end

32、 2b10:begin Dsr_in=1; Dsl_in=1; end 2b11:begin Dsr_in=0; Dsl_in=0; endendcase end _74HC194 U1(S0_in,S1_in,Dsl_in,Dsr_in,CP_in,CR_in,D_in,Q_out); endmodule 74LVC161-4位二进制同步计数器:模块设计代码:module _74LVC161(CEP,CET,PE,CP,CR,D,TC,Q);/4位二进制同步计数器_P340 input CEP,CET,PE,CP,CR;/输入端口 input 3:0 D;/并行数据输入 output TC;

33、/进位输出 output reg 3:0 Q;/输出结果 wire CE; assign CE=CEP&CET;/CE=1时计数器计数 assign TC=CET&PE&(Q=4b1111);/产生进位输出信号 always(posedge CP, negedge CR) begin if(CR) Q=4b0000;/异步清零else if(PE) Q=D;/PE=0,同步输入数据else if(CE) begin if(TC=1)&(Q=4b1111) Q=4b0000;/计数器计满后自动归零 else Q=Q+1b1;/加1计数endelse Q=Q;/保持输出不变 endendmodule对应testbench设计代码:timescale 1ns/1ns module _74LVC161_tb; reg CEP_in,CET_in,PE_in,CP_in,CR_in;/输入端口 reg 3:0 D_in;/并行数据输入 wire TC_out;/进位输出 wire 3:0 Q_out

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论