121 lines
3.5 KiB
Python
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()
|
|
|