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

Enable designs targeting ASAP7 #176

Merged
merged 4 commits into from
Sep 7, 2023
Merged

Conversation

lpawelcz
Copy link
Collaborator

@lpawelcz lpawelcz commented Aug 24, 2023

Fixes #172

Requires merging #178 in order to fix errors from buildifier.

This PR:

  • bumps ASAP7 dependency,
  • changes the default settings of the PDK dependency to use non-scaled variant,
  • updates ASAP7 config files (pdn_config.pdn, rc_script.tcl, tracks.tcl) to match non-scaled variant of the PDK,
  • adds test which implements physical layout of counter example targeting ASAP7 technology.

@QuantamHD , @proppy please take a look at this

@@ -15,11 +15,11 @@ set ::ground_nets "VSS"
####################################
# global connections
####################################
add_global_connection -defer_connection -net {VDD} -inst_pattern {.*} -pin_pattern {^VDD$} -power
Copy link
Collaborator

Choose a reason for hiding this comment

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

is that also required because of the non-scaled variant? if not, can you add a line about this in the PR description?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

-defer_connection was removed in ORFS because this option is deprecated in newer openroad. However, the version used in bazel_rules_hdl still has it so it would be reasonable to keep that.


pdn::allow_repair_channels true
####################################
# macro grids
Copy link
Collaborator

Choose a reason for hiding this comment

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

is that also required because of the non-scaled variant? if not, can you add a line about this in the PR description?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This change is not required. In my test design it looks like it does not affect the result GDS file when it's removed.

set_layer_rc -layer M6 -capacitance 1.23114E-01 -resistance 1.0371e-02
set_layer_rc -layer M7 -capacitance 1.05408E-01 -resistance 9.6720e-03
# Liberty units are fF,kOhm
set_layer_rc -layer M1 -capacitance 1.1368e-01 -resistance 1.3889e-01
Copy link
Collaborator

Choose a reason for hiding this comment

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

q: is that expected that the resistance doesn't change for the non-scaled version?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Layers M1-9 are routing layers. Here are definitions of scaled and non-scaled M1 layers.

I assume that the layer thickness is the same in scaled and non-scaled variants and the routing wire placed on that layer is 4 times wider and longer in scaled variant than in non-scaled. In LEF files, resistance is expressed in ohms per square of wire so this parameter does not depend on the changes (scaling) made to width and length of the wires on given layer.
My understanding is that if these resistances were to be specified in the LEF file, then those would have been the same for scaled and non-scaled variants.

However, in argument -resistance for the command set_layer_rc the unit of resistance is ohm per length of default width wire. I'm not sure what is the interpretation of default width (perhaps the value specified in LEF tech file?) but in the docs for set-wire-rc which handles -resistance similarly it is also stated that The resistance and capacitance values are per length of wire, not per square or per square micron.

I'm not sure if I understand that correctly but it looks reasonable to me that ohm per length of default width wire is not a universal unit and it should be scaled accordingly together with the width of the wires on given layer.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

The most recent and relevant change to the original file was done in The-OpenROAD-Project/OpenROAD-flow-scripts#144. It mentions scaling correlation which probably refers to scaled and non-scaled variants of the PDK. The PR however changed only the capacitance while the resistance remained the same.
It is not clear to me if this is correct.
Later in https://github.com/The-OpenROAD-Project/asap7/issues/35 it was mentioned that OpenROAD-flow-scripts is the source of correct resistances and capacitances so maybe it is OK to use those.

@proppy please let me know what do you think about that.

set_layer_rc -via V7 -resistance 1.00E-02
set_layer_rc -via V8 -resistance 1.00E-02
set_layer_rc -via V9 -resistance 1.00E-02
set_layer_rc -via V1 -resistance 1.72E-02
Copy link
Collaborator

Choose a reason for hiding this comment

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

is that expected that the change is not consistant across layers?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This would make sense if there are differences in thickness and widths of the via layers. I will check that

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

So there is The-OpenROAD-Project/OpenROAD-flow-scripts@877e200. I've also looked into layer definitions in PDK techfiles and the layers have different widths so it is expected that resistances will be different for each layer.

Copy link
Collaborator

@proppy proppy left a comment

Choose a reason for hiding this comment

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

just some nits and qs; can you remove the draft label if it's ready for review?

@lpawelcz
Copy link
Collaborator Author

Your questions refer to parts of the files that indeed don't look relevant to scaled or non-scaled variants.
In fact those files were imported from ORFS, see original sources:

I assumed ORFS setup for running ASAP7 as the source of truth for the work on support in bazel_rules_hdl.
I will try to reduce the changes to the ones relevant only for the scaling of the PDK variant.

@QuantamHD
Copy link
Collaborator

This looks good to me

@lpawelcz
Copy link
Collaborator Author

Linter failure caused by a new release of buildifier which reported errors in multiple files.

* Adds non-scaled technology LEF
* Marks DECAP cells as spacers for filler placement

Signed-off-by: Pawel Czarnecki <pczarnecki@antmicro.com>
Signed-off-by: Pawel Czarnecki <pczarnecki@antmicro.com>
Signed-off-by: Pawel Czarnecki <pczarnecki@antmicro.com>
@lpawelcz
Copy link
Collaborator Author

Rebased after #178 was merged

@lpawelcz lpawelcz force-pushed the asap7-support branch 2 times, most recently from 74987e7 to c833465 Compare August 29, 2023 10:15
Signed-off-by: Pawel Czarnecki <pczarnecki@antmicro.com>
@QuantamHD QuantamHD merged commit 7fd311e into hdl:main Sep 7, 2023
4 checks passed
@lpawelcz lpawelcz deleted the asap7-support branch September 18, 2023 05:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add tests for ASIC flow with ASAP7
3 participants