• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Digital Implementation
  3. [Innovus] create_generated_clock giving strange error TA...

Stats

  • Locked Locked
  • Replies 9
  • Subscribers 94
  • Views 14393
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

[Innovus] create_generated_clock giving strange error TA-152

Nader Fathy
Nader Fathy over 3 years ago

Hello,

I'm using Innovus (v21.11-s130_1) to do PnR for a simple instance of a clock divider synthesized by genus shown below:

module GENERATE_CTRL_CLOCKS #(parameter CLK_DIV_FACTOR = 5) (CLK_FAST,RST,CLK_SLOW);
  input CLK_FAST;
  input RST;
  output reg CLK_SLOW;
  // Counters & aux clocks
  reg [CLK_DIV_FACTOR-1:0] clk_counter;
  wire [CLK_DIV_FACTOR-1:0] clk_counter_incr;

  // Generate Clock Division
  always @ (posedge CLK_FAST or negedge RST) begin

    if (!RST)
      begin
        clk_counter <= {(CLK_DIV_FACTOR){1'b0}};
      end
    else
     begin
       clk_counter <= clk_counter_incr;
     end

  end

  assign clk_counter_incr = clk_counter + { {CLK_DIV_FACTOR-1{1'b0}}, 1'b1 };
  assign CLK_SLOW = ~clk_counter[CLK_DIV_FACTOR-1]; // Freq is CLK_DIV_FACTOR slower than fast clock
endmodule

module MAIN (CLK_FAST,RST);
  input CLK_FAST;
  input RST;
  wire CLK_SLOW;
  // Call clock div:
  GENERATE_CTRL_CLOCKS #(.CLK_DIV_FACTOR(5)) generate_ic_clocks(.CLK_FAST(CLK_FAST),.RST(RST), .CLK_SLOW(CLK_SLOW));
endmodule

My SDC to generate the clocks are defined as:

  • create_clock [get_ports CLK_FAST] -name clkf -period 48
  • create_generated_clock -name clks -source [get_ports CLK_FAST] -divide_by 32 [get_pins generate_ic_clocks/CLK_SLOW_reg/Q]
Innovus gave me these errors when I do placeDesign:
  • **ERROR: (TA-152): A latency path from the 'Rise' edge of the master clock  at source pin 'CLK_FAST' to the 'Rise' edge of generated clock 'clks' at pin 'generate_ic_clocks/CLK_SLOW_reg/Q' cannot be found. You must modify your create_generated_clock constraint to be consistent with the network topology. The analysis will continue using 0ns source latency for generated clock 'clks'. For backward compatibility with earlier releases or to remove the edge-to-edge sufficiency checking, you should set the global 'timing_enable_genclk_edge_based_source_latency' to false
  • **ERROR: (TA-152): A latency path from the 'Rise' edge of the master clock  at source pin 'CLK_FAST' to the 'Fall' edge of generated clock 'clks' at pin 'generate_ic_clocks/CLK_SLOW_reg/Q' cannot be found. You must modify your create_generated_clock constraint to be consistent with the network topology. The analysis will continue using 0ns source latency for generated clock 'clks'. For backward compatibility with earlier releases or to remove the edge-to-edge sufficiency checking, you should set the global 'timing_enable_genclk_edge_based_source_latency' to false

I have viewed the article (https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000nUuREAU&pageName=ArticleContent) that talks about this issue but my clocks don't have any of the mentioned issue.

If I flattened the module GENERATE_CTRL_CLOCKS on the main module and modified the path of SDC SLOW_CLK to [get_pins I_1/Z] which points to the output of CLK_SLOW in schematics view, Innovus recognizes the slow clock.

I'd appreciate it if anyone could help me understand why is this happening? and how do I fix this issue, please?

Nader Fathy

  • Cancel
Parents
  • DimoM
    DimoM over 3 years ago

    Hi Nader,
    it is hard to say what is going on without looking at the synthesized netlist that was produced by Genus.

    Can you please share it ?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • DimoM
    DimoM over 3 years ago

    Hi Nader,
    it is hard to say what is going on without looking at the synthesized netlist that was produced by Genus.

    Can you please share it ?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • Nader Fathy
    Nader Fathy over 3 years ago in reply to DimoM

    Hi DimoM,

    Thanks for looking into this. Unfortunately, I am not able to share the entire netlist due to NDA issues. Is there something specific I can look into?

    Your help is much appreciated.

    Nader

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DimoM
    DimoM over 3 years ago in reply to Nader Fathy

    Hi Nader,
    Innovus complains that it cannot track the source of the generated clock. If we do not have access to the netlist, only wild guessing can be done why this is the case.

    Looking at your code, the netlist will be fairly small. If you rename the std. cells per hand such that they do not give up the technology node and foundry, you can safely share it then, right ?

    E.g. instead of tsmc28hpcp7t_inv2  rename the cell to inv2  and so on.

    - Dimo

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Nader Fathy
    Nader Fathy over 3 years ago in reply to DimoM

    Thank you very much Dimo,

    Please find the link to the modified netlist below:

    https://drive.google.com/file/d/1hmotdeR8fKQHc-u7WfzELbjXaXzwh8RK/view?usp=sharing

    I appreciate your help.

    Nader Fathy

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DimoM
    DimoM over 3 years ago in reply to Nader Fathy

    Hi,
    I see in your netlist the register that is the source of the generated clock has an inverting clock input:

      DFFNRPQ CLK_SLOW_reg(.R (n_4), .CKN (CLK_FAST), .D (n_14),   .Q (CLK_SLOW));

    If you look at the article you linked, this falls exactly under the case described in Fig. 2.

    Now I do not have a testcase at hand where I can test this, but I would suggest you try to define your generated clock differently.

    For example, try if the -invert option works for you here, or try to work with edges instead.

    - Dimo

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Nader Fathy
    Nader Fathy over 3 years ago in reply to DimoM

    Thank you Dimo, I tried -invert and got the same error.

    I have taken this to Cadence support, but I will post the solution once I know the exact issue.

    Many thanks for your help!

    Nader Fathy

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DimoM
    DimoM over 3 years ago in reply to Nader Fathy

    Hi Nader,

    sorry I could not help further. In any case, please keep us posted and share the solution once you have it figured out so that the community can benefit from this.

    Thanks
    Dimo

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Nader Fathy
    Nader Fathy over 3 years ago in reply to DimoM

    Hi Dimo,

    Your help is very appreciated, thank you so much!

    Indeed I will post it here.

    Kindest Regards,

    Nader Fathy

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Nader Fathy
    Nader Fathy over 3 years ago in reply to Nader Fathy

    I figured out the issue, my mistake was calculating the incorrect number of edges with respect to the master clock. The correct way to define the clock is to either use -divide_by and use the flag defined in the article I shared in the original post. Or, to use -edges but make sure that Innovus always assumes that the first clock edge of the master clock is a rising edge (this was simply my problem, I counted the first edge as falling).

    Hope this helps out people in the future.

    Nader Fathy

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information