1、_计算机_学院计科专业2班_组、学号3115004949姓名 朱远鹏 协作者_ 教师评定_实验题目_基于Libero的数字逻辑设计仿真及验证实验_1、 熟悉EDA工具的使用;仿真基本门电路。2、 仿真组合逻辑电路。3、 仿真时序逻辑电路。4、 基本门电路、组合电路和时序电路的程序烧录及验证。5、 数字逻辑综合设计仿真及验证。实验报告1、基本门电路一、实验目的1、了解基于Verilog的基本门电路的设计及其验证。2、熟悉利用EDA工具进行设计及仿真的流程。3、学习针对实际门电路芯片74HC00、74HC02、74HC04、74HC08、74HC32、74HC86进行VerilogHDL设计的方法
2、。二、实验环境Libero仿真软件。三、实验内容1、掌握Libero软件的使用方法。2、进行针对74系列基本门电路的设计,并完成相应的仿真实验。3、参考教材中相应章节的设计代码、测试平台代码(可自行编程),完成74HC00、74HC02、74HC04、74HC08、74HC32、74HC86相应的设计、综合及仿真。4、提交针对74HC00、74HC02、74HC04、74HC08、74HC32、74HC86(任选一个)的综合结果,以及相应的仿真结果。四、实验结果和数据处理1、所有模块及测试平台代码清单/74HC00代码-与非/74HC00.v module HC00(A,B,Y); input
3、 4:1 A,B; output 4:1 Y; assign Y = (A&B); endmodule/74HC00测试平台代码/test_00.vtimescale 1ns/1nsmodule testbench();reg 4:1 a,b;wire 4:1 y;HC00 ul(a,b,y);initialbegin a=4b0000; b=4b0001; #10 b=b1; #10 b=b1; #10 b=b1; a=4b1111; b=4b0001; #10 b=b1; #10 b=b1; #10 b=b1;endendmodule/74HC02代码-或非/74HC02.v module
4、 HC02(A,B,Y); input 3:0 A,B; output 3:0 Y; assign Y = (A|B); endmodule/74HC02测试平台代码/ test_02.v timescale 1ns/1ns module test_02; reg 3:0 a,b,c; wire 3:0 y; HC02 u(a, b, y); initial begin a = 4b1111;c = 4b0001; b = c;c = c1; #10 b = c;c = c1; #10 b = c;c = c1; #10 b = c; a = 4b0000;c = 4b0001; b = c;
5、c = c1; #10 b = c;c = c1; #10 b = c;c = c1; #10 b = c; end endmodule /74HC04代码-非/ 74HC04.v module HC04(A, Y); input 3:0 A; output 3:0Y; assign Y = A; endmodule/74HC04测试平台代码/ test_04.v timescale 1ns/1ns module test_04; reg 3:0 a; wire 3:0 y; HC04 u (a, y); initial begin a = 4b0001; #10 a = a1; #10 a
6、= a1; #10 a = a1; end endmodule/74HC08代码-与/ 74HC08.v module HC08(A, B, Y); input 3:0 A, B; output 3:0Y; assign Y = A&B; endmodule/74HC08测试平台代码/ test_08.v timescale 1ns/1ns module test_08; reg 3:0 a,b; wire 3:0 y; HC00 u(a, b, y); initial begin a = 4b0000;b = 4b0001; #10 b = b1; #10 b = b1; #10 b = b
7、1; a = 4b1111;b = 4b0001; #10 b = b1; #10 b = b1; #10 b = b1; end endmodule/74HC32代码-或/74HC32.v module HC32(A, B, Y); input 3:0 A, B; output 3:0Y; assign Y = A|B; endmodule/74HC32测试平台代码/ test_32.v timescale 1ns/1ns module test_32; reg 3:0 a,b,c; wire 3:0 y; HC02 u(a, b, y); initial begin a = 4b1111;
8、c = 4b0001; b = c;c = c1; #10 b = c;c = c1; #10 b = c;c = c1; #10 b = c; a = 4b0000;c = 4b0001;b = c;c = c1; #10 b = c;c = c1; #10 b = c;c = c1; #10 b = c; end endmodule/74HC86代码-异或/74HC86.v module HC86(A, B, Y); input 3:0 A, B; output 3:0Y; assign Y = AB; endmodule/74HC86测试平台代码/ test_86.v timescale
9、 1ns/1ns module test_86; reg 3:0 a, b; wire 3:0 y; HC86 u (a, b, y); initial begin a = 4b0000;b = 4b0001; #10 b = b1; #10 b = b1; #10 b = b1; #10 a = 4b1111;b = 4b0001; #10 b = b1; #10 b = b1; #10 b = b1; end endmodule实验数据:74HC002、第一次仿真结果3、 综合结果4、 第二次仿真结果(综合后)。回答输出信号是否有延迟,延迟时间约为多少?输出信号有延时,延时约为300ps5
10、、第三次仿真结果(布局布线后)。回答输出信号是否有延迟,延迟时间约为多少?分析是否有出现竞争冒险。延时约为3200ps,存在竞争冒险2、组合逻辑电路一、实验目的1、了解基于Verilog的组合逻辑电路的设计及其验证。2、熟悉利用EDA工具进行设计及仿真的流程。3、学习针对实际组合逻辑电路芯片74HC148、74HC138、74HC153、74HC85、74HC283、74HC4511进行VerilogHDL设计的方法。二、实验环境Libero仿真软件。三、实验内容1、掌握Libero软件的使用方法。2、进行针对74系列基本组合逻辑电路的设计,并完成相应的仿真实验。3、参考教材中相应章节的设计代
11、码、测试平台代码(可自行编程),完成74HC148、74HC138、74HC153、74HC85、74HC283、74HC4511相应的设计、综合及仿真。4、74HC85测试平台的测试数据要求:进行比较的A、B两数,分别为本人学号的末两位,如“89”,则A数为“1000”,B数为“1001”。若两数相等,需考虑级联输入(级联输入的各种取值情况均需包括);若两数不等,则需增加一对取值情况,验证A、B相等时的比较结果。5、74HC4511设计成扩展型的,即能显示数字09、字母af。6、提交针对74HC148、74HC138、74HC153、74HC85、74HC283、74HC4511(任选一个)
12、的综合结果,以及相应的仿真结果。四、实验结果和数据处理1、所有模块及测试平台代码清单/74HC148代码module HC148(EI,I,A,GS,EO); input EI; input 7:0I; output 2:0A; output GS,EO; reg 2:0A; reg GS,EO; integer j; always (EI,I)begin if(EI) begin A,GS,EO=5b11111; end else if(I=8b11111111) begin A,GS,EO=5b11110; end else for(j=0;j8;j=j+1) begin if(Ij) b
13、egin A=j; GS=0; EO=1; end end end endmodule /74HC148测试平台代码timescale 1ns/1ns module test_HC148; reg ei; reg 7:0i; wire 2:0a; wire gs,eo; HC148 u1(ei,i,a,gs,eo); initial begin ei=1; #20 ei=0; i=8b11111111; #20 i=8b11111110; #20 i=8b11111101; #20 i=8b11111011; #20 i=8b11110111; #20 i=8b11101111; #20 i=
14、8b11011111; #20 i=8b10111111; #20 i=8b01111111; end endmodule/74HC138代码module HC138(E1,E2,E3,A,Y);input E1,E2,E3; input 2:0 A; output 7:0 Y; reg 7:0 Y; integer I; always(E1,E2,E3,A) begin if(E1=1|E2=1|E3=0) Y=8b11111111; else Y=1b1B) Q=3b100; else if(AB) Q=3b001; else if(I1=1) Q=3b010; else if(I=3b1
15、01) Q=3b000; else if(I=0) Q=3b101; else Q=I; end endmodule/74HC85测试平台代码module test_HC85; reg 3:0a,b; reg 2:0i; wire 2:0q; HC85 u4(a,b,i,q); initial begin i=0; repeat(4) #10 i=$random; end initial begin a=3;b=1; #10 a=1;b=4; #10 a=0;b=0; #10 a=6;b=1; #10 a=5;b=9; end endmodule/74HC283代码module HC283(C
16、IN,A,B,COUT,S); input CIN; input 3:0 A,B; output COUT; output 3:0 S; reg COUT; reg 3:0 S; always(CIN,A,B) begin COUT,S=CIN+A+B; end endmodule/74HC283测试平台代码module test_HC283; reg cin; reg 3:0 a,b; wire cout; wire 3:0 s; HC283 u5(cin,a,b,cout,s); initial begin cin=0; repeat(20) #15 cin=$random; end in
17、itial begin a=0; repeat(20) #10 a=$random; end initial begin b=0; repeat(20) #10 b=$random; end endmodule/74HC4511代码module HC4511(LE,BI,LT,A,Y); input LE,BI,LT; input 3:0 A; output 6:0 Y; reg 6:0 Y; always(LE,BI,LT,A) begin if(!LT) Y=7b1111111; else if(!BI) Y=0; else if(LE) Y=Y; else case (A) 4d0:Y=
18、7b1111110;/数字按abcdefg顺序 4d1:Y=7b0110000; 4d2:Y=7b1101101; 4d3:Y=7b1111001; 4d4:Y=7b0110011; 4d5:Y=7b1011011; 4d6:Y=7b1011111; 4d7:Y=7b1110000; 4d8:Y=7b1111111; 4d9:Y=7b1111011; 4d10:Y=7b1110111; 4d11:Y=7b0011111; 4d12:Y=7b1001110; 4d13:Y=7b0111101; 4d14:Y=7b1001111; 4d15:Y=7b1000111; default:; sendc
19、ase end endmodule/74HC4511测试平台代码module test_HC4511; reg le,bi,lt; reg 3:0 a; wire 6:0 y; HC4511 u6(le,bi,lt,a,y); initial begin lt=0; #10 lt=1; bi=0; #10 bi=1; le=1; #10 le=0; end initial begin a=0; repeat(30) #20 a=$random; end endmodule2、 第一次仿真结果(74HC148)3、 综合结果4、第二次仿真结果(综合后)。回答输出信号是否有延迟,延迟时间约为多少?
20、有延迟,延迟时间约为300秒5、第三次仿真结果(布局布线后)。回答输出信号是否有延迟,延迟时间约为多少?分析是否有出现竞争冒险。有延迟,延迟时间约为4000ps,有竞争冒险3、时序逻辑电路一、实验目的1、了解基于Verilog的时序逻辑电路的设计及其验证。2、熟悉利用EDA工具进行设计及仿真的流程。3、学习针对实际时序逻辑电路芯片74HC74、74HC112、74HC194、74HC161进行VerilogHDL设计的方法。二、实验环境Libero仿真软件。三、实验内容1、熟练掌握Libero软件的使用方法。2、进行针对74系列时序逻辑电路的设计,并完成相应的仿真实验。3、参考教材中相应章节的
21、设计代码、测试平台代码(可自行编程),完成74HC74、74HC112、74HC161、74HC194相应的设计、综合及仿真。4、提交针对74HC74、74HC112、74HC161、74HC194(任选一个)的综合结果,以及相应的仿真结果。四、实验结果和数据处理1、所有模块及测试平台代码清单/74HC74代码module HC74(S1,S2,R1,R2,CLK1,CLK2,D1,D2,Q1,QF1,Q2,QF2); input S1,S2,R1,R2,CLK1,CLK2,D1,D2; output Q1,QF1,Q2,QF2; reg Q1,QF1,Q2,QF2; always(posed
22、ge CLK1) begin if(!S1&R1) begin Q1=1;QF1=0; end else if(S1&!R1) begin Q1=0;QF1=1; end else if(!S1&!R1) begin Q1=1;QF1=1; end else begin Q1=D1;QF1=!D1; end end always(posedge CLK2) begin if(!S2&R2) begin Q2=1;QF2=0; end else if(S1&!R1) begin Q2=0;QF2=1; end else if(!S1&!R1) begin Q2=1;QF2=1; end else
23、 begin Q2=D2;QF2=!D2; end end endmodule/74HC74测试平台代码timescale 1ns/1ns module test_HC74; reg s1,s2,r1,r2,clk1,clk2,d1,d2; wire q1,qf1,q2,qf2; HC74 u1(s1,s2,r1,r2,clk1,clk2,d1,d2,q1,qf1,q2,qf2); initial begin clk1=0; #400 $finish; end always #10 clk1=clk1; initial begin clk2=0; end always #10 clk2=clk
24、2; initial begin s1=0; repeat(20) #20 s1=$random; end initial begin s2=0; repeat(20) #20 s2=$random; end initial begin r1=1; repeat(20) #20 r1=$random; end initial begin r2=1; repeat(20) #20 r2=$random; end initial begin d1=0; repeat(20) #20 d1=$random; end initial begin d2=0; repeat(20) #20 d2=$ran
25、dom; end endmodule/74HC112代码module HC112(S1,S2,R1,R2,CLK1,CLK2,J1,J2,K1,K2,Q1,QF1,Q2,QF2); input S1,S2,R1,R2,CLK1,CLK2,J1,J2,K1,K2; output Q1,QF1,Q2,QF2; reg Q1,Q2; assign QF1=Q1; assign QF2=Q2; always(negedge CLK1,negedge S1,negedge R1) begin if(!S1&R1) Q1=1; else if(S1&!R1) Q1=0; else if(!S1&!R1)
26、Q1=1; else case(J1,K1) 2b00:Q1=Q1; 2b01:Q1=0; 2b10:Q1=1; 2b11:Q1=Q1; endcase end always(negedge CLK2,negedge S2,negedge R2) begin if(!S2&R2) Q2=1; else if(S2&!R2) Q2=0; else if(!S2&!R2) Q2=1; else case(J2,K2) 2b00:Q2=Q2; 2b01:Q2=0; 2b10:Q2=1; 2b11:Q2=Q2; endcase end endmodule/74HC112测试平台代码timescale
27、1ns/1ns module test_HC112; reg s1,s2,r1,r2,clk1,clk2,j1,j2,k1,k2; wire q1,qf1,q2,qf2; HC112 u1(s1,s2,r1,r2,clk1,clk2,j1,j2,k1,k2,q1,qf1,q2,qf2); initial begin clk1=0; end always #10 clk1=clk1; initial begin s1=0; repeat(20) #20 s1=$random; end initial begin r1=0; repeat(20) #20 r1=$random; end initial begin j1=0; repeat(20) #20 j1=$random; end initial begin k1=0; repeat(20) #20 k1=$random; end initial begin clk2=0; end always #10 clk2=clk2; initial begin s2=0; repeat(20) s2=$random; end initial begin r2=0; repeat(20) #20 r2=$random; end initial begin j2=0; repeat(20) #20 j2=$