Forum Discussion

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

Determining path for cell in netlist

Hi,

I'm trying to apply a generated clock to a clock net burried in the hieracrchy, like so:

create_generated_clock -name {oven_ctl_i2c_clk} -divide_by 1024 -source [get_ports {osc_clk0}] [get_pins oven_ctl:inst20|clk_div_50m_i2c_clk:inst2|i2c_clk]

However, TimeQuest comes back and tells me that the SDC command get_pins returns an empty value. I can determine the where the signal is at in the Technology Map Viewer, but how do I determine the correct path (and syntax) to place in the SDC file?

Also, since the SDC file is used for timing-driven pnr, as well as post-route timing analysis, wouldn't it make since to use two different types of SDC files, one for pnr and one for timing analysis? :confused:

Thanks,

Tony

15 Replies

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

    --- Quote Start ---

    ... and would definitely need to use a Stratix II or Stratix III, if anything so I could do temperature and voltage variations in my timing analysis. It really is weird that I can't do that using the Stratix family.....just doesn't make sense to me why Altera left this out.

    --- Quote End ---

    My previous post mentioned on-chip variation (process variation across the device at any given temperature and voltage) being added to the models for Cyclone III and Stratix III. Timing models with the slow and fast extremes of process/voltage/temperature have long been in Quartus, I think going back at least to the earliest Cyclone and Stratix devices.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    After all of this discussion, I've finally been able to add the clock constraints to the SDC file. However, I'm still having a problem. TimeQuest is now reporting this:

    info: the source clock for this clock assignment cannot be reached. clock: health_status_i2c_clk might not have valid arrival time.

    I'm using this command to create the generating clock:

    create_generated_clock -name {health_status_i2c_clk} -divide_by 1024 -source [get_ports {osc_clk0}] [get_pins inst2|inst8|i2c_clk|regout]

    The clock that feeds the i2c_clk register is called clk50_mhz, which is a propagated clock from the Nios processor. The command derive_pll_clocks -use_tan_name is currrently being used. A base block is created on the input to the Nios processor, so I'm at a lost as to why I'm getting this message.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    The port osc_CLK0 drives a PLL, which has a generated clock/s coming out of it, and you're using one of those clocks to generate another clock. So your -source should not be the port, but the ouptut of the PLL. In TimeQuest, double-click on Report Clocks and find the PLL output that drives this one. Use that Target name as the -source of this generated clock. (I filed an SR that I thought this Info message should be a Warning, as it's more serious than just Info...)

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

    I used -source [inst|the_pll|the_pll|altpll_component|pll|clk[0]] and this seems to work. I'm not getting the informative message for this generated clock. I had to open up SOPC builder to determine the proper name of the PLL output clock name, and then deduce from that which clock to use from the report_clock command in TimeQuest.

    I was hoping the [get_ports osc_CLK0] command would be able to propagate the clock through the PLL and on to to FFs, but doesn't look like TimeQuest can do this. But I suppose you have to treat the PLL as a generated clock source, which in turn is feeding another generated clock source.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    TimeQuest shouldn't do this, by the way of the way create_generated_clocks works. Note that the -source is a node and not a clock. Basically this takes the "ideal" clock that exists on that node in the design. As a good example, when you run derive_pll_clocks, look at the Info messages to see what the -source is for the PLL output clocks. It is not the incoming clock port, but the actual inclock pin of the PLL. Now, you could modify this to be the top-level clock port and you would get identical results. This is because you only take the waveform along that clock, and TimeQuest then calculates the delay to that point(in the documentation they refer to it as latency). This is always confusing, but it is a much more powerful way to do it, more flexible, and gives the correct results.

    But in your case, you chose a node before the PLL. So for example, let's say osc_CLK0 was a 10ns clock, and the PLL divided it down to a 20ns clock, and then your ripple clock divided it again to a 40ns clock. If your generated_clock was -divide_by 2, but you had the -source by osc_CLK0, we would be taking the 10ns clock and dividing it by 2, when you really want to take the 20ns clock and dividing it by 2.

    (I'm probably making this more confusing, but it's more information as to how this works, which may prove useful).