Clock groups ignored by Timing analyzer
Hi all,
I have a design with multiple clock domains. I want to ignore the timing checks for the paths where CDC happens. For this purpose, I have set clock groups in my sdc file, code can be found below. What I noticed after compiling the design on Quartus Pro 21.3 is that the compiler still checks for the timing between the clock domains, therefore I'm getting setup violations. I attached a snippet where I can see that the path between these clocks are not set as false paths. Do you guys know what I'm doing wrong here ?
set_clock_groups \ -group [get_clocks { clk_25mhz_fpga }] \ -group [get_clocks { sg_clk }] \ -group [get_clocks { blk_clk_n_rst.i_pll_sys|iopll_0|outclk0 }] \ -group [get_clocks { i_max|ddr4|ddr4_phy_clk_0 \ i_max|ddr4|ddr4_phy_clk_l_0 \ i_max|ddr4|ddr4_wf_clk_0 \ i_max|ddr4|ddr4_wf_clk_1 \ i_max|ddr4|ddr4_wf_clk_2 }] \ -group [get_clocks { i_max|ddr4|ddr4_phy_clk_1 \ i_max|ddr4|ddr4_phy_clk_l_1 \ i_max|ddr4|ddr4_wf_clk_3 \ i_max|ddr4|ddr4_wf_clk_4 \ i_max|ddr4|ddr4_wf_clk_5 \ i_max|ddr4|ddr4_wf_clk_6 }] \ -group [get_clocks { i_max|fpga_emif_ddr4|fpga_emif_ddr4_phy_clk_0 \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_phy_clk_l_0 \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_wf_clk_0 \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_wf_clk_1 \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_wf_clk_2 \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_wf_clk_6 \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_core_usr_clk \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_phy_clk_1 \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_phy_clk_l_1 \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_wf_clk_3 \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_wf_clk_4 \ i_max|fpga_emif_ddr4|fpga_emif_ddr4_wf_clk_5 }] \ -group [get_clocks { i_max|rx_phy_0|rx_phy_0|rx_clkout \ i_max|rx_phy_1|rx_phy_1|rx_clkout \ i_max|rx_phy_2|rx_phy_2|rx_clkout \ i_max|rx_phy_3|rx_phy_3|rx_clkout \ i_max|rx_phy_4|rx_phy_4|rx_clkout \ i_max|rx_phy_5|rx_phy_5|rx_clkout }] \ -group [get_clocks { clk_xcvr_1f \ i_teng_io_pll|iopll_0|outclk0 \ i_teng_io_pll|iopll_0|outclk1 }] \ -asynchronous
The issue was that the .sdc file was read before all the other .ip files are read in the .qsf file. When I moved the line to read the .sdc file after reading the .ip files, the issue is gone, and I can see false paths set in the report for clock transfers. This issue was also mentioned in this article here. In case the link becomes broken in the future, I attach a screenshot of the link content below.