| #!/usr/bin/env python3 |
| # |
| # Plot Bipolar ?beta? I/V curve from devicename + '__beta.data' from running ngspice |
| # on 'bipolar_test.spice' |
| |
| import os |
| import sys |
| import matplotlib.pyplot as plt |
| |
| |
| def make_bipolar_beta_plot(devicepath, devicename, version, corner): |
| |
| with open(devicepath + '/' + devicename + '__beta.data', 'r') as ifile: |
| idata = ifile.read().split() |
| |
| # Reformat data |
| |
| nrows = int(len(idata) / 6) |
| allBeta = list(float(idata[p + 1]) for p in range(0, len(idata), 6)) |
| allVbe = list(float(idata[p + 3]) for p in range(0, len(idata), 6)) |
| allVce = list(float(idata[p + 5]) for p in range(0, len(idata), 6)) |
| |
| # Generate X/Y plots |
| |
| plt.figure() |
| for i in range(0, len(allBeta), 166 * 10): |
| Beta = allBeta[i : i + 166] |
| Vbe = allVbe[i : i + 166] |
| Vce = allVce[i : i + 166] |
| plt.plot(Vce, Beta) |
| |
| title = 'SkyWater sky130 PDK ' + version + ' ' + devicename + ' Beta vs. Vce at corner ' + corner |
| plt.title(title) |
| plt.xlabel('Vce (V)') |
| plt.ylabel('Beta') |
| plt.axis('on') |
| plt.grid('on') |
| plt.savefig(devicepath + '/' + devicename + '_beta_v_vce.svg') |
| |
| plt.figure() |
| for i in range(0, 166, 18): |
| Beta = allBeta[i : len(allBeta): 166] |
| Vbe = allVbe[i : len(allVbe): 166] |
| Vce = allVce[i : len(allVce): 166] |
| plt.plot(Vbe, Beta) |
| |
| title = 'SkyWater sky130 PDK ' + version + ' ' + devicename + ' Beta vs. Vbe at corner ' + corner |
| plt.title(title) |
| plt.xlabel('Vbe (V)') |
| plt.ylabel('Beta') |
| plt.axis('on') |
| plt.grid('on') |
| plt.savefig(devicepath + '/' + devicename + '_beta_v_vbe.svg') |
| |
| |
| if __name__ == '__main__': |
| if len(sys.argv) < 2: |
| print("No device name given to plot_bipolar_beta") |
| sys.exit(1) |
| |
| devicename = sys.argv[1] |
| make_bipolar_beta_plot(os.getcwd(), devicename, version, corner) |