|  | #!/usr/bin/perl -w | 
|  | use strict; | 
|  |  | 
|  | foreach my $mag (<*.mag>) | 
|  | { | 
|  | my $name=$mag; $name=~s/\.mag$//; | 
|  | system "cp $mag $mag.beforemagic"; | 
|  |  | 
|  | my $width=150; | 
|  | my $min=100; | 
|  | my $max=200; | 
|  |  | 
|  | open IN,"<$mag.beforemagic"; | 
|  | open OUT,">$mag"; | 
|  | while(<IN>) | 
|  | { | 
|  | if(m/string FIXED_BBOX 0 0 (\d+) (\d+)/) | 
|  | { | 
|  | $width=$1; $min=$1-31; $max=$min+31; | 
|  | print "min: $min max: $max\nmagic $mag\nbox $min 17 $max 649\n"; | 
|  | } | 
|  | s/\bVDD\b/VPWR/g; | 
|  | s/\bGND\b/VGND/g; | 
|  | print OUT $_; | 
|  | } | 
|  | close IN; | 
|  | close OUT; | 
|  |  | 
|  | my $cmd=<<EOF | 
|  | snap internal | 
|  |  | 
|  | box 0 683 10000 778 | 
|  | erase locali | 
|  |  | 
|  | box 0 -114 10000 -17 | 
|  | erase locali | 
|  |  | 
|  | box 0 17 31 649 | 
|  | erase locali | 
|  |  | 
|  | box $min 17 $max 649 | 
|  | erase locali | 
|  |  | 
|  | box 0 -17 $width 17 | 
|  | label VGND se locali | 
|  | port make | 
|  | port use ground | 
|  | port shape abutment | 
|  |  | 
|  | box 31 17 $min 48 | 
|  | label VGND se locali | 
|  | port make | 
|  | port use ground | 
|  | port shape abutment | 
|  |  | 
|  | box 0 649 $width 683 | 
|  | label VPWR se locali | 
|  | port make | 
|  | port use power | 
|  | port shape abutment | 
|  |  | 
|  | box 31 618 $min 649 | 
|  | label VGND se locali | 
|  | port make | 
|  | port use power | 
|  | port shape abutment | 
|  |  | 
|  | port renumber | 
|  | save | 
|  | gds | 
|  | property LEFsite unit | 
|  | property LEFsymmetry "X Y" | 
|  | property LEFclass CORE | 
|  | lef write -toplayer | 
|  | quit | 
|  | EOF | 
|  | ; | 
|  | #print $cmd; | 
|  | open MAGIC,"|magic -dnull -noconsole -T sky130A $mag"; | 
|  | print MAGIC $cmd; | 
|  | close MAGIC; | 
|  | system "mv $name.gds ../gds/$name.gds"; | 
|  | #system "mv $name.lef ../lef/$name.lef"; | 
|  | } | 
|  |  |