@@ -234,10 +234,17 @@ proc parse_wire_rc_chips { keys_var flags_var selector_var } {
234234 return $target_chips
235235}
236236
237- # Layer lookups use the targeted chips' technology when one is selected.
237+ # Layer lookups use the targeted chips' technology when one is selected;
238+ # layers cannot be resolved for chips with different technologies.
238239proc wire_rc_tech { chips } {
239240 if { [llength $chips ] > 0 } {
240241 set tech [[lindex $chips 0] getTech]
242+ foreach chip $chips {
243+ if { [$chip getTech] != $tech } {
244+ utl::error EST 32 " -layer and -layers require chips that share one\
245+ technology; set each chip separately with -chip."
246+ }
247+ }
241248 if { $tech != " NULL" } {
242249 return $tech
243250 }
@@ -491,7 +498,8 @@ proc check_parasitics { } {
491498
492499proc dblayer_wire_rc { layer } {
493500 set layer_width_dbu [$layer getWidth]
494- set layer_width_micron [ord::dbu_to_microns $layer_width_dbu ]
501+ set dbu_per_micron [[$layer getTech] getDbUnitsPerMicron]
502+ set layer_width_micron [expr { double($layer_width_dbu ) / $dbu_per_micron }]
495503 set res_ohm_per_sq [$layer getResistance]
496504 set res_ohm_per_micron [expr $res_ohm_per_sq / $layer_width_micron ]
497505 set cap_area_pf_per_sq_micron [$layer getCapacitance]
@@ -509,7 +517,8 @@ proc dblayer_wire_rc { layer } {
509517proc set_dblayer_wire_rc { layer res cap } {
510518 # Zero the edge cap and just use the user given value
511519 $layer setEdgeCapacitance 0
512- set wire_width [ord::dbu_to_microns [$layer getWidth]]
520+ set dbu_per_micron [[$layer getTech] getDbUnitsPerMicron]
521+ set wire_width [expr { double([$layer getWidth]) / $dbu_per_micron }]
513522 # Convert wire capacitance/wire_length to capacitance/area (pF/um)
514523 set cap_per_square [expr $cap * 1e+6 / $wire_width ]
515524 $layer setCapacitance $cap_per_square
0 commit comments