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