收藏 分销(赏)

EDA实验报告.doc

上传人:快乐****生活 文档编号:4754098 上传时间:2024-10-12 格式:DOC 页数:41 大小:1.23MB 下载积分:12 金币
下载 相关 举报
EDA实验报告.doc_第1页
第1页 / 共41页
EDA实验报告.doc_第2页
第2页 / 共41页


点击查看更多>>
资源描述
计算机 学院 计算机科学与技术 专业 1班____组、学号 姓名协作者______________ 教师评定_________________ 实验题目_________基于Libero的数字逻辑设计仿真及验证实验_________ 1、 熟悉EDA工具的使用;仿真基本门电路。 2、 仿真组合逻辑电路。 3、 仿真时序逻辑电路。 4、 基本门电路、组合电路和时序电路的程序烧录及验证。 5、 数字逻辑综合设计仿真及验证。 实验报告 1、基本门电路 一、实验目的 1、了解基于Verilog的基本门电路的设计及其验证。 2、熟悉利用EDA工具进行设计及仿真的流程。 3、学习针对实际门电路芯片74HC00、74HC02、74HC04、74HC08、74HC32、74HC86进行VerilogHDL设计的方法。 二、实验环境 Libero仿真软件。 三、实验内容 1、掌握Libero软件的使用方法。 2、进行针对74系列基本门电路的设计,并完成相应的仿真实验。 3、参考教材中相应章节的设计代码、测试平台代码(可自行编程),完成74HC00、74HC02、74HC04、74HC08、74HC32、74HC86相应的设计、综合及仿真。 4、提交针对74HC00、74HC02、74HC04、74HC08、74HC32、74HC86(任选一个)的综合结果,以及相应的仿真结果。 四、实验结果和数据处理 1、所有模块及测试平台代码清单 //74HC00代码-与非 module HC00(A,B,Y); input [4:1]A,B; output [4:1]Y; assign Y=~(A&B);//与非 endmodule //74HC00测试平台代码 `timescale 1ns/1ns module testbench(); reg [4:1] a,b; wire [4:1] y; HC00 u1(a,b,y); initial begin a=4'b0000;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; a=4'b1111;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; end endmodule //74HC02代码-或非 module HC02(A,B,Y); input [4:1]A,B; output [4:1]Y; assign Y=~(A|B);//或非 endmodule //74HC02测试平台代码 `timescale 1ns/1ns module testbench(); reg [4:1] a,b; wire [4:1] y; HC00 u1(a,b,y); initial begin a=4'b0000;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; a=4'b1111;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; end endmodule //74HC04代码-非 module HC04(A,Y); input [4:1]A; output [4:1]Y; assign Y=~A; endmodule //74HC04测试平台代码 `timescale 1ns/1ns module testbench(); reg [4:1] a,b; wire [4:1] y; HC00 u1(a,b,y); initial begin a=4'b0000;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; a=4'b1111;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; end endmodule //74HC08代码-与 module HC08(A,B,Y); input [4:1]A,B; output [4:1]Y; assign Y=A&B; endmodule //74HC08测试平台代码`timescale 1ns/1ns module testbench(); reg [4:1] a,b; wire [4:1] y; HC00 u1(a,b,y); initial begin a=4'b0000;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; a=4'b1111;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; end endmodule //74HC32代码-或 module HC32(A,B,Y); input [4:1]A,B; output [4:1]Y; assign Y=A|B; endmodule //74HC32测试平台代码 `timescale 1ns/1ns module testbench(); reg [4:1] a,b; wire [4:1] y; HC00 u1(a,b,y); initial begin a=4'b0000;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; a=4'b1111;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; end endmodule //74HC86代码-异或 module HC86(A,B,Y); input [4:1]A,B; output [4:1]Y; assign Y=A^B; endmodule //74HC86测试平台代码 `timescale 1ns/1ns module testbench(); reg [4:1] a,b; wire [4:1] y; HC00 u1(a,b,y); initial begin a=4'b0000;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; a=4'b1111;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1; end endmodule 2、第一次仿真结果(任选一个门,请注明,插入截图,下同)。(将波形窗口背景设为白色,调整窗口至合适大小,使波形能完整显示,对窗口截图。后面实验中的仿真使用相同方法处理) 选用门电路为:与非门。 3、综合结果(截图)。(将相关窗口调至合适大小,使RTL图能完整显示,对窗口截图,后面实验中的综合使用相同方法处理) 4、第二次仿真结果(综合后)(截图)。回答输出信号是否有延迟,延迟时间约为多少? 输出信号有延迟,延迟时间约为0.7ns 5、第三次仿真结果(布局布线后)(截图)。回答输出信号是否有延迟,延迟时间约为多少?分析是否有出现竞争冒险。 延迟时间约为38ns,由于信号输出经过或门与非门后产生了输出延迟,出现了竞争冒险。 2、组合逻辑电路 一、实验目的 1、了解基于Verilog的组合逻辑电路的设计及其验证。 2、熟悉利用EDA工具进行设计及仿真的流程。 3、学习针对实际组合逻辑电路芯片74HC148、74HC138、74HC153、74HC85、74HC283、74HC4511进行VerilogHDL设计的方法。 二、实验环境 Libero仿真软件。 三、实验内容 1、掌握Libero软件的使用方法。 2、进行针对74系列基本组合逻辑电路的设计,并完成相应的仿真实验。 3、参考教材中相应章节的设计代码、测试平台代码(可自行编程),完成74HC148、74HC138、74HC153、74HC85、74HC283、74HC4511相应的设计、综合及仿真。 4、74HC85测试平台的测试数据要求:进行比较的A、B两数,分别为本人学号的末两位,如“89”,则A数为“1000”,B数为“1001”。若两数相等,需考虑级联输入(级联输入的各种取值情况均需包括);若两数不等,则需增加一对取值情况,验证A、B相等时的比较结果。 5、74HC4511设计成扩展型的,即能显示数字0~9、字母a~f。 6、提交针对74HC148、74HC138、74HC153、74HC85、74HC283、74HC4511(任选一个)的综合结果,以及相应的仿真结果。 四、实验结果和数据处理 1、所有模块及测试平台代码清单 //74HC148代码 module HC148(DataIn, EO, Dataout); input[7:0] DataIn; output EO; output[2:0] Dataout; reg[2:0] Dataout; reg EO; integer I; always @(DataIn) begin Dataout = 0; EO = 1; for (I = 0; I < 8; I = I + 1) begin if (DataIn[I]) begin Dataout = I; EO = 0; end end end endmodule //74HC148测试平台代码 `timescale 1ns / 1ns module test148; reg[7:0] in; wire[2:0] out; wire EO; initial begin in = 00000001; repeat(9) #20 in = in << 1; end HC148 u148(in, EO, out); endmodule //74HC138代码 module decoder138(Din, Enable, Eq); input[2:0] Din; input Enable; output[7:0] Eq; reg[7:0] Eq; wire[2:0]Din; integer I; always @ (Din or Enable) begin if (Enable) Eq = 0; else for (I = 0; I <= 7; I = I + 1) if (Din == I) Eq[I] = 1; else Eq[I] = 0; end endmodule //74HC138测试平台代码 `timescale 1ns / 1ns module testbench; reg[2:0]Din; reg enable; wire[7:0]dataout; initial #400 $finish; initial begin enable = 1; #40 enable = 0; end initial begin repeat(20) #20 dataIn = $random; end decoder138 test(Din, enable, dataout); //74HC153代码 module mux4_1_a(D0, D1, D2, D3, Sel0, Sel1, Result); input D0, D1, D2, D3; input Sel0, Sel1; output Result; reg Result; always @(D0 or D1 or D2 or D3 or Sll or Sel0) begin case({ Sel1,Sel0 }) 0: Result = D0; 1 : Result = D1; 2 : Result = D2; 3 : Result = D3; default: Result = 1`bx; endcase end endmodule //74HC153测试平台代码 `timescale 1ns / 1ps module testbench_4mux_1; reg D0, D1, D2, D3, Sel1, Sel0; wire Result; mux4_1_a DUT(D0, D1, D2, D3, Sel1, Sel0, Result); initial begin D0 = 0; D1 = 0; D2 = 0; D3 = 0; Sel1 = 0; Sel0 = 0; #100 D0 = 1; D1 = 0; D2 = 0; D3 = 1; #100 Sel1 = 0; Sel0 = 1; #100 Sel1 = 1; Sel0 = 0; #100 Sel1 = 1; Sel0 = 1; #100; end endmodule //74HC85代码 module HC85(A3, A2, A1, A0, B3, B2, B1, B0, QAGB, QASB, QAEB, IAGB, IASB, IAEB); input A3, A2, A1, A0, B3, B2, B1, B0, IAGB, IASB, IAEB; output QAGB, QASB, QAEB; reg QAGB, QASB, QAEB; wire[3:0]DataA, DataB; assign DataA[0] = A0; assign DataA[1] = A1; assign DataA[2] = A2; assign DataA[3] = A3; assign DataB[0] = B0; assign DataB[1] = B1; assign DataB[2] = B2; assign DataB[3] = B3; always @(DataA or DataB) begin if (DataA > DataB) begin QAGB = 1; QASB = 0; QAEB = 0; end else if (DataA < DataB) begin QASB = 1; QAGB = 0; QAEB = 0; end else if (IAGB&!IASB&!IAEB) begin QAGB = 1; QASB = 0; QAEB = 0; end else if (!IAGB&IASB&!IAEB) begin QASB = 1; QAGB = 0; QAEB = 0; end else if (IAEB) begin QAEB = 1; QASB = 0; QAGB = 0; end begin if (DataA == DataB) if (IAGB&IASB&!IAEB) begin QAGB = 0; QASB = 0; QAEB = 0; end if (!IAGB&!IASB&!IAEB) begin QAGB = 1; QASB = 1; QAEB = 0; end end end endmodule //74HC85测试平台代码 `timescale 1ns / 1ns module test85; reg A3, A2, A1, A0, B3, B2, B1, B0; reg IAGB, IASB, IAEB; wire QAGB, QASB, QAEB; initial begin A3 = 0; repeat(20) #20 A3 = $random; end initial begin A2 = 0; repeat(20) #20 A2 = $random; end initial begin A1 = 0; repeat(20) #20 A1 = $random; end initial begin A0 = 0; repeat(20) #20 A0 = $random; end initial begin B3 = 0; repeat(20) #20 B3 = $random; end initial begin B2 = 0; repeat(20) #20 B2 = $random; end initial begin B1 = 0; repeat(20) #20 B1 = $random; end initial begin B0 = 0; repeat(20) #20 B0 = $random; end initial begin IAGB = 0; repeat(10) #40 IAGB = $random; end initial begin IASB = 0; repeat(10) #40 IASB = $random; end initial begin IAEB = 0; repeat(10) #40 IAEB = $random; end HC85 u85 ( .A3(A3), .A2(A2), .A1(A1), .A0(A0), .B3(B3), .B2(B2), .B1(B1), .B0(B0), .IAGB(IAGB), .IASB(IASB), .IAEB(IAEB), .QAGB(QAGB), .QASB(QASB), .QAEB(QAEB) ); endmodule //74HC283代码 module HC283(A, B, Cin, Sum, Cout); parameter N = 4; input[N - 1:0] A, B; input Cin; output[N - 1:0] Sum; reg[N - 1:0] Sum; output Cout; reg Cout; reg[N:0] q; always @ (A or B or Cin) begin:adder integer i; q[0] = Cin; for (i = 0; i <= N; i = i + 1) begin q[i + 1] = (A[i] & B[i]) | (A[i] & q[i]) | (B[i] & q[i]); Sum[i] = A[i] ^ B[i] ^ q[i]; end Cout = q[N]; end endmodule //74HC283测试平台代码 `timescale 1ns / 10ps module testbench; reg[3:0] ina, inb; reg cin; wire[3:0] sum; wire cout; HC283 testbench283(ina, inb, cin, sum, cout); initial begin ina = 0; repeat(20) #20 ina = $random; end initial begin inb = 0; repeat(10) #40 inb = $random; end initial begin cin = 0; #200 cin = 1; end endmodule //74HC4511代码 module HC4511(A, Seg, LT_N, BI_N, LE); input LT_N, BI_N, LE; input[3:0]A; output[7:0]Seg; reg[7:0]SM_8S; assign Seg = SM_8S; always @ (A or LT_N or BI_N or LE) begin if (!LT_N) SM_8S = 8'b11111111; else if (!BI_N) SM_8S = 8'b00000000; else if (LE) SM_8S = SM_8S; else case(A) 4'd0:SM_8S=8'b00111111; 4'd1:SM_8S=8'b00000110; 4'd2:SM_8S=8'b01011011; 4'd3:SM_8S=8'b01001111; 4'd4:SM_8S=8'b01100110; 4'd5:SM_8S=8'b01101101; 4'd6:SM_8S=8'b01111101; 4'd7:SM_8S=8'b00000111; 4'd8:SM_8S=8'b01111111; 4'd9:SM_8S=8'b01101111; 4'd10:SM_8S=8'b01110111; 4'd11:SM_8S=8'b01111100; 4'd12:SM_8S=8'b00111001; 4'd13:SM_8S=8'b01011110; 4'd14:SM_8S=8'b01111001; 4'd15:SM_8S=8'b01110001; default:; endcase end endmodule //74HC4511测试平台代码 `timescale 1ns / 10ps module testbench; reg[3:0] a; reg lt_n, bi_n, le; wire[7:0] seg; HC4511 hc4511(a, seg, lt_n, bi_n, le); initial begin a = 0; lt_n = 1; bi_n = 1; le = 0; #30 a = 4'b0001; #30 a = 4'b1000; #30 a = 4'b0111; #30 a = 4'b1010; #30 a = 4'b0101; #30 le = 1; #30 bi_n = 0; #30 lt_n = 0; #20; end endmodule 2、第一次仿真结果(任选一个模块,请注明) 所选择模块:74HC85 3、综合结果 4、第二次仿真结果(综合后)。回答输出信号是否有延迟,延迟时间约为多少? 6、 第三次仿真结果(布局布线后)。回答输出信号是否有延迟,延迟时间约为多少?分析是否有出现竞争冒险。 延迟4.7ns,出现竞争冒险 3、时序逻辑电路 一、实验目的 1、了解基于Verilog的时序逻辑电路的设计及其验证。 2、熟悉利用EDA工具进行设计及仿真的流程。 3、学习针对实际时序逻辑电路芯片74HC74、74HC112、74HC194、74HC161进行VerilogHDL设计的方法。 二、实验环境 Libero仿真软件。 三、实验内容 1、熟练掌握Libero软件的使用方法。 2、进行针对74系列时序逻辑电路的设计,并完成相应的仿真实验。 3、参考教材中相应章节的设计代码、测试平台代码(可自行编程),完成74HC74、74HC112、74HC161、74HC194相应的设计、综合及仿真。 4、提交针对74HC74、74HC112、74HC161、74HC194(任选一个)的综合结果,以及相应的仿真结果。 四、实验结果和数据处理 1、所有模块及测试平台代码清单 //74HC74代码 module d_ff (Set,Reset,Clk,D,Q); input Set,Reset,Clk,D; output Q; reg Q; always @(posedge Clk or negedge Reset or negedge Set) begin if(!Reset) begin if(!Set)Q<=D; else Q<=1; end else if(!Set) Q<=0; end endmodule //74HC74测试平台代码 `timescale 1ns/1ns module testbench; reg D,Reset,Set,Clk; wire Q; d_ff testbench_dff(D,Clk,Q,Set,Reset); initial begin Clk =0; #400 $finish; end parameter clock_period=20; always#(clock_period/2)Clk=~Clk; initial begin D=0; repeat(20) #20 D=$random; end initial begin Reset=0; repeat(20) #20 Reset=$random; end initial begin Set=0; repeat(20) #20 Set=$random; end endmodule //74HC112代码 module jk_ff(J,K,Clk,Q,Qn); input J,K,Clk; output Q,Qn; reg Q; assign Qn=~Q; always @ (posedge Clk) case({J,K}) 2'b00:Q<=Q; 2'b01:Q<=1'b0; 2'b10:Q<=1'b1; 2'b11:Q<=~Q; default:Q<=1'bx; endcase endmodule //74HC112测试平台代码 `timescale 1ns/1ns module testbench; reg j,k,Clk; wire Q,Qn; parameter clock_period=20; always #(clock_period/2) Clk=~Clk; initial begin j=0;Clk=0; repeat(20) #20 j=$random; end initial begin k=0; repeat(20) #20 k=$random; end initial #300 $finish; jk_ff testbench_jk(j,k,Clk,Q,Qn); endmodule //74HC161代码 module HC161(CP,CEP,CET,MRN,PEN,Dn,Qn,TC); input CP; input CEP,CET; output[3:0] Qn; input MRN,PEN; input[3:0] Dn; output TC; reg[3:0] qaux; reg TC; always @ (posedge CP) begin if(!MRN) qaux<=4'b0000; else if(!PEN) qaux<=Dn; else if(CEP&CET) qaux<=qaux+1; else qaux<=qaux; end always @ (posedge CP) begin if(qaux==4'b1111 && CET==1) TC=1'b1; else TC=1'b0; end assign Qn=qaux; endmodule //74HC161测试平台代码 `timescale 1ns/1ns module testbench; reg cp,cep,cet,mrn,pen; reg[3:0] dn; wire tc; wire[3:0] qn; parameter DELY=20; always #(DELY/2) cp=~cp; initial begin cep=1; repeat(15) #DELY cet=$random; end initial begin pen=1; #DELY pen=0; #60 pen=1; end initial begin mrn=1; repeat(20) #15 mrn=$random; end initial #300 $finish; HC161 test(cp,cep,cet,mrn,pen,dn,qn,tc); endmodule //74HC194代码 module HC194(Data,Enable,Shiften,Shiftin,Aclr,Clock,Shiftout); input[3:0] Data; input Aclr; input Enable; input Shiften; input Shiftin; input Clock; output Shiftout; reg[3:0] Qaux; always @ (posedge Aclr or posedge Clock) begin if(Aclr) Qaux=0; else if(Enable) Qaux=Data; else if(Shiften) Qaux={Qaux[2:0],Shiftin}; end assign Shiftout=Qaux[3]; endmodule //74HC194测试平台代码 `timescale 1ns/1ns module testbench; reg[3:0] Data; reg Aclr,Enable,Shiften,Shiftin,Clock; wire Shiftout; parameter clock_period=20; always #(clock_period/2) Clock=~Clock; initial #400 $finish; initial begin Data=0; repeat(20) #20 Data=$random; end initial begin Clock=0; Aclr=0; #40 Aclr=1; #100 Aclr=0; end initial begin Enable=0; #100 Enable=1; #100 Enable=0; end initial begin Shiften=0; repeat(20) #20 Shiften=$random; end initial begin Shiftin=0; repeat(10) #40 S
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服