Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
7 years ago

Strange PLL Clock causing me failing paths in cyc V design

Dear all,

TimeQuest is warning me of a failing path in my Altera Cyclone V FPGA design.

It says failing path with:

Slack______From Node ____________________________________ ____to Node __________Launch Clock ____________________________________________________________________________Latch clock____Relationship __Clock Skew ___Data Delay
-9.115 ____    io_control:io_control_inst1|data_out _______    dq _______    pll_inst_100|pll_100_inst|altera_pll_i|general.gpll~PLL_OUTPUT_COUNTER|divclk ______  clk_100____    10.000 ____    -10.144______2.901

I wonder what is the problem here and what clock divclk is? The entity io_control flops the data from inside the design and tristating it to dq. dq is an Input / Output Port at the top level design.

IO_control has clock input clk_100. clk_100 is routed globally through the design with an ALTCLKCTRL. The clk_100 is feed to external hardware via ALTDDIO which is consuming dq.

Here is the code of IO_control:

flopping_data_out_proc : process(CLK, RESET)begin
    if (RESET = '0') then
        data_out <= (others => '0');
    elsif (rising_edge(CLK)) then
        data_out <= Fin_DATA_ram;    -- comes from inside FPGA Design
    end if;
end process flopping_data_out_proc;
mux_data_out_proc : process(slrd_en, data_out)
begin
    if (slrd_en = '0') then
        DATA <= data_out;        -- DATA is output of IO Control and wired to DQ
    else
        DATA <= (others => 'Z');
    end if;
end process;

Can somebody enlighten me if this is a critical issue? I set all needed timing constraints but wonder if I had to add a multicycle path or set false path between these clocks?

It is noticeable that the fitter puts out a warning during fitting:

Warning (332049): Ignored create_clock at SDC1.sdc(2): Incorrect assignment for clock.  Source node: CLOCK_50_B5B already has a clock(s) assigned to it.  Use the -add option to assign multiple clocks to this node.  Clock was not created or updated.
    Info (332050): create_clock -name CLK1 -period 20.0 

This is also the clock which feed the pll (clk_100) as reference clock. Can you help me clarifying this issue?

I added the archive file in the attachments.

Thank you for any help.

13 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    If you're getting name mismatch errors, use the Name Finder tool from the GUI dialog boxes you can access in the text editor to create SDC commands (Edit menu). The Name Finder lets you search the timing netlist directly, so the names are guaranteed to be correct.

    Not sure why pclk port is not working for you since that should be coming directly from your HDL.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    If you're getting name mismatch errors, use the Name Finder tool from the GUI dialog boxes you can access in the text editor to create SDC commands (Edit menu). The Name Finder lets you search the timing netlist directly, so the names are guaranteed to be correct.

    Not sure why pclk port is not working for you since that should be coming directly from your HDL.

    --- Quote End ---

    Ok, with node finder in the TimeQuest gui (used the create_generate_clock button in the Constraints menu) I was finally able to create the correct constraint:

    create_generated_clock -name {gclk100} -source .gpll~PLL_OUTPUT_COUNTER|divclk}] -master_clock {pll_inst_100|pll_100_inst|altera_pll_i|general.gpll~PLL_OUTPUT_COUNTER|divclk} 

    With this the generated clock was correctly created.

    With

    create_generated_clock -source {get_pins pll_inst_100|pll_100_inst|altera_pll_i|general.gpll~PLL_OUTPUT_COUNTER|divclk} -multiply_by 1 {get_ports pclk} -name gclk100

    it is not. Seems to me quartus is rigorous how the constaints should be defined. Especially with the {} ...

    One last question and then I will shut up: You mentioned in one of your last posts that I should false path to the output port with

    set_false_path -to {get_ports <output port name>}
    .

    What is the reason for this?

    Thank you so much.

    Kind regards
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    The output clock path will still show up as an unconstrained output without the false path. The false path prevents any data path analysis since you're not using this as a data path.