这里以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
仿真中的延迟值差不多是这样计算,但实际的值需以具体测量延迟值为准
没有回复内容