• 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. Blogs
  2. Digital Design
  3. Five-Minute Tutorial: ecoAddRepeater
Kari
Kari

Community Member

Blog Activity
Options
  • Subscribe by email
  • More
  • Cancel
CDNS - RequestDemo

Have a question? Need more information?

Contact Us
EDI system
tutorial
encounter
Digital Implementation
five minute
ecoAddRepeater

Five-Minute Tutorial: ecoAddRepeater

19 Oct 2010 • 3 minute read

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
globalDetailRoute

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.

 


CDNS - RequestDemo

Try Cadence Software for your next design!

Free Trials

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

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