@@ -93,11 +93,17 @@ proc read_macros { file_name } {
9393 } elseif { [regexp {CLASS\s+([^\s]*)} $line - cell_class] } {
9494 dict set cells $cell_name cell_class $cell_class
9595 } elseif { [regexp {ORIGIN\s+([^\s]*)\s+([^\s]*)} $line - origin_x origin_y] } {
96- dict set cells $cell_name origin [lmap x [list $origin_x $origin_y ] { expr round($x * $def_units ) }]
96+ dict set cells $cell_name origin \
97+ [lmap x [list $origin_x $origin_y ] { expr round($x * $def_units ) }]
9798 } elseif { [regexp {FOREIGN\s+([^\s]*)\s+([^\s]*)\s+([^\s]*)} $line - foreign x y] } {
98- dict set cells $cell_name foreign [list ref $foreign origin [lmap x [list $x $y ] { expr round($x * $def_units ) }]]
99+ dict set cells $cell_name foreign \
100+ [list ref $foreign \
101+ origin [lmap x [list $x $y ] { expr round($x * $def_units ) }]]
99102 } elseif { [regexp {SIZE\s+([^\s]*)\s+BY\s+([^\s]*)} $line - width height] } {
100- dict set cells $cell_name die_area [list 0 0 [expr round($width * $def_units )] [expr round($height * $def_units )]]
103+ dict set cells $cell_name die_area \
104+ [list 0 0 \
105+ [expr round($width * $def_units )] \
106+ [expr round($height * $def_units )]]
101107 } elseif { [regexp {SYMMETRY\s+(.*)\s;} $line - symmetry] } {
102108 dict set cells $cell_name symmetry $symmetry
103109 } elseif { [regexp {SITE\s+([^\s]*)} $line - site] } {
@@ -117,7 +123,8 @@ proc read_macros { file_name } {
117123 dict set cells $cell_name pins $pin_name use $use
118124 } elseif { [regexp {ANTENNAMODEL\s+([^\s]*)} $line - antennamodel] } {
119125 continue
120- } elseif { [regexp {ANTENNAGATEAREA\s+([^\s]*)\s+LAYER\s+([^\s]*)} $line - gate_area layer] } {
126+ } elseif { [regexp {ANTENNAGATEAREA\s+([^\s]*)\s+LAYER\s+([^\s]*)} \
127+ $line - gate_area layer] } {
121128 if { [info vars antennamodel] == " " } {
122129 set antennamodel " default"
123130 }
@@ -139,7 +146,8 @@ proc read_macros { file_name } {
139146 }
140147 lappend model [list gate_area $gate_area ]
141148 dict set cells $cell_name pins $pin_name antenna_model $antennamodel $model
142- } elseif { [regexp {ANTENNADIFFAREA\s+([^\s]*)\s+LAYER\s+([^\s]*)} $line - antennadiffarea layer] } {
149+ } elseif { [regexp {ANTENNADIFFAREA\s+([^\s]*)\s+LAYER\s+([^\s]*)} \
150+ $line - antennadiffarea layer] } {
143151 dict set cells $cell_name pins $pin_name antennadiffarea area $antennadiffarea
144152 dict set cells $cell_name pins $pin_name antennadiffarea layer $antennadiffarea
145153 } elseif { [regexp {ANTENNADIFFAREA\s+([^\s]*)\s} $line - antennadiffarea] } {
@@ -155,7 +163,8 @@ proc read_macros { file_name } {
155163 continue
156164 } elseif { [regexp {LAYER\s+([^\s]*)} $line - layer] } {
157165 continue
158- } elseif { [regexp {RECT\s+MASK\s+([^\s]*)\s+([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)} $line - mask x1 y1 x2 y2] } {
166+ } elseif { [regexp {RECT\s+MASK\s+([^\s]*)\s+([0-9\-\.]*)\s\s*([0-9\-\.]*)\
167+ \s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)} $line - mask x1 y1 x2 y2] } {
159168 if { [dict exists $port layers $layer shapes] } {
160169 set layer_shapes [dict get $port layers $layer shapes]
161170 } else {
@@ -168,11 +177,14 @@ proc read_macros { file_name } {
168177 dict set port fixed $offset
169178 }
170179 set new_shape [list \
171- rect [relative_rectangle [lmap x [list $x1 $y1 $x2 $y2 ] { expr round($x * $def_units ) }] $offset ] \
180+ rect [relative_rectangle \
181+ [lmap x [list $x1 $y1 $x2 $y2 ] { expr round($x * $def_units ) }] \
182+ $offset ] \
172183 mask $mask ]
173184 lappend layer_shapes $new_shape
174185 dict set port layers $layer shapes $layer_shapes
175- } elseif { [regexp {RECT\s([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)} $line - x1 y1 x2 y2] } {
186+ } elseif { [regexp {RECT\s([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)\
187+ \s\s*([0-9\-\.]*)} $line - x1 y1 x2 y2] } {
176188 if { [dict exists $port layers $layer shapes] } {
177189 set layer_shapes [dict get $port layers $layer shapes]
178190 } else {
@@ -184,8 +196,11 @@ proc read_macros { file_name } {
184196 set offset [lmap x [list $x1 $y1 ] { expr round($x * $def_units ) }]
185197 dict set port fixed $offset
186198 }
187- set new_shape [list \
188- rect [relative_rectangle [lmap x [list $x1 $y1 $x2 $y2 ] { expr round($x * $def_units ) }] $offset ]]
199+ set new_shape [list \
200+ rect [relative_rectangle \
201+ [lmap x [list $x1 $y1 $x2 $y2 ] { expr round($x * $def_units ) }] \
202+ $offset ] \
203+ ]
189204 lappend layer_shapes $new_shape
190205 dict set port layers $layer shapes $layer_shapes
191206 } elseif { [regexp {END} $line ] } {
@@ -212,26 +227,36 @@ proc read_macros { file_name } {
212227 set line [gets $ch ]
213228 if { [regexp {^\s*$} $line ] } {
214229 continue
215- } elseif { [regexp {LAYER\s+([^\s]*)(\s+DESIGNRULEWIDTH\s+([0-9.]+))?} $line - layer - drw] } {
230+ } elseif { [regexp {LAYER\s+([^\s]*)(\s+DESIGNRULEWIDTH\s+([0-9.]+))?} \
231+ $line - layer - drw] } {
216232 if { $drw != " " } {
217233 dict set cells $cell_name layers $layer drw $drw
218234 }
219235 continue
220- } elseif { [regexp {RECT\s+MASK\s+([^\s]*)\s+([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)} $line - mask x1 y1 x2 y2] } {
236+ } elseif { [regexp {RECT\s+MASK\s+([^\s]*)\s+([0-9\-\.]*)\s\s*([0-9\-\.]*)\
237+ \s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)} $line - mask x1 y1 x2 y2] } {
221238 if { [dict exists $cells $cell_name obstructions $layer ] } {
222239 set obstructions [dict get $cells $cell_name obstructions $layer ]
223240 } else {
224241 set obstructions {}
225242 }
226- lappend obstructions [list rect [lmap x [list $x1 $y1 $x2 $y2 ] { expr round($x * $def_units ) }] mask $mask ]
243+ lappend obstructions [concat \
244+ [list rect [lmap x [list $x1 $y1 $x2 $y2 ] { expr round($x * $def_units ) }]] \
245+ [list mask $mask ] \
246+ ]
227247 dict set cells $cell_name obstructions $layer $obstructions
228- } elseif { [regexp {RECT\s([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)} $line - x1 y1 x2 y2] } {
248+ } elseif { [regexp {RECT\s([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)\
249+ \s\s*([0-9\-\.]*)} $line - x1 y1 x2 y2] } {
229250 if { [dict exists $cells $cell_name obstructions $layer ] } {
230251 set obstructions [dict get $cells $cell_name obstructions $layer ]
231252 } else {
232253 set obstructions {}
233254 }
234- lappend obstructions [list rect [lmap x [list $x1 $y1 $x2 $y2 ] { expr round($x * $def_units ) }]]
255+ lappend obstructions [concat \
256+ [list rect \
257+ [lmap x [list $x1 $y1 $x2 $y2 ] { expr round($x * $def_units ) }] \
258+ ] \
259+ ]
235260 dict set cells $cell_name obstructions $layer $obstructions
236261 } elseif { [regexp {END} $line ] } {
237262 break
@@ -270,6 +295,7 @@ proc write_header { } {
270295proc write_footer { } {
271296
272297}
298+ # tclint-disable-next-line line-length
273299# Read a LEF from a file into a dictionary with the name of the cell as the key and the following entries
274300# - cell_class
275301# - origin
@@ -309,7 +335,10 @@ proc write { design } {
309335 out " ORIGIN 0.0 0.0 ;"
310336 }
311337 out " FOREIGN [ dict get $design foreign ref] [ dict get $design foreign origin] ;"
312- out " SIZE [ expr 1.0 * [lindex [dict get $design die_area] 2] / $def_units ] BY [ expr 1.0 * [lindex [dict get $design die_area] 3] / $def_units ] ;"
338+ out [concat \
339+ " SIZE [ expr 1.0 * [lindex [dict get $design die_area] 2] / $def_units ]" \
340+ " BY [ expr 1.0 * [lindex [dict get $design die_area] 3] / $def_units ] ;" \
341+ ]
313342 out " SYMMETRY [ dict get $design symmetry] ;"
314343 if { [dict exists $design site] } {
315344 out " SITE [ dict get $design site] ;"
@@ -339,7 +368,11 @@ proc write { design } {
339368 set rect [absolute_rectangle [dict get $shape rect] $offset ]
340369
341370 if { [dict exists $shape mask] } {
342- out " RECT MASK [ dict get $shape mask] [ lmap x $rect { expr 1.0 * $x / $def_units }] ;"
371+ out [concat \
372+ " RECT MASK [ dict get $shape mask] " \
373+ " [ lmap x $rect { expr {1.0 * $x / $def_units } }] " \
374+ " ;" \
375+ ]
343376 } else {
344377 out " RECT [ lmap x $rect { expr 1.0 * $x / $def_units }] ;"
345378 }
@@ -357,7 +390,11 @@ proc write { design } {
357390 dict for {layer_name obstructions} [dict get $design obstructions] {
358391 lappend blocked_layers $layer_name
359392 }
360- set sheet " 0 0 [ expr 1.0 * [lindex [dict get $design die_area] 2] / $def_units ] [ expr 1.0 * [lindex [dict get $design die_area] 3] / $def_units ]"
393+ set sheet [concat \
394+ 0 0 \
395+ [expr 1.0 * [lindex [dict get $design die_area] 2] / $def_units ] \
396+ [expr 1.0 * [lindex [dict get $design die_area] 3] / $def_units ] \
397+ ]
361398 foreach layer_name [get_blockage_layers $design ] {
362399 if { [dict exists $design layers $layer_name drw] } {
363400 set drw " DESIGNRULEWIDTH [ dict get $design layers $layer_name drw] "
@@ -371,8 +408,12 @@ proc write { design } {
371408 dict for {layer_name obstructions} [dict get $design obstructions] {
372409 out " LAYER $layer_name ;"
373410 foreach obs $obstructions {
374- if { [dict exists $obs mask] } {
375- out " RECT MASK [ dict get $obs mask] [ lmap x [dict get $obs rect] { expr 1.0 * $x / $def_units }] ;"
411+ if { [dict exists $obs mask] } {
412+ out [concat \
413+ " RECT MASK [ dict get $obs mask] " \
414+ " [ lmap x [dict get $obs rect] { expr {1.0 * $x / $def_units } }]" \
415+ " ;" \
416+ ]
376417 } else {
377418 out " RECT [ lmap x [dict get $obs rect] { expr 1.0 * $x / $def_units }] ;"
378419 }
@@ -536,7 +577,10 @@ proc shift_point { point x y } {
536577}
537578
538579proc shift_rect { rect x y } {
539- return [list [expr [lindex $rect 0] + $x ] [expr [lindex $rect 1] + $y ] [expr [lindex $rect 2] + $x ] [expr [lindex $rect 3] + $y ]]
580+ return [concat \
581+ [list [expr [lindex $rect 0] + $x ] [expr [lindex $rect 1] + $y ]] \
582+ [list [expr [lindex $rect 2] + $x ] [expr [lindex $rect 3] + $y ]] \
583+ ]
540584}
541585
542586proc shift_origin { design x y } {
@@ -724,24 +768,39 @@ proc write { design } {
724768 }
725769
726770 out " "
727- out " DIEAREA ( [ lrange [dict get $design die_area] 0 1] ) ( [ lrange [dict get $design die_area] 2 3] ) ;"
771+ out [concat \
772+ " DIEAREA ( [ lrange [dict get $design die_area] 0 1] )" \
773+ " ( [ lrange [dict get $design die_area] 2 3] ) ;" \
774+ ]
728775
729776 if { [dict exists $design tracks] } {
730777
731778 }
732779
733780 if { [dict exists $design rows] } {
734781 foreach idx [lsort -integer [dict keys $design rows]] {
735- out -nonewline " ROW ROW_$idx [ dict get $design rows $idx site] [ dict get $design rows $idx start] [ dict get $design rows $idx height] [ dict get $design rows $idx orientation] "
736- out " DO [ dict get $design rows $idx num_sites] BY 1 STEP [ dict get $design rows $idx site_width] 0 ;"
782+ out -nonewline [concat \
783+ " ROW ROW_$idx " \
784+ [dict get $design rows $idx site] \
785+ [dict get $design rows $idx start] \
786+ [dict get $design rows $idx height] \
787+ [dict get $design rows $idx orientation] \
788+ ]
789+ out [concat \
790+ " DO [ dict get $design rows $idx num_sites] BY 1 STEP " \
791+ " [ dict get $design rows $idx site_width] 0 ;" \
792+ ]
737793 }
738794 }
739795
740796 if { [dict exists $design pins] } {
741797 out " "
742798 out " PINS [ dict size [dict get $design pins] ] ;"
743799 dict for {pin_name pin} [dict get $design pins] {
744- out -nonewline " - $pin_name + NET [ dict get $pin net_name] + DIRECTION [ dict get $pin direction] "
800+ out -nonewline [concat \
801+ " - $pin_name + NET [ dict get $pin net_name] " \
802+ " + DIRECTION [ dict get $pin direction] " \
803+ ]
745804 if { [dict exists $pin use] } {
746805 out -nonewline " + USE [ dict get $pin use] "
747806 }
@@ -839,7 +898,10 @@ proc write { design } {
839898 set mask " "
840899 }
841900 if { [llength $point ] == 2 } {
842- out -nonewline " + $type [ dict get $route layer] [ get_line_width [dict get $route layer] [ list $first_point $point ] ] "
901+ out -nonewline [concat \
902+ " + $type [ dict get $route layer] " \
903+ " [ get_line_width [dict get $route layer] [ list $first_point $point ] ] " \
904+ ]
843905 out -nonewline $shape
844906 out -nonewline $points
845907 out -nonewline $mask
@@ -870,14 +932,21 @@ proc write { design } {
870932 }
871933 if { [dict exists $net routes] } {
872934 set route [lindex [dict get $net routes] 0]
873- out -nonewline " + ROUTED [ dict get $route layer] [ expr round([dict get $route width] )] + SHAPE [ dict get $route shape] "
935+ out -nonewline [concat \
936+ " + ROUTED [ dict get $route layer] " \
937+ " [ expr round([dict get $route width] )] " \
938+ " + SHAPE [ dict get $route shape] " \
939+ ]
874940 foreach point [dict get $route points] {
875941 out -nonewline " $point "
876942 }
877943 out " "
878944
879945 foreach route [lrange [dict get $net routes] 1 end] {
880- out " NEW [ dict get $route layer] [ expr round([dict get $route width] )] + SHAPE [ dict get $route shape] "
946+ out [concat \
947+ " NEW [ dict get $route layer] [ expr round([dict get $route width] )]" \
948+ " + SHAPE [ dict get $route shape] " \
949+ ]
881950 foreach point [dict get $route points] {
882951 out -nonewline " $point "
883952 }
0 commit comments