When hardening the user_project_wrapper with a user project macro that fills the full user area (2860x3505 um on sky130A), the OpenLane 2 flow fails at multiple stages. Two distinct issues encountered.
The wrapper hardening flow should complete for user projects that fill the full Caravel user area. The flow should handle analog power nets (vccd2, vdda1, vdda2, vssa1, vssa2, vssd2) that are outside the user project die boundary without treating them as routable signal nets.
The Environment is,
OpenLane: 2.3.10
PDK: sky130A
OS: Ubuntu 24.04 WSL2
Caravel user project template: latest main
Issue 1 - defutil.py crash:
Odb.ApplyDEFTemplate crashes with:
AttributeError: 'NoneType' object has no attribute 'setSigType'
File "defutil.py", line 257, in relocate_pins
pin_bterm.setSigType(bterm.getSigType())
Fix: add None check before setSigType call
Also filter None values from output_bterms list before iteration
Filed as bug in openlane2: [link to your first issue]
Issue 2 - Analog power net routing:
GlobalRouting fails with:
[GRT-0209] Pin vccd2 is completely outside the die area and cannot be routed
Root cause: vccd2, vdda1, vdda2, vssa1, vssa2, vssd2 are Caravel IO ring
power nets that sit outside the user project area. The global router
treats them as signal nets and tries to route them.
Workaround: Mark these nets as SPECIAL in the PDN TCL before routing.
Workaround applied:
In pdn.tcl, after set_global_connections:
foreach net_name {vccd2 vdda1 vdda2 vssd2 vssa1 vssa2} {
set net [[ord::get_db_block] findNet $net_name]
if {$net != "NULL"} {
$net setSpecial 1
$net setSigType POWER
}
}
When hardening the user_project_wrapper with a user project macro that fills the full user area (2860x3505 um on sky130A), the OpenLane 2 flow fails at multiple stages. Two distinct issues encountered.
The wrapper hardening flow should complete for user projects that fill the full Caravel user area. The flow should handle analog power nets (vccd2, vdda1, vdda2, vssa1, vssa2, vssd2) that are outside the user project die boundary without treating them as routable signal nets.
The Environment is,
OpenLane: 2.3.10
PDK: sky130A
OS: Ubuntu 24.04 WSL2
Caravel user project template: latest main
Issue 1 - defutil.py crash:
Odb.ApplyDEFTemplate crashes with:
AttributeError: 'NoneType' object has no attribute 'setSigType'
File "defutil.py", line 257, in relocate_pins
pin_bterm.setSigType(bterm.getSigType())
Fix: add None check before setSigType call
Also filter None values from output_bterms list before iteration
Filed as bug in openlane2: [link to your first issue]
Issue 2 - Analog power net routing:
GlobalRouting fails with:
[GRT-0209] Pin vccd2 is completely outside the die area and cannot be routed
Root cause: vccd2, vdda1, vdda2, vssa1, vssa2, vssd2 are Caravel IO ring
power nets that sit outside the user project area. The global router
treats them as signal nets and tries to route them.
Workaround: Mark these nets as SPECIAL in the PDN TCL before routing.
Workaround applied:
In pdn.tcl, after set_global_connections:
foreach net_name {vccd2 vdda1 vdda2 vssd2 vssa1 vssa2} {
set net [[ord::get_db_block] findNet $net_name]
if {$net != "NULL"} {
$net setSpecial 1
$net setSigType POWER
}
}