Skip to content

Lost parasitic annotations because of dbNetwork details #9724

@povik

Description

@povik

Describe the bug

This bug is with hierarchy enabled through -hier.

When creating a parasitic annotation in read_spef, we find the target net using Network::findNetRelative, which calls dbNetwork::findNet, which preferentially returns dbNet* as opposed to dbModNet*.

In the cases I studied, dbNet* is what the parasitic annotation is eventually registered under inside ConcreteParasitics.

When the parasitic is looked up through findParasiticNetwork(Pin*) which internally calls findParasiticNet, we use a dbModNet* to look up the parasitic network, which finds no annotation. This is because dbNetwork::net(Pin *) returns a dbModNet, and highestConnectedNet is a passthrough as defined on dbNetwork.

This makes us miss the annotation on 3777 driver pins on nangate45/bp_multi_top. The check I'm adding in The-OpenROAD-Project/OpenROAD-flow-scripts#3979 should make this visible.

Expected Behavior

No lost or ignored annotations

Environment

OR 02fc8ab5

To Reproduce

See above

Relevant log output

Screenshots

No response

Additional Context

No response

Metadata

Metadata

Assignees

Labels

dbStaBinds sta to odb

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions