⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pspiceout.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
字号:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: PSpiceOut.java * Input/output tool: reader for PSpice text output (.txt) * Written by Steven M. Rubin, Sun Microsystems. * * Copyright (c) 2005 Sun Microsystems and Static Free Software * * Electric(tm) is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Electric(tm) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Electric(tm); see the file COPYING.  If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, Mass 02111-1307, USA. */package com.sun.electric.tool.io.input;import com.sun.electric.database.hierarchy.Cell;import com.sun.electric.database.text.TextUtils;import com.sun.electric.tool.simulation.AnalogAnalysis;import com.sun.electric.tool.simulation.Stimuli;import java.io.IOException;import java.net.URL;import java.util.ArrayList;import java.util.List;/** * Class for reading and displaying waveforms from PSpice and Spice3 output. * These are contained in .txt files. * * Here is an example file: *  Time                  I(Q2:e)               I(C1)                 IB(Q1)                IC(Q1) *  0.000000000000e+000  -1.326552010141e-003  0.000000000000e+000  7.693014595134e-006  1.152132987045e-003 *  2.000000000000e-010  -1.327024307102e-003  -6.724173662320e-009  7.738638487353e-006  1.152158598416e-003 */public class PSpiceOut extends Simulate{	PSpiceOut() {}	/**	 * Method to read an PSpice output file.	 */	protected Stimuli readSimulationOutput(URL fileURL, Cell cell)		throws IOException	{		// open the file		if (openTextInput(fileURL)) return null;		// show progress reading .spo file		startProgressDialog("PSpice output", fileURL.getFile());		// read the actual signal data from the .spo file		Stimuli sd = readPSpiceFile(cell);		// stop progress dialog, close the file		stopProgressDialog();		closeInput();		// return the simulation data		return sd;	}	private Stimuli readPSpiceFile(Cell cell)		throws IOException	{		boolean first = true;		Stimuli sd = new Stimuli();		AnalogAnalysis an = new AnalogAnalysis(sd, AnalogAnalysis.ANALYSIS_SIGNALS, false);		sd.setCell(cell);		List<String> signalNames = new ArrayList<String>();		List<Double> [] values = null;		int numSignals = 0;		for(;;)		{			String line = getLine();			if (line == null) break;			if (first)			{				// check the first line for HSPICE format possibility				first = false;				if (line.length() >= 20)				{					String hsFormat = line.substring(16, 20);					if (hsFormat.equals("9007") || hsFormat.equals("9601"))					{						System.out.println("This is an HSPICE file, not a SPICE3/PSPICE file");						System.out.println("Change the SPICE format (in Preferences) and reread");						return null;					}				}				// parse the signal names on the first line				int ptr = 0;				for(;;)				{					while (ptr < line.length() && Character.isWhitespace(line.charAt(ptr))) ptr++;					if (ptr >= line.length()) break;					int start = ptr;					while (ptr < line.length() && !Character.isWhitespace(line.charAt(ptr))) ptr++;					signalNames.add(line.substring(start, ptr));				}				numSignals = signalNames.size();				values = new List[numSignals];				for(int i=0; i<numSignals; i++)					values[i] = new ArrayList<Double>();				continue;			}			// skip first word if there is an "=" in the line			int equalPos = line.indexOf("=");			if (equalPos >= 0)			{				if (line.length() > (equalPos+3))					line = line.substring(equalPos+3);				else				{					System.out.println("Missing value after '='.  This may not be a PSpice output file.");					return null;				}			}			// read the data values			int ptr = 0;			int position = 0;			for(;;)			{				while (ptr < line.length() && Character.isWhitespace(line.charAt(ptr))) ptr++;				if (ptr >= line.length() || line.charAt(ptr) == ')') break;				int start = ptr;				while (ptr < line.length() && !Character.isWhitespace(line.charAt(ptr))) ptr++;				double value = TextUtils.atof(line.substring(start, ptr));				values[position++].add(new Double(value));			}			if (position != numSignals)			{				System.out.println("Line of data has " + position + " values, but expect " + numSignals +					". Unable to recover from error.  This may not be a PSpice output file.");				return null;			}		}		// convert lists to arrays		if (numSignals == 0)		{			System.out.println("No data found in the file.  This may not be a PSpice output file.");			return null;		}		int numEvents = values[0].size();		an.buildCommonTime(numEvents);		for(int i=0; i<numEvents; i++)		{			an.setCommonTime(i, values[0].get(i).doubleValue());		}		for(int j=1; j<numSignals; j++)		{			double[] doubleValues = new double[numEvents];			for(int i=0; i<numEvents; i++)				doubleValues[i] = values[j].get(i).doubleValue();			an.addSignal(signalNames.get(j), null, doubleValues);		}		return sd;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -