需求描述:XB_HIGH_IN输入下降沿时,H_Trig_OUT立即输出一个负脉冲
仿真结果:H_Trig_OUT输出的波形有4个clk的延时,求大神指教是什么导致了这4个clk的延迟
程序代码:
module TESTCODE(
input XB_HIGH_IN,
input clk,
input rst,
output reg H_Trig_OUT
);
parameter T100us = 12'd3;
reg H_fir,H_sec;
reg H_change_trig;
reg H_vld;
reg [11:0]H_count;
always@(posedge clk or negedge rst)
if(!rst)
begin
H_fir<=1'b1;
H_sec<=1'b1;
H_change_trig<=1'b0;
end
else
begin
H_fir<=XB_HIGH_IN;
H_sec<=H_fir;
H_change_trig<=~H_fir&H_sec;//下降沿
End
//输出负脉冲
always @(posedge clk or negedge rst)
if(!rst)
begin
H_count<=12'd0;
H_vld<=1'b0;
H_Trig_OUT<=1'b1;
end
else
begin
if(H_change_trig==1'b1)H_vld<=1'b1;
if(H_vld==1'b1)
begin
H_count<=H_count+1'b1;
H_Trig_OUT<=1'b0;
if(H_count==T100us)
begin
H_count<=12'd0;
H_vld<=1'b0;
H_Trig_OUT<=1'b1;
end
end
end
endmodule
测试代码:
module test;
// Inputs
reg XB_HIGH_IN;
reg clk;
reg rst;
// Outputs
wire H_Trig_OUT;
// Instantiate the Unit Under Test (UUT)
TESTCODE uut (
.XB_HIGH_IN(XB_HIGH_IN),
.clk(clk),
.rst(rst),
.H_Trig_OUT(H_Trig_OUT)
);
parameter period =250;///////40MHZ
initial begin
// Initialize Inputs
XB_HIGH_IN = 1;
clk = 0;
rst = 0;
// Wait 100 ns for global reset to finish
#100;
rst = 1;
// Add stimulus here
forever begin
#(period/2);
clk=~clk;
end
end
initial begin
forever begin
#(period*20);
XB_HIGH_IN<=1'b1;
#(period*20);
XB_HIGH_IN<=1'b0;
end
end
endmodule
仿真波形图:
我要赚赏金
