Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Migrating from encounter CTS to innovus CCOPT

Status
Not open for further replies.

rmachado

Member level 2
Joined
Apr 13, 2018
Messages
45
Helped
0
Reputation
0
Reaction score
1
Trophy points
6
Activity points
668
Hello everyone,

I am new to the ASIC design flow so I decided to do a simple 8-bit counter to understand how the tools work.
I am struggling a bit in the clock tree synthesis phase on Innovus right know and would appreciate some help.

I already synthesized a clock tree using the old ck engine form Encounter. I got a 4 buffers in total, two connected in series, where the last one feed two other buffers, each one responsible for driving 4 flip flops each. As the ck engine is becoming obsolete I am trying to migrate to the ccopt design flow but I am having some issues. I was expecting to have a similar result but instead, Innovus is reporting an error regarding the slew value of the leaf cells being too low.

I followed the instructions on the Innovus user guide to migrate from a FE-CTS flow to a CCOPT flow.
I first specify the old clock tree specification file using the command specifyClockTree -file filename.ctstch command.
Then I use the ccopt_design –cts –ckSpec –genScriptOnly ccopt.spec to generate the new clock tree specification file for the ccopt engine.
After that I load the new clock tree specification using the source ccopt.spec command, and finally I run the ccopt_design -cts command to synthesize the clock tree.

I was expecting to have a similar result, or at least a synthesize clock tree, but instead I am getting the error mentioned above.
I know that the old ck engine does some property settings when running the clockDesign command, but as far as I was able to understand by reading the Innovus documentation, these properties (that can be changed using the set_ccopt_property command) are only considered if the setCTSMode is configured to use the ck engine, otherwise they are ignored.

My guessing right know is taht I am missing some ccopt property that needs to be configured but I dont really know which one. I attached the clock tree specification file that I use to generate the clock tree with the ck engine and I attached the clock tree specification file automatically generated by Innovus from the old ctstch file. i also attached the constraint file that I am using.

Can someone give me a hint on why am I having this slew value error with ccopt engine but no error with the ck engine?

Thanks in advance,

Rui

View attachment CTS_Files.rar
 

Hello everyone,

I am new to the ASIC design flow so I decided to do a simple 8-bit counter to understand how the tools work.
I am struggling a bit in the clock tree synthesis phase on Innovus right know and would appreciate some help.

I already synthesized a clock tree using the old ck engine form Encounter. I got a 4 buffers in total, two connected in series, where the last one feed two other buffers, each one responsible for driving 4 flip flops each. As the ck engine is becoming obsolete I am trying to migrate to the ccopt design flow but I am having some issues. I was expecting to have a similar result but instead, Innovus is reporting an error regarding the slew value of the leaf cells being too low.

I followed the instructions on the Innovus user guide to migrate from a FE-CTS flow to a CCOPT flow.
I first specify the old clock tree specification file using the command specifyClockTree -file filename.ctstch command.
Then I use the ccopt_design –cts –ckSpec –genScriptOnly ccopt.spec to generate the new clock tree specification file for the ccopt engine.
After that I load the new clock tree specification using the source ccopt.spec command, and finally I run the ccopt_design -cts command to synthesize the clock tree.

I was expecting to have a similar result, or at least a synthesize clock tree, but instead I am getting the error mentioned above.
I know that the old ck engine does some property settings when running the clockDesign command, but as far as I was able to understand by reading the Innovus documentation, these properties (that can be changed using the set_ccopt_property command) are only considered if the setCTSMode is configured to use the ck engine, otherwise they are ignored.

My guessing right know is taht I am missing some ccopt property that needs to be configured but I dont really know which one. I attached the clock tree specification file that I use to generate the clock tree with the ck engine and I attached the clock tree specification file automatically generated by Innovus from the old ctstch file. i also attached the constraint file that I am using.

Can someone give me a hint on why am I having this slew value error with ccopt engine but no error with the ck engine?

Thanks in advance,

Rui

View attachment 145994

are you you are getting an error? isn't it a warning? either way, post the error code and description.
 

are you you are getting an error? isn't it a warning? either way, post the error code and description.

I have some warnings and 2 errors.
One errors reports that the clock tree synthesis was aborted because the requirements were not fulfilled and the other one is related with the slew rate value.
I do not have access to the tools today but tomorrow I will post the error (and warnings) code and description.
 

are you you are getting an error? isn't it a warning? either way, post the error code and description.

The errors that I am getting are the following:
**ERROR: IMPCCOPT-1013: leaf slew time target of 0.200ns is far too low. It needs to be increased to at least 0.428ns (and preferably several time that). Terminating CTS...
**ERROR: IMPCCIOT-2196: cannot run ccopt_design because the command prerequisites were not met. Review the previous error messages for more details about the failure.

Based on the error I increased the max buffer transition time to 0.500ns (although I think I should not do it because the clock tree specification file is automatically generated and therefore I should not change it). When I change the transition time parameter to 0.500ns I get the following errors:
**ERROR: IMPCCOPT-1209: Non-leaf slew time target of 0.500ns is too low on both rising and falling edges. The largest clock gate is unable to drive the largest buffer or inverter in power-domain auto-default. To adhere to the given slope target, you will need to select a stronger clock gate, increase the slew target to at least 1.911ns or remove this driver cells from the CTS cell list: CLKBU12 CLKBU15 CLKIN10 CLKIN12 CLKIN15.
**ERROR: IMPCCOPT-3092: COuldn't load external LP solver library.

The second error (IPMCCOPT-3092), disappears if I run the clock_design command again, but I always get the IMPCCOPT-1209 error.
I was able to generate the clock tree using the ck engine so I can not understand why am I getting this error when using the ccopt engine.
I am attaching the log files if you want to have a closer look at the errors and warnings.

ThanksView attachment logs.rar
 

The errors that I am getting are the following:
**ERROR: IMPCCOPT-1013: leaf slew time target of 0.200ns is far too low. It needs to be increased to at least 0.428ns (and preferably several time that). Terminating CTS...
**ERROR: IMPCCIOT-2196: cannot run ccopt_design because the command prerequisites were not met. Review the previous error messages for more details about the failure.

Based on the error I increased the max buffer transition time to 0.500ns (although I think I should not do it because the clock tree specification file is automatically generated and therefore I should not change it). When I change the transition time parameter to 0.500ns I get the following errors:
**ERROR: IMPCCOPT-1209: Non-leaf slew time target of 0.500ns is too low on both rising and falling edges. The largest clock gate is unable to drive the largest buffer or inverter in power-domain auto-default. To adhere to the given slope target, you will need to select a stronger clock gate, increase the slew target to at least 1.911ns or remove this driver cells from the CTS cell list: CLKBU12 CLKBU15 CLKIN10 CLKIN12 CLKIN15.
**ERROR: IMPCCOPT-3092: COuldn't load external LP solver library.

The second error (IPMCCOPT-3092), disappears if I run the clock_design command again, but I always get the IMPCCOPT-1209 error.
I was able to generate the clock tree using the ck engine so I can not understand why am I getting this error when using the ccopt engine.
I am attaching the log files if you want to have a closer look at the errors and warnings.

ThanksView attachment 146037

are you using a commercial library or your own? it could be a problem with the .lib
 

are you using a commercial library or your own? it could be a problem with the .lib

I am using a commercial library from AMS.
If the problem was on the .lib, I should be getting an error when using the old ck engine no?
 

I am using a commercial library from AMS.
If the problem was on the .lib, I should be getting an error when using the old ck engine no?

Maybe.

It appears this is a user mistake. Your target looks impossible to meet. Look at the error report: Non-leaf slew time target of 0.500ns is too low on both rising and falling edges. The largest clock gate is unable to drive the largest buffer or inverter in power_domain auto-default. To adhere to the given slope target, you will need to select a stronger clock gate, increase the slew target to at least 1.911ns or remove these driver cells from the CTS cell lists: CLKBU12 CLKBU15 CLKIN10 CLKIN12 CLKIN15. It appears there is no cell on your entire library that can drive the listed buffers. They are just too big.

I found 2 other things that are very odd: The process node is not set, and the clock spec provided appears not to be used.
 

Maybe.

It appears this is a user mistake. Your target looks impossible to meet. Look at the error report: Non-leaf slew time target of 0.500ns is too low on both rising and falling edges. The largest clock gate is unable to drive the largest buffer or inverter in power_domain auto-default. To adhere to the given slope target, you will need to select a stronger clock gate, increase the slew target to at least 1.911ns or remove these driver cells from the CTS cell lists: CLKBU12 CLKBU15 CLKIN10 CLKIN12 CLKIN15. It appears there is no cell on your entire library that can drive the listed buffers. They are just too big.

I found 2 other things that are very odd: The process node is not set, and the clock spec provided appears not to be used.

Innovus is able to met the target when using the ck engine. All that I do is change from the ck to the ccopt engine, without changing my target, and I got the errors.
When you generate the clock spec from a ck engine clock specification you end up with two clock specifications. The warning regarding the clock spec is informing that the ck clock spec will not be used, instead the ccopt engine will use the sourced clock tree specification generated from the old spec. (At least this was what I figured out when I read the warning and the Clock tree synthesis chapter from the Innovus user guide)
I also saw the process node warning and I tried to generate the clock tree after setting it. The result was the same, the warning disappear but I still got the same slew value error.

What is odd to me is the fact that with the old clock tree engine, innovus is able to generate the clock tree with exactly the same library.
If with the ck engine innnovus can find cells capable of driving the listed buffers, why can't it find cells capable of driving the same buffers with the ccopt engine?

The cell library that I am currently working with is a little old. Is it possible that the ccopt engine needs more information from the library files than the ck engine?
Some Innovus' properties are automatically set when running the ck engine. Those properties are specific for the ck engine and are ignored when running the ccopt engine. Although, maybe I have to manually set other properties in order to make the ccopt engine to work properly, I just don't know what properties. I followed the Innovus' user guide regarding the ccopt engine flow and how to configure it but I am still getting the error. I am probably missing something, either regarding the configuration or regarding the library that I am using, I just don't know what.
 

Innovus is able to met the target when using the ck engine. All that I do is change from the ck to the ccopt engine, without changing my target, and I got the errors.
When you generate the clock spec from a ck engine clock specification you end up with two clock specifications. The warning regarding the clock spec is informing that the ck clock spec will not be used, instead the ccopt engine will use the sourced clock tree specification generated from the old spec. (At least this was what I figured out when I read the warning and the Clock tree synthesis chapter from the Innovus user guide)
I also saw the process node warning and I tried to generate the clock tree after setting it. The result was the same, the warning disappear but I still got the same slew value error.

What is odd to me is the fact that with the old clock tree engine, innovus is able to generate the clock tree with exactly the same library.
If with the ck engine innnovus can find cells capable of driving the listed buffers, why can't it find cells capable of driving the same buffers with the ccopt engine?

The cell library that I am currently working with is a little old. Is it possible that the ccopt engine needs more information from the library files than the ck engine?
Some Innovus' properties are automatically set when running the ck engine. Those properties are specific for the ck engine and are ignored when running the ccopt engine. Although, maybe I have to manually set other properties in order to make the ccopt engine to work properly, I just don't know what properties. I followed the Innovus' user guide regarding the ccopt engine flow and how to configure it but I am still getting the error. I am probably missing something, either regarding the configuration or regarding the library that I am using, I just don't know what.

I'd suggest abandoning the old ck engine and don't even try to migrate the spec from it. Let ccopt build the spec automatically, see what you get. use this:

Code:
setCTSMode -engine ccopt
set_ccopt_property use_inverters auto 
setCCOptMode -cts_opt_type full
create_ccopt_clock_tree_spec
ccopt_design
 
I'd suggest abandoning the old ck engine and don't even try to migrate the spec from it. Let ccopt build the spec automatically, see what you get. use this:

Code:
setCTSMode -engine ccopt
set_ccopt_property use_inverters auto 
setCCOptMode -cts_opt_type full
create_ccopt_clock_tree_spec
ccopt_design

I already try something very similar but I will give it a shot.
I will post the result tomorrow as soon as I arrive to the office after I test it.

Thanks for the patience and for the help
 

I'd suggest abandoning the old ck engine and don't even try to migrate the spec from it. Let ccopt build the spec automatically, see what you get. use this:

Code:
setCTSMode -engine ccopt
set_ccopt_property use_inverters auto 
setCCOptMode -cts_opt_type full
create_ccopt_clock_tree_spec
ccopt_design

I try the suggested code and I guess it work.
I am getting the folowing error:
**ERROR: IMPCCOPT-3092: Couldn't load external LP solver library. Error returned:
libCDSCoinUtils.so: cannot open shared object file: no such file or directory
libCoinUtils.so: cannot open shared object file: no such file or directory
libCDSClp.so: cannot open shared object file: no such file or directory
libClp.so: cannot open shared object file: no such file or directory

If I rerun the ccopt_design command the error disappears.
The only thing that is odd to me is that the ccopt_design does not use a single buffer or inverter to drive my 16 flip-flops. the clock input pin is just directly connected to the clock pins of the flip-flops without any driver. When using the old engine innovus used tree buffers, one connected to the input clock pin that would drive another two buffers, each one responsible for driving 8 flops.
I will do a more complex design to see if the ccopt engine starts adding buffers to my clock tree.

Another thing that I noticed was the target_max_trans property value. The value is set to default.
I used to set this value and I am sure that was this value that was on the origin of the error regarding the slew value.
The result that I am having with your commands is the same I would get if I use my commands and set the target_max_trans property value to 1.9ns. My problem is, is this result right? Should I be getting a clock tree without a single driving buffer to my flops?

Again, I will do a complex design and see the outcome of the ccopt tree.

- - - Updated - - -

Everything seems to be working fine.
With the more complex design ccopt finally generated some buffers to drive my flops.
Thanks for the help. Guess I should let innovus handle the transitions times according to what is specified in the technology files.

One last question, any idea on what could be the LP solver library error?
 

I try the suggested code and I guess it work.
I am getting the folowing error:
**ERROR: IMPCCOPT-3092: Couldn't load external LP solver library. Error returned:
libCDSCoinUtils.so: cannot open shared object file: no such file or directory
libCoinUtils.so: cannot open shared object file: no such file or directory
libCDSClp.so: cannot open shared object file: no such file or directory
libClp.so: cannot open shared object file: no such file or directory

If I rerun the ccopt_design command the error disappears.
The only thing that is odd to me is that the ccopt_design does not use a single buffer or inverter to drive my 16 flip-flops. the clock input pin is just directly connected to the clock pins of the flip-flops without any driver. When using the old engine innovus used tree buffers, one connected to the input clock pin that would drive another two buffers, each one responsible for driving 8 flops.
I will do a more complex design to see if the ccopt engine starts adding buffers to my clock tree.

Another thing that I noticed was the target_max_trans property value. The value is set to default.
I used to set this value and I am sure that was this value that was on the origin of the error regarding the slew value.
The result that I am having with your commands is the same I would get if I use my commands and set the target_max_trans property value to 1.9ns. My problem is, is this result right? Should I be getting a clock tree without a single driving buffer to my flops?

Again, I will do a complex design and see the outcome of the ccopt tree.

- - - Updated - - -

Everything seems to be working fine.
With the more complex design ccopt finally generated some buffers to drive my flops.
Thanks for the help. Guess I should let innovus handle the transitions times according to what is specified in the technology files.

One last question, any idea on what could be the LP solver library error?

update innovus and it should go away.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top