1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#!/usr/bin/awk -f
# convert an ext2spice produced file to a .sim file for debugging
#
BEGIN {
firstLine = 1 ; gotScale = 0; firstFet = 1;
scale = 100;
}
firstLine == 1 {
if ( firstLine ) {
style = $2 ; firstLine = 0;
if ( style != "HSPICE" && style != "SPICE2" && style != "SPICE3" ) {
print "weird spice style assuming SPICE3" | "cat 1>&2"
}
if ( style == "HSPICE" ) scale = -100;
}
}
$1 ~ /^\.opt/ && $2 ~ /^scale/ {
if ( style != "HSPICE" ) {
print "ERROR: scale found in a non HSPICE file\n" | "cat 1>&2"
exit;
}
l = length($2)-7;
scale = (substr($2, 7, l))*100;
}
$1 ~ /^[m|M]/ {
if ( firstFet ) {
firstFet = 0;
if ( style == "HSPICE" && scale < 0 ) {
print "ERROR: scale not fount in HSPICE file\n"| "cat 1>&2"
exit;
}
printf "| units: %d tech: spice2sim format: MIT\n", scale
scale = scale/100;
}
sl = $8; sw = $7;
ll = length(sl);
lw = length(sw);
if ( style != "HSPICE" ) {
if (substr(sw, lw, 1)!= "u" || substr(sl, ll, 1) != "u") {
print "ERROR: weird units in w/l of fet:\n", $0 | "cat 1>&2"
exit;
}
l = substr(sl, 3, ll-3);
w = substr(sw, 3, lw-3);
} else { # HSPICE
l = substr(sl, 3, ll-2);
w = substr(sw, 3, lw-2);
if ( NF == 9 ) { # get the mult
if ( substr($9, 1, 2) != "M=" ) {
printf "ERROR - weird multiplier : %s\n", $0;
} else w = w * (substr($9, 3, 100)+1.0-1.0);
}
}
printf "%s %s %s %s %.2f %.2f\n", substr($6,1,1), $3, $2, $4, l, w;
}
$1 ~ /^[c|C]/ {
if ( $4 ~ /[0-9]*fF/ )
printf "C %s %s %s\n", $2, $3, substr($4, 1, length($4)-2);
else
printf "ERROR - weird capacitor: %s\n", $0;
}
$1 ~ /^[R|R]/ {
if ( $4 ~ /^[0-9]*/ )
printf "r %s %s %s\n", $2, $3, $4;
else
printf "ERROR - weird resistor: %s\n", $0;
}
$1 ~ /^[q|Q]/ {
print "ERROR: found a bipolar in spice file" | "cat 1>&2"
}
$1 ~ /^[v|V]/ {
print "ERROR: found a voltage source in spice file" | "cat 1>&2"
}
|