File: spice2sim

package info (click to toggle)
magic 7.5.241-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 17,772 kB
  • ctags: 12,301
  • sloc: ansic: 170,465; sh: 10,446; perl: 4,105; lisp: 2,554; tcl: 2,469; makefile: 1,887; cpp: 587; csh: 148; awk: 140
file content (81 lines) | stat: -rwxr-xr-x 1,939 bytes parent folder | download | duplicates (6)
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"
	}