coriolis/vlsisapd/examples/spice/python/parseSpice.py

121 lines
3.5 KiB
Python

import sys
from SPICE import *
def printContents(circuit):
print "+", circuit.title
if len(circuit.getIncludes()):
print "| + includes"
for include in circuit.getIncludes():
print "| |", include
if len(circuit.getLibraries()):
print "| + libraries"
for (lib, typ) in circuit.getLibraries():
print "| |", lib, typ
if len(circuit.getParameters()):
print "| + parameters"
for (name, value) in circuit.getParameters().items():
print "| | %s=%s"%(name, value)
if len(circuit.getOptions()):
print "| + options"
for (name, value) in circuit.getOptions().items():
print "| | %s=%s"%(name, value)
if len(circuit.getSources()):
print "| + sources"
for source in circuit.getSources():
print "| |", source.getName(), source.getPositive(), source.getNegative(), source.getValue()
if len(circuit.getSubckts()):
print "| + subckts"
for sub in circuit.getSubckts():
print "| | +", sub.getName(),
for interf in sub.getInterfaces():
print interf,
if len(sub.getParameters()):
print "param:",
for (name, value) in sub.getParameters().items():
print "%s=%s"%(name,value),
print
for inst in sub.getInstances():
print "| | | +", inst.getName(),
if isinstance(inst, Mosfet):
print inst.getDrain(), inst.getGrid(), inst.getSource(), inst.getBulk(), inst.getModel(),
i = 0
for (name, value) in inst.getParameters().items():
if i%6 == 0:
print
print "| | | | +",
print "%s=%s"%(name, value),
i += 1
elif isinstance(inst, Resistor):
print inst.getFirst(), inst.getSecond(), inst.getValue(),
elif isinstance(inst, Capacitor):
print inst.getPositive(), inst.getNegative(), inst.getValue(),
else:
for conn in inst.getConnectors():
print conn,
print inst.getModel(),
i = 0
for (name, value) in inst.getParameters().items():
if i%6 == 0:
print
print "| | | | +",
print "%s=%s"%(name, value),
i += 1
print
if len(circuit.getInstances()):
print "| + instances"
for inst in circuit.getInstances():
print "| | | +", inst.getName(),
if isinstance(inst, Mosfet):
print inst.getDrain(), inst.getGrid(), inst.getSource(), inst.getBulk(), inst.getModel(),
i = 0
for (name, value) in inst.getParameters().items():
if i%6 == 0:
print
print "| | | | +",
print "%s=%s"%(name, value),
i += 1
elif isinstance(inst, Resistor):
print inst.getFirst(), inst.getSecond(), inst.getValue(),
elif isinstance(inst, Capacitor):
print inst.getPositive(), inst.getNegative(), inst.getValue(),
else:
for conn in inst.getConnectors():
print conn,
print inst.getModel(),
i = 0
for (name, value) in inst.getParameters().items():
if i%6 == 0:
print
print "| | | | +",
print "%s=%s"%(name, value),
i += 1
print
def usage():
print "usage:", sys.argv[0], "[filename]"
sys.exit(48)
def main():
if len(sys.argv) == 1:
filename = "./OTA_miller.spi"
elif len(sys.argv) == 2:
filename = sys.argv[1]
else:
usage()
circuit = Circuit.readFromFile(filename)
printContents(circuit)
if __name__ == "__main__":
main()