Article ID: 000087898 Content Type: Troubleshooting Last Reviewed: 11/18/2024

Why are my PLL clocks not derived correctly in Timing Analyzer?

Environment

  • Intel® Quartus® Prime Pro Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Description

    In the Quartus® Prime Pro Edition Software, you may see that the phase-locked loop (PLL) clocks are not correctly derived when the PLL reference clock has multiple master clocks. This occurs because the Timing Analyzer cannot identify which of the multiple master clocks should be used.

    You might see the warning messages shown below in the Timing Analyzer when the clock scheme is as follows:

    Warning(332036): Clock: clk0 found as a potential master clock candidate 
    Warning(332036): Clock: clk1 found as a potential master clock candidate 
    Warning(332087): The master clock for this clock assignment could not be derived.  Clock: u0_pll450m|iopll_0_n_cnt_clk was not created. 
    Warning(332036): Clock: clk0 found as a potential master clock candidate 
    Warning(332036): Clock: clk1 found as a potential master clock candidate 
    Warning(332087): The master clock for this clock assignment could not be derived.  Clock: u0_pll450m|iopll_0_m_cnt_clk was not created. 
    Warning(332036): Clock: clk0 found as a potential master clock candidate 
    Warning(332036): Clock: clk1 found as a potential master clock candidate 
    Warning(332087): The master clock for this clock assignment could not be derived.  Clock: u0_pll450m|iopll_0_outclk0 was not created. 

    This only occurs in designs targetting Stratix® 10 devices and Agilex™ devices.

    Resolution

    To correctly constrain the PLL output clocks, manually generate the master clocks, specify the master clock for each PLL output clock and add clock groups to cut the PLL output clocks from different reference clocks.

    The following timing constraints can be used for the clock scheme above:

    create_clock -name clk0 -period 100MHz [get_ports clk0]
    create_clock -name clk1 -period 100MHz [get_ports clk1]


    create_generated_clock -name {u0|iopll_0_m_cnt_clk} -source {u0_pll450m|iopll_0|tennm_pll|core_refclk} -divide_by 12 -multiply_by 1 -duty_cycle 50.00 -master {clk0} { u0_pll450m|iopll_0|tennm_pll~mcntr_reg } -add
    create_generated_clock -name {u0|iopll_0_n_cnt_clk} -source {u0_pll450m|iopll_0|tennm_pll|core_refclk} -divide_by 1 -multiply_by 1 -duty_cycle 50.00 -master {clk0} { u0_pll450m|iopll_0|tennm_pll~ncntr_reg } -add
    create_generated_clock -name {u0|iopll_0_outclk0} -source {u0_pll450m|iopll_0|tennm_pll|core_refclk} -divide_by 3 -multiply_by 12 -duty_cycle 50.00 -master {clk0} { u0_pll450m|iopll_0|tennm_pll|outclk[1] } -add

    create_generated_clock -name {u1|iopll_0_m_cnt_clk} -source {u0_pll450m|iopll_0|tennm_pll|core_refclk} -divide_by 12 -multiply_by 1 -duty_cycle 50.00 -master {clk1} { u0_pll450m|iopll_0|tennm_pll~mcntr_reg } -add
    create_generated_clock -name {u1|iopll_0_n_cnt_clk} -source {u0_pll450m|iopll_0|tennm_pll|core_refclk} -divide_by 1 -multiply_by 1 -duty_cycle 50.00 -master {clk1} { u0_pll450m|iopll_0|tennm_pll~ncntr_reg } -add
    create_generated_clock -name {u1|iopll_0_outclk0} -source {u0_pll450m|iopll_0|tennm_pll|core_refclk} -divide_by 3 -multiply_by 12 -duty_cycle 50.00 -master {clk1} { u0_pll450m|iopll_0|tennm_pll|outclk[1] } -add

    set_clock_groups -exclusive -group {u0|iopll_0_outclk0} -group {u1|iopll_0_outclk0}

    You can get the correct node name in the node finder, and the divider and multiplier parameters from the PLL configuration.

    Related Products

    This article applies to 2 products

    Intel Agilex® 7 FPGAs and SoC FPGAs
    Intel® Stratix® 10 FPGAs and SoC FPGAs