本文参考自高亚军老师的《AMD FPGA设计优化宝典》
首先哪些因此会导致时钟skew过大呢?
在时序报告中,会显示出clock path skew,如果时钟偏移超过0.5ns,就需要额外关注了。
img_v3_028t_b69c5ae2-70d4-4115-8dba-f17176b1b27g
书中列举了几个优化skew的方法:
image-20240312225134442
如果BUFGCE和两个MMCM位于同列相邻的时钟区域,那么应为约束为SAME_CMT_COLUMN或BACKBONE,同时将MMCM的位置固定下来:
# FOR UltraScale/UltraScale+
set_property CLOCK_DEDICATED_ROUTE SAME_CMT_COLUMN [get_nets -of [get_pins BUFG_inst/O]]
# FOR 7 series
set_property CLOCK_DEDICATED_ROUTE BACKBONE [get_nets -of [get_pins BUFG_inst/O]]
set_property LOC MMCM3_ADV_X1Y2 [get_cells MMCM3_ADV_inst_0]
set_property LOC MMCM3_ADV_X1Y0 [get_cells MMCM3_ADV_inst_1]
image-20240312225611134
如果BUFGCE和两个MMCM位于不同列但相邻的时钟区域,那么应该设为ANY_CMT_COLUMN和FALSE。
# FOR UltraScale/UltraScale+
set_property CLOCK_DEDICATED_ROUTE ANY_CMT_COLUMN [get_nets -of [get_pins BUFG_inst/O]]
# FOR 7 series
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets -of [get_pins BUFG_inst/O]]
set_property LOC MMCM3_ADV_X1Y2 [get_cells MMCM3_ADV_inst_0]
set_property LOC MMCM3_ADV_X1Y0 [get_cells MMCM3_ADV_inst_1]
image-20240312225704903