这里以Artix-7芯片为例,这里以200M时钟延迟为例,其它频率的时钟计算方式和这个一样,IDELAY_VALUE可以设置0~31,如果设置为0默认为600ps,每个tap为78ps,一共0~31tap总共为32个tap,延迟时间计算方式600ps+N*78ps,最大延迟时间为600ps+31*78 =3018ps(N=0~31)
调用idelay
选择Tools-->Language Templates
可以看到Artix-7下面有两个原语,都复制我们的仿真文件里
两个原语复制到仿真文件里
更改后的仿真文件
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2023/01/01 16:40:37
// Design Name:
// Module Name: test_tb
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module test_tb();
reg clk_50M;
reg clk_200M;
reg i_rst_n;
initial begin
clk_50M = 1'b0;
clk_200M = 1'b0;
i_rst_n = 1'b0;
#110
i_rst_n = 1'b1;
end
always #10 clk_50M = ~clk_50M;
always #2.5 clk_200M = ~clk_200M;
wire clk_50M_buf;
IDELAYCTRL IDELAYCTRL_inst (
.RDY(), // 1-bit output: Ready output
.REFCLK(clk_200M), // 1-bit input: Reference clock input
.RST(!i_rst_n) // 1-bit input: Active high reset input
);
IDELAYE2 #(
.CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE)
.DELAY_SRC("IDATAIN"), // Delay input (IDATAIN, DATAIN)
.HIGH_PERFORMANCE_MODE("FALSE"), // Reduced jitter ("TRUE"), Reduced power ("FALSE")
.IDELAY_TYPE("FIXED"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
.IDELAY_VALUE(0), // Input delay tap setting (0-31)
.PIPE_SEL("FALSE"), // Select pipelined mode, FALSE, TRUE
.REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-310.0).
.SIGNAL_PATTERN("DATA") // DATA, CLOCK input signal
)
IDELAYE2_inst (
.CNTVALUEOUT(), // 5-bit output: Counter value output
.DATAOUT(clk_50M_buf), // 1-bit output: Delayed data output
.C(clk_200M), // 1-bit input: Clock input
.CE(1'b0), // 1-bit input: Active high enable increment/decrement input
.CINVCTRL(1'b0), // 1-bit input: Dynamic clock inversion input
.CNTVALUEIN(5'd0), // 5-bit input: Counter value input
.DATAIN(1'b0), // 1-bit input: Internal delay data input
.IDATAIN(clk_50M), // 1-bit input: Data input from the I/O
.INC(1'b0), // 1-bit input: Increment / Decrement tap delay input
.LD(1'b1), // 1-bit input: Load IDELAY_VALUE input
.LDPIPEEN(1'b0), // 1-bit input: Enable PIPELINE register to load data input
.REGRST(!i_rst_n) // 1-bit input: Active-high reset tap-delay input
);
endmodule
IDELAY_VALUE设置为0时,可以看到输入的clk_50M输出为clk_50M_buf时钟被延迟了0.6ns,也就是600ps
IDELAY_VALUE设置为5,可以看到延迟了0.99ns也就是990ps,计算方式为600ps+78*5=990ps
IDELAY_VALUE设置为15,可以看到延迟了1.77ns也就是1770ps,计算方式为600ps+78*15=1770ps
IDELAY_VALUE设置为31最大值,可以看到延迟了3.018ns也就是3018ps,计算方式为600ps+78*31=3018ps
仿真中的延迟值差不多是这样计算,但实际的值需以具体测量延迟值为准