armleo / OpenLane

OpenLane is an automated RTL to GDSII flow based on several components including OpenROAD, Yosys, Magic, Netgen, Fault and custom methodology scripts for design exploration and optimization.
https://openlane.readthedocs.io/
Apache License 2.0
0 stars 1 forks source link

OpenRAM macro guide feedback #23

Open dralabeing opened 2 years ago

dralabeing commented 2 years ago

This feedback is for : https://armleo-openlane.readthedocs.io/en/merge-window-4/docs/source/openram.html

  1. Simplify intro to: This guide covers the RTL-to-GDS flow using OpenRAM cells and many macro related features from the OpenLane flow for full chip integration. Add link to OpenRAM docs and repos for details. ->https://github.com/VLSIDA/OpenRAM

This is the first reference to OpenRAM in OpenLane documents. Add a note describing how these OpenRAM cells were created and how these cells are available for use within OpenLane.

  1. This instruction should be based on using commands to copy the indicated relevant sections with parameter changes as required. "Copy the relevant sections from pdks/sky130B/libs.ref/sky130_sram_macros/verilog/sky130_sram_1kbyte_1rw1r_32x256_8.v <which relevant sections, be specific- use commands wherever possible>. Then add (blackbox) attribute. This is specified, to let the synthesis tool know that this module is a blackbox. If the module is empty it is assumed to be blackbox anyway, but specifying the attribute makes it more clear."

  2. "VERILOG_FILES_BLACKBOX": "dir::sky130_sram_1kbyte_1rw1r_32x256_8.bb.v",

Is .json the preferred config file vs .tcl? Users are likely to be more familiar with tcl.

What is this variable and where is it to be defined? It should refer to the configuration file with a doc link here: https://openlane.readthedocs.io/en/latest/reference/configuration.html?highlight=verilog_files#macros-chip-integration

remove any such forward looking statements referring to GH issues. The documentation should not make any such promises regarding development plans etc. In the future liberty with proper power/ground pins support will be added, so the creation of blackbox is no longer required. See issue 1273.

  1. Spell check!! <missmatch,behavor> Please spellcheck before asking for a review ! Remove reference to issue no. Add a note instead of this blob of text.

    It is also users responsibility to avoid name collisions between the blackbox macro blocks. If two blackbox modules with the same module name, but different set of parameters exist, then it is possible to get RTL behavor missmatch without any warning. See issue 1291. Change to: Note: Check for name collisions between the blackboxed macro blocks that have same name but different parameters, to avoid a behavioral mismatch.

  2. Connect the layout files and abstracts The paras don't follow guidelines. e.g : In this case absolute path is used, if the PDK location is different then path needs to be changed. -> Use absolute paths if PDK location is different from default location Connect GDS files with the subcomponent.-> what is the meaning of this what is subcomponent. Such statements should be followed by a command not just instructions.

This should be a warning: If you ran the design without this configuration you will get following error: Please use suitable demarcations in the document for warnings, notes and commands. This guideline is not being followed despite multiple reminders.

Also, the user hasn't run the flow yet so why refer to " ran the design.." instead simply issue the warning to use the right pathnames.

  1. Power ground/nets -> Defining Power and Ground nets. "The sky130 caravel template has 4 power domains. If this variable does not have the power domains properly declared then you will have issues with the PDN in caravel template."

There is an abrupt reference to Caravel. Not all OpenLane users use Caravel. Remove this, it is confusing.

This para is confusing: If you unconditionally define the USE_POWER_PINS then powered netlist is generated properly, but the synthesis netlist is generated with signal port vccd1, which should not exist because it is power/ground connection in non powered netlist.

Again, use Warning if you wish to draw the attention of the user to something they should or shouldn't do.

  1. Power/Gnd PDN connections Syntax: . -> separate line for readbility. More information is available in configuration variables documentation. -> Refer to <> for details on configuration variables... Guidelines, guidelines.. please be consistent and refrain from a storytelling format and adhere to professional documentation writing style.

"If the cell is referenced in the submodule then it has the prefix with the submodule name and escaped slash . As can be seen there is two cells sky130_sram_1kbyte_1rw1r_32x256_8 with instance names \submodule.sram0, \submodule.sram1. Directly copy the instance names without the prefix escape symbol: submodule.sram0, submodule.sram1, avoid guessing it." Grammar incorrect, too much text, use commands line cp rather than text instructions .

make this a warning-> If these configuration is missing then power/ground will be missing between netlist and PDN, therefore creating an LVS issue. -> Warning : Omitting explicit power/ground connections as shown, will lead to LVS errors due to missing net connections between netlist and PDN.

Remaining section reviews will be added below.

dralabeing commented 2 years ago
  1. Continuing on 8 above... The para on the use of the back slash is not clear. What is the impact of not using the backslash escape before the instance names?

Omitting FP_PDN_MACRO_HOOKS definitions for connections results in LVS errors. This is conflated/confused with the \ issue. Please clean up this section- also check grammar. Show the PDN connections images for both cases with and without the hooks defined for clarity.

  1. Floorplanning "In order to achieve this, keep the area almost the same, but resize the DIE_AREA to a rectangle that allows 100um all around each macro for standard cells. In the next step the location of macro blocks will be selected."

Die area can also be controlled through utilization. It will be useful to also suggest setting sizing to relative and allow utilization to drive DIE AREA. This statement is not very clear->This value is carefully constructed. If it is set to big value then you are going to have routing/placement/timing issues. On the other hand setting the value too low will cause placement and routing congestion issues. Simply add a note: Choose an optimal DIE area to avoid oversizing to cause timing issues and undersizing to avoid routing congestion.

Routing around macros should be controlled through halos not by manipulating placement density. Show the use of : FP_PDN_HORIZONTAL_HALO and FP_PDN_VERTICAL_HALO. Perhaps this should go under macro placement section.

  1. Macro Cell Placement "The cells need to be placed inside the DIE_AREA, however the automatic placement does not account the I/O placement when selecting sram placement.

It is causing the SRAM component to be placed on the edge of the macro. As a result the I/O power usage is going to be increased, because there is a long net that goes over the subcomponents."

Rewrite this for clarity In this section, we will use manual macro placement to place the macros. Automatic macro placement does not account for I/O pin placement causing the SRAMs to be placed at the edge of the DIE which result in sub-optimal I/O power usage due to long nets.

  1. Resolving issues This looks like a list of problems to avoid before macro hardening. Change title to Common Problems to Avoid

  2. Before hardening the macro block define the I/O pin placement.

vijayank88 commented 2 years ago

@armleo https://armleo-openlane.readthedocs.io/en/merge-window-4/docs/source/openram.html#create-a-new-design remove . at the end of sub-heading.

All other changes already captured by @dralabeing. Please update those and will have final review again.

kareefardi commented 2 years ago

A couple of extra comments:

kareefardi commented 2 years ago

One more question for @dralabeing:

Routing around macros should be controlled through halos not by manipulating placement density. Show the use of : FP_PDN_HORIZONTAL_HALO and FP_PDN_VERTICAL_HALO. Perhaps this should go under macro placement section.

The halo option controls the PDN around the macros. As far as I know there isn't a way (other than explicit obstructions and perhaps regional adjustment through set_global_routing_region_adjustment) that can directly influence signal routing in some places such as over macros

dralabeing commented 2 years ago

@kareefardi Thanks for the clarification on the PDN. OR allows halo and channel definitions to allocate routing resource. Check here - https://github.com/vijayank88/OpenROAD/blob/tutorial_update_1/docs/tutorials/FlowTutorial.md#macro-placement-with-halo-spacing (Vijayan is currently updating the tutorial). I think it will be good to clarify this in OL.

kareefardi commented 2 years ago

Thanks. I didn't know that there was an option for that. It is probably not in openlane yet. I will try to understand it and add to openlane

dralabeing commented 2 years ago

Yes- @kareefardi If you check the ORFS tutorial we also include additional steps for manufacturability as well as reliability like filler cells, tap cells, tie cells, metal fill. This will complete the full VLSI design flow- this should ideally be also included in the tutorial for the OpenLane flow. Please suggest where this should be added as well.

kareefardi commented 2 years ago

openlane has filler, tap and tie. It is done throughout the flow and it could be added in the tutorial in their relevant parts (for instance fill insertion right before routing) I think it already in the other tutorial. I didn't know openroad had metal fill. I could check it out and leverage it in openlane as well.

dralabeing commented 2 years ago

ok- yes filler cells should be done before routing, metal fill after detailed routing. OpenROAD does have it- check out the ORFS tutorial link here: https://github.com/vijayank88/OpenROAD/blob/tutorial_update_1/docs/tutorials/FlowTutorial.md