The-OpenROAD-Project / OpenROAD

OpenROAD's unified application implementing an RTL-to-GDS Flow. Documentation at https://openroad.readthedocs.io/en/latest/
https://theopenroadproject.org/
BSD 3-Clause "New" or "Revised" License
1.59k stars 552 forks source link

PDN Question: How to handle multiple power domain connections ? #1505

Open Manarabdelaty opened 2 years ago

Manarabdelaty commented 2 years ago

In this design, we have a macro user_proj_example which has four power domains: vccd1 vccd2 vdda1 vdda2. The issue we are having is that pdngen shorts all the power domains together when it connects the user_proj_example macro to the top level pdn.

For example, here the four pdn stripes inside user_proj_exmaple are shorted together. Screenshot_2022-01-04_14-17-39

user_project_wrapper_pdn_packaged.zip

maliberty commented 2 years ago

@msaligane do you have any comments? I guess you have similar designs in fasoc.

msaligane commented 2 years ago

I think it is more like having multi vdd rings than voltage domain here?

Manarabdelaty commented 2 years ago

This wasn't an issue with a very old versions of openroad (for example: 1415572a73d43dfc91ba4501170fe6a245729e87) because we were able to tell pdngen which pins to connect on the macro by specifying the power_pins / ground_pins keys like:

set macro {
    orient {R0 R180 MX MY R90 R270 MXR90 MYR90}
    power_pins $::env(VDD_NET)
    ground_pins $::env(GND_NET)
    blockages $::env(MACRO_BLOCKAGES_LAYER)
    straps {
    }
    connect {{$::env(FP_PDN_LOWER_LAYER)_PIN_ver $::env(FP_PDN_UPPER_LAYER)}}
}

But, it looks like pdngen is now ignoring the power_pins / ground_pins keys.

maliberty commented 2 years ago

We use power_pins & ground_pins so it is unlikely they are ignored. Perhaps there is some change in behavior.

tspyrou commented 2 years ago

@Colin-Holehouse can you take a look at this one?

tspyrou commented 2 years ago

@abk-openroad fyi for Colin.

Colin-Holehouse commented 2 years ago

The pdngen code was updated to not require the specification of power_pins and ground_pins, insterad the code would look at all the pins on the macro for signal types POWER and GROUND. This works in the case where all POWER pins are to be connected to the same POWER net and all GROUND pins are to be connected to the same GROUND net.

Clearly that is not the requirement here. With the older code base, specifying a subset of the power/ground pins resulted in just the subset beinug connected to the POWER/GROUND nets.

The correct behavior should be for pdngen to check for pins on the macro connected to the logical net before making the physical connection.

The changes I am currently working on will cause pdngen to operate in this way, but will rely on the add_global_connection to be done correctly to create the required logical connection. [Taking a look at the script it seems like this is done correctly already].

I will add a link to the PR once it is submitted.

kareefardi commented 2 years ago

Hello. Any update on this?

mithro commented 2 years ago

I believe that @msaligane has done something like this in his OpenFASoC designs?

msaligane commented 2 years ago

@kareefardi we are currently working on this with @minghungumich and @Colin-Holehouse

However, we have enabled 2 voltage domains in our sensors, ldo using custom scripts to workaround issues.

The issue you filed doesn't provide me with the whole picture of what you are trying to do. Can you please help me understand or provide a testcase of what you're trying to do?