基于Libero的数字逻辑设计仿真及验证实验实验报告-eda 下载本文

有延迟,延迟时间约为4000ps。有竞争冒险。

16

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 HC74(SDN,RDN,Clk,D,Q,QN); input SDN,RDN,Clk,D; output Q,QN; reg Q;

assign QN=~Q;

always @(posedge Clk or negedge SDN or negedge RDN) begin

if((!SDN)&&RDN) Q<=1; else if(SDN&&(!RDN)) Q<=0; else if(SDN&&RDN) Q<=D; end

endmodule

//74HC74测试平台代码 `timescale 1ns/1ns

17

module testbench; reg SDN,RDN,Clk,D; wire Q,QN;

HC74 testbench1(SDN,RDN,Clk,D,Q,QN);

parameter clock_period=20;

always #(clock_period/2) Clk=~Clk; initial begin

D=0;Clk=0; repeat(20)

#20 D=$random; end initial begin SDN=0; repeat(20)

#20 SDN=$random; end initial begin RDN=0; repeat(20)

#20 RDN=$random; end initial

#300 $finish; endmodule

//74HC112代码

module HC112(J,K,Clk,SDN,RDN,Q,Qn); input J,K,Clk,SDN,RDN; output Q,Qn; reg Q;

assign Qn=~Q;

always @(negedge Clk or negedge SDN or negedge RDN) begin

if((!SDN)&&RDN) Q<=1`b1; else if(SDN&&!RDN)) Q<=1`b0; else if(SDN&&RDN)) case({J,K}) 2`b00:Q<=Q;

18

2`b01:Q<=1`b0; 2`b10:Q<=1`b1; 2`b11:Q<=~Q; default: Q<=1`bx; endcase end

endmodule

//74HC112测试平台代码 `timescale 1ns/1ns module testbench;

reg J,K,Clk,SDN,RDN; wire Q,Qn;

HC112 testbench112(J,K,Clk,SDN,RDN,Q,Qn); parameter clock_period=20;

always #(clock_period/2) Clk=~Clk; initial begin

J=0;K=0;Clk=1; #10 J=1; #10 K=1; #10 J=0;#10; end initial begin

SDN=0;RDN=1; #10 RDN=0; #10 SDN=1; #10 RDN=1;#10; end

endmodule

//74HC161代码

module HC161(CP,CEP,CET,MRN,PEN,Dn,Qn,TC); input CP,CEP,CET,MRN,PEN; input [3:0]Dn; output [3:0]Qn; output TC; reg [3:0]Qn; reg TC;

always @(posedge CP) begin

if(!MRN) Qn<=4`b0000;

19