Home > Community > Blogs > Digital Implementation > five minute tutorial ecoaddrepeater
Login with a Cadence account.
Not a member yet?
Create a permanent login account to make interactions with Cadence more conveniennt.

Register | Membership benefits
Get email delivery of the Digital Implementation blog (individual posts).


* Required Fields

Recipients email * (separate multiple addresses with commas)

Your name *

Your email *

Message *

Contact Us

* Required Fields
First Name *

Last Name *

Email *

Company / Institution *

Comments: *

Five-Minute Tutorial: ecoAddRepeater

Comments(9)Filed under: Digital Implementation, encounter, EDI system, five minute, tutorial, ecoAddRepeater

In today's tutorial, we're going to talk about the Encounter Digital Implementation (EDI) system command ecoAddRepeater. You may have come across this command and even used it before, or perhaps you used the GUI (Optimize->Interactive ECO...) to add buffers or inverters, and didn't know that this was the command doing the work. Either way, let's review some reasons we'd want to use such a command.

  • Fix a few remaining hold violations by adding a small buffer at the endpoint
  • Add delay to data paths you're trying to skew-match
  • Buffer a path to fix an AC Limit violation
  • Buffer a path to reduce SI sensitivity

These are just a few cases; you can probably think of other times were you would use or have used this kind of functionality. We'll use the case of fixing some remaining hold violations by adding a small buffer at the endpoint as an example.

The command itself is pretty straightforward. For our hold-fix example, we'd use something like the following:

ecoAddRepeater -term reg1/D -relativeDistToSink 0.1 -cell BUFX2

The -term and -cell arguments are fairly obvious: the pin you want the new buffer to drive, and the type of buffer to add, respectively. But what's the -relativeDistToSink? That's how close to the -term you want to buffer to be placed. The allowed range is between 0 and 1, with a small number (like 0.1 in the example) meaning that the buffer will be placed near the sink (the reg1/D pin here). If we want the buffer to be placed close to the driver of the net instead, we could specify something like 0.9 or 1.

If you enter the above command, you'll see that EDI takes a few minutes while a refinePlace is called and the timing is updated. Not a big deal if you're only adding one buffer. But what if you're adding 10 buffers, or 100 buffers, or more? You don't want to sit there and wait for each one. This is where setEcoMode comes in. We can set a few things with setEcoMode so that refinePlace and a timing update are not run after each ecoAddRepeater command. This way, all of our ecoAddRepeater commands will run very quickly, and we'll just do a refinePlace and update timing at the end. Here's what you need to set:

setEcoMode -refinePlace false -updateTiming false

The key is to remember to run refinePlace after you're all done, otherwise your ecoRoute and timing will be a mess! We can also use a foreach loop to make it easier to script up a lot of ecoAddRepeater commands. We'll use just 3 endpoints in this example, but you'll get the idea. This is a very common ecoAddRepeater script that I use on almost every project:

setEcoMode -refinePlace false -updateTiming false

set endpoints { \
"reg1/D" \
"reg2/D" \
"reg3/D" \

foreach endpoint $endpoints {
  ecoAddRepeater -term $endpoint -relativeDistToSink 0.1 -cell BUFX2

refinePlace -preserveRouting

setNanoRouteMode -routeWithEco true

Notice the -preserveRouting flag for the refinePlace command. Usually, when you're at the point of fixing those few last hold violations, you don't want to disturb your design too much, so you don't want the routing of the new nets created by adding repeaters to be ripped up. You want as much of it kept as possible, and ecoRoute will just fix up the wires it needs to in order to connect your new buffers.

We've been using buffers in this example, but you can use ecoAddRepeater to add inverters too. Just specify your inverter with the -cell argument (-cell INVX2, for example), and ecoAddRepeater automatically knows to add two of them in series so that your logic polarity is preserved.

HOMEWORK: How would you use ecoAddRepeater to add a buffer right in the middle of a given net? (Hint: Check out the EDI System Text Command Reference for all the options of ecoAddRepeater.) Feel free to post your answer in the comments.

There is a lot more that you can do with this command, either at the command line or with the Interactive ECO GUI Form, but that's all the time we have for this five-minute tutorial. I encourage you to investigate more on your own. This one simple command can lead to some creative solutions to unique problems. If you've used ecoAddRepeater to do something interesting, let us know about it!

Still haven't subscribed to the Digital Implementation Forum Blogs? What are you waiting for? Do it here.



By zhuzhongli on April 29, 2011
# to add a buffer BUFX6 in the middle of net n1233
ecoAddRepeater -net n1233 -cell BUFX6 -offLoadAtLoc  101   208

By Kari on June 7, 2011
Hi Zhuzhongli,
Thanks for answering the "homework" question! (And sorry it took so long to post your comment). That should work. I think you can also use "-loc x y" instead of -offLoadAtLoc x y".

By Harel on September 25, 2011
Hi Kari,

When i try to perform ecoAddRepeater on a net in my design, i get a message telling me its impossible because it is a multi-driver net. What does that mean and what should i do?

By Kari on September 26, 2011
Hi Harel,
First check if the multi-driver net is intended in your design. The command checkDesign will report such nets, and you should run checkDesign at the beginning of your flow. Second, optDesign usually can take care of buffering multi-driver nets, but if there was no timing violation on the net, it probably didn't get buffered. Finally, you can use the addInst command (to add your new buffer) and the attachTerm command (to add the buffer to the net). Hope that helps!

By smachha on July 17, 2012
Hi Kari,

I am new to PD and find lot info from this post. Thanks for it.I have a question. I am having tough time in grepping the End points from the hold EDI timing report as they are split in to multiple lines.

so is there a setting to get it in single line, that way i can easily grep Endpoints.

By Kari on July 24, 2012
Hi smachha, Welcome to PD and I'm so glad you found the post useful! Play around with the following variables and see if you can get what you want:                                     set_table_style -name report_timing -max_width {250}
set_global line_length 2000

By Erez on November 19, 2012
can I specify the name of the buffer?

By Kari on November 19, 2012
Hi Erez, you can use setEcoMode -prefix to add a prefix.

By vimalraj205 on February 8, 2013
ecoAddRepeater -term<> -cell <> -relativeDistToSink 0.5
this adds buffer right at the middle of the net

Leave a Comment

E-mail (will not be published)
 I have read and agree to the Terms of use and Community Guidelines.
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.