Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Early rail analysis #67

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

Early rail analysis #67

wants to merge 2 commits into from

Conversation

harrisonliew
Copy link
Contributor

@harrisonliew harrisonliew commented Jul 24, 2021

Implements early rail analysis after place_opt_design. Key differences to rail analysis in the Voltus plugin is:

  • Early static rail analysis does not require a separate license, and it can be done in Innovus without any technology libraries. The accuracy is also very coarse.
  • Distributes the power given by par.rail_analysis_power (see Early rail analysis hammer#611) over all the placed instances, given the power routing. In my opinion, this is better than running static power analysis since it allows the user to do a coarse what-if analysis using a different power number.
  • open_chip script loads newest rail analysis database (in the case of multiple MMMC corners, this will be the last corner) and prompts the user for whether they want to display the results in the GUI. If so, this is what shows up using the TinyRocketConfig example from the Chipyard ASAP7 example (obviously, the results don't make sense since the SRAMs aren't characterized):

era

}""")

if not corners:
# TODO: remove hardcoded my_view string
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the alternative here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There isn't, for now. This is just default as generated from hammer, but it could be a property.

@@ -829,6 +920,18 @@ def run_innovus(self) -> bool:
# Create open_chip script pointing to latest (symlinked to post_<last ran step>).
with open(self.open_chip_tcl, "w") as f:
f.write("read_db latest")
if self.ran_early_rail:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be better to just write out a separate "open_early_rail" script in the same directory instead of combining it with open_chip?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think so, since it requires reading the database anyway? I guess an open_early_rail script would do the same as existing open_chip but with the following added.

@@ -33,3 +33,7 @@ par.innovus:
# Note that this requires an optional licence (enccco).
# type: bool
use_cco: true

# Estimated power for early rail analysis.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A nit, but it might be a bit more clear to say "Estimated total power used by early rail analysis in Watts." "This is a designer input estimate for the supply..."

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants