1:diff_term表示pn端之间的100欧姆电阻。
2:差分时钟如果不是经rcc管脚进入的建议用IBUFGDS原语,如果是由rcc管脚进入的用IBUFDS也无所谓(实测9361)
3:经过IBUFDS或者IBUFGDS出来的时钟可以不用加BUFG,因为编译器会默认加上(实际通过sch观察的)。
//1
IBUFDS #(
.DIFF_TERM ("TRUE"), // Differential Termination
.IBUF_LOW_PWR ("FALSE"), // Low power="TRUE", Highest performance="FALSE"
//.IOSTANDARD ("LVDS_25") // Specify the input I/O standard
.IOSTANDARD ("LVDS") // Specify the input I/O standard
)
u_clkds
(
.I (i_ad_clk_p),
.IB (i_ad_clk_n),
.O (adclk_int)
);
//2
BUFR
#(.SIM_DEVICE("7SERIES"),
.BUFR_DIVIDE("BYPASS"))
clkout_buf_inst
( .O (adclk_bufg),
.CE(),
.CLR(),
.I (adclk_int)
//.I (adclk_dly)
);
//3
BUFG u_clkbufg
(
.I (adclk_bufg),
.O (adclk_gclk)
);
相关知识点:
BUFR是区域时钟缓冲器,要进入区域时钟网络,必须例化BUFR
ibuf是输入缓冲器,用于将外部输入的时钟信号进行缓冲和放大;---一般通过pin进入后编译器会默认加上。
bufg是全局缓冲器,用于将经过ibuf缓冲的时钟信号进行进一步的放大和分配
4.实测——输入pcie硬核的差分时钟经过IBUFDS_GTE2,出来后不能直接驱动ila(布线报错),需经过bufg在给ila(才不会报错)——这一点存疑(因为在bd里面同样不经过bufg也没报错)——推断应该和布线资源的消耗有关系,如果报错了就按报错的推荐加bufg。
IBUFDS_GTE2原语————进入GT的两个差分时钟必须要使用该原语,才能给ip核使用。
IBUFDS_GTE2 #(
.CLKCM_CFG("TRUE"), // Refer to Transceiver User Guide
.CLKRCV_TRST("TRUE"), // Refer to Transceiver User Guide
.CLKSWING_CFG(2'b11) // Refer to Transceiver User Guide
)
IBUFDS_GTE2_inst (
.O(O), // 1-bit output: Refer to Transceiver User Guide
.ODIV2(ODIV2), // 1-bit output: Refer to Transceiver User Guide
.CEB(CEB), // 1-bit input: Refer to Transceiver User Guide
.I(I), // 1-bit input: Refer to Transceiver User Guide
.IB(IB) // 1-bit input: Refer to Transceiver User Guide
);

5:HR是没有odelay2的如下图

十:
十一:
idelay_ctrl里面的RDY信号不能进Ila,否则综合会报错——实测确实。
十二:
delay_resolution=1/(32 * 2 * f) =78.125ps
delay_time=600ps + tap * delay_resolution
十三:一般需要结合pcb布线延时来调整(一般保持在5mil之内的延时都还好),采样率越高越不容易调整(建立时间和保持时间越不能保证)

十四:如果要对 P N管脚进来的信号做延时,是分别对p n先用idelay 后,延时之后在用ibufdes。
本文详细介绍了Xilinx FPGA中时钟管理的关键技术,包括全局时钟与区域时钟的区别、各种时钟缓冲器的作用与配置方法,以及差分时钟的处理方式。通过具体的Verilog代码示例,展示了如何实现时钟信号的正确驱动。




被折叠的 条评论
为什么被折叠?



