有延迟,延迟时间约为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