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

📄 simulation.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	{		// if the window already exists, update the data		if (ww != null)		{			ww.setSimData(sd);			return;		}		Iterator<Analysis> anIt = sd.getAnalyses();		if (!anIt.hasNext())		{			System.out.println("ERROR: No simulation data found: waveform window not shown");			return;		}		Analysis an = anIt.next();		// create a waveform window		WindowFrame wf = WindowFrame.createWaveformWindow(sd);		ww = (WaveformWindow)wf.getContent();		// if the data has an associated cell, see if that cell remembers the signals that were in the waveform window		if (sd.getCell() != null)		{			String [] signalNames = WaveformWindow.getSignalOrder(sd.getCell());			boolean showedSomething = false;			boolean wantUnlockedTime = false;			Analysis.AnalysisType onlyType = null;			for(int i=0; i<signalNames.length; i++)			{				String signalName = signalNames[i];				Signal xAxisSignal = null;				if (signalName.startsWith("\t"))				{					// has panel type and X axis information					int openPos = signalName.indexOf('(');					int tabPos = signalName.indexOf('\t', 1);					if (openPos >= 0) tabPos = openPos;					String analysisName = signalName.substring(1, tabPos);					Analysis.AnalysisType analysisType = Analysis.AnalysisType.findAnalysisType(analysisName);					if (analysisType == null) continue;					an = sd.findAnalysis(analysisType);					if (an == null) continue;					if (openPos >= 0)					{						int closePos = signalName.indexOf(')');						String sigName = signalName.substring(openPos+1, closePos);						xAxisSignal = an.findSignalForNetwork(sigName);						wantUnlockedTime = true;					}				}				if (onlyType == null) onlyType = an.getAnalysisType();				if (an.getAnalysisType() != onlyType) wantUnlockedTime = true;				Panel wp = null;				boolean firstSignal = true;				// add signals to the panel				int start = 0;				for(;;)				{					int tabPos = signalName.indexOf('\t', start);					String sigName = null;					if (tabPos < 0) sigName = signalName.substring(start); else					{						sigName = signalName.substring(start, tabPos);						start = tabPos+1;					}					Signal sSig = an.findSignalForNetwork(sigName);					if (sSig != null)					{						if (firstSignal)						{							firstSignal = false;							wp = new Panel(ww, sd.isAnalog(), an.getAnalysisType());							if (xAxisSignal != null)								wp.setXAxisSignal(xAxisSignal);							wp.makeSelectedPanel(-1, -1);							showedSomething = true;						}						new WaveSignal(wp, sSig);					}					if (tabPos < 0) break;				}			}			if (showedSomething)			{				if (wantUnlockedTime)				{					ww.togglePanelXAxisLock();					for(Iterator<Panel> it = ww.getPanels(); it.hasNext(); )					{						Panel panel = it.next();						panel.makeSelectedPanel(-1, -1);						ww.fillScreen();					}				} else				{					ww.fillScreen();				}				return;			}		}		if (an == null) // wrong format?		{			System.out.println("ERROR: No simulation data found: waveform window not shown");			return;		}		// nothing saved, so show a default set of signals (if it even exists)		if (sd.isAnalog())		{			Panel wp = new Panel(ww, sd.isAnalog(), an.getAnalysisType());			Rectangle2D bounds = an.getBounds();			double lowValue = bounds.getMinY();			double highValue = bounds.getMaxY();			wp.setYAxisRange(lowValue, highValue);			wp.makeSelectedPanel(-1, -1);		} else		{			// put all top-level signals in, up to a limit			int numSignals = 0;			List<Signal> allSignals = an.getSignals();			makeBussedSignals((DigitalAnalysis)an);			for(int i=0; i<allSignals.size(); i++)			{				DigitalSignal sDSig = (DigitalSignal)allSignals.get(i);				if (sDSig.getSignalContext() != null) continue;				if (sDSig.isInBus()) continue;				if (sDSig.getSignalName().indexOf('@') >= 0) continue;				Panel wp = new Panel(ww, sd.isAnalog(), an.getAnalysisType());				wp.makeSelectedPanel(-1, -1);				new WaveSignal(wp, sDSig);				numSignals++;				if (numSignals > 15) break;			}		}		ww.getPanel().validate();		ww.fillScreen();	}	private static void makeBussedSignals(DigitalAnalysis an)	{		List<DigitalSignal> signals = an.getSignals();		for(int i=0; i<signals.size(); i++)		{			Signal sSig = signals.get(i);			int thisBracketPos = sSig.getSignalName().indexOf('[');			if (thisBracketPos < 0) continue;			String prefix = sSig.getSignalName().substring(0, thisBracketPos);			// see how many of the following signals are part of the bus			int j = i+1;			for( ; j<signals.size(); j++)			{				Signal nextSig = signals.get(j);				// other signal must have the same root				int nextBracketPos = nextSig.getSignalName().indexOf('[');				if (nextBracketPos < 0) break;				if (thisBracketPos != nextBracketPos) break;				if (!prefix.equals(nextSig.getSignalName().substring(0, nextBracketPos))) break;				// other signal must have the same context				if (sSig.getSignalContext() == null ^ nextSig.getSignalContext() == null) break;				if (sSig.getSignalContext() != null)				{					if (!sSig.getSignalContext().equals(nextSig.getSignalContext())) break;				}			}			// see how many signals are part of the bus			int numSignals = j - i;			if (numSignals <= 1) continue;			// found a bus of signals: create the bus for it			DigitalSignal busSig = new DigitalSignal(an);			busSig.setSignalName(prefix, sSig.getSignalContext());			busSig.buildBussedSignalList();			for(int k=i; k<j; k++)			{				DigitalSignal subSig = signals.get(k);				busSig.addToBussedSignalList(subSig);			}			i = j - 1;		}	}	/**	 * Class to handle the "Clock specification" dialog.	 */	private static class ClockSpec extends EDialog	{		private double period = -1;		private JRadioButton freqBut, periodBut;		private JTextField freqField, periodField;		public static double getClockSpec()		{			ClockSpec dialog = new ClockSpec(TopLevel.getCurrentJFrame(), true);			dialog.setVisible(true);			return dialog.period;		}		/** Creates new form Clock specification */		public ClockSpec(Frame parent, boolean modal)		{			super(parent, modal);			getContentPane().setLayout(new GridBagLayout());			setTitle("Clock Specification");			setName("");			addWindowListener(new WindowAdapter()			{				public void windowClosing(WindowEvent evt) { closeDialog(evt); }			});			ButtonGroup fp = new ButtonGroup();			// the frequency and period section			freqBut = new JRadioButton("Frequency:");			GridBagConstraints gbc = new GridBagConstraints();			gbc.gridx = 0;   gbc.gridy = 0;			gbc.insets = new Insets(4, 4, 4, 4);			gbc.anchor = GridBagConstraints.WEST;			getContentPane().add(freqBut, gbc);			fp.add(freqBut);			freqField = new JTextField();			freqField.setColumns(12);			gbc = new GridBagConstraints();			gbc.gridx = 1;   gbc.gridy = 0;			gbc.fill = GridBagConstraints.HORIZONTAL;			gbc.insets = new Insets(4, 4, 4, 4);			getContentPane().add(freqField, gbc);			periodBut = new JRadioButton("Period:");			gbc = new GridBagConstraints();			gbc.gridx = 0;   gbc.gridy = 1;			gbc.insets = new Insets(4, 4, 4, 4);			gbc.anchor = GridBagConstraints.WEST;			getContentPane().add(periodBut, gbc);			fp.add(periodBut);			periodBut.setSelected(true);			periodField = new JTextField();			periodField.setColumns(12);			periodField.setText("0.00000001");			gbc = new GridBagConstraints();			gbc.gridx = 1;   gbc.gridy = 1;			gbc.fill = GridBagConstraints.HORIZONTAL;			gbc.insets = new Insets(4, 4, 4, 4);			getContentPane().add(periodField, gbc);			// the OK and Cancel buttons			JButton cancel = new JButton("Cancel");			cancel.addActionListener(new ActionListener()			{				public void actionPerformed(ActionEvent evt) { cancel(evt); }			});			gbc = new GridBagConstraints();			gbc.gridx = 0;   gbc.gridy = 2;			gbc.insets = new Insets(4, 4, 4, 4);			getContentPane().add(cancel, gbc);			JButton ok = new JButton("OK");			ok.addActionListener(new ActionListener()			{				public void actionPerformed(ActionEvent evt) { ok(evt); }			});			gbc = new GridBagConstraints();			gbc.gridx = 1;   gbc.gridy = 2;			gbc.insets = new Insets(4, 4, 4, 4);			getContentPane().add(ok, gbc);			pack();			getRootPane().setDefaultButton(ok);			finishInitialization();		}		protected void escapePressed() { cancel(null); }		private void cancel(ActionEvent evt)		{			closeDialog(null);		}		private void ok(ActionEvent evt)		{			if (freqBut.isSelected())			{				double freq = TextUtils.atof(freqField.getText());				if (freq != 0) period = 1.0 / freq;			} else			{				period = TextUtils.atof(periodField.getText());			}			closeDialog(null);		}		/** Closes the dialog */		private void closeDialog(WindowEvent evt)		{			setVisible(false);			dispose();		}	}	@Override	protected void initProjectSettings()	{		initVerilogProjectSettings();	}	/****************************** FAST HENRY OPTIONS ******************************/	private static Pref cacheFastHenryUseSingleFrequency = Pref.makeBooleanPref("FastHenryUseSingleFrequency", tool.prefs, false);	/**	 * Method to tell whether FastHenry deck generation should use a single frequency.	 * The default is false.	 * @return true if FastHenry deck generation should use a single frequency.	 */	public static boolean isFastHenryUseSingleFrequency() { return cacheFastHenryUseSingleFrequency.getBoolean(); }	/**	 * Method to set whether FastHenry deck generation should use a single frequency.	 * @param s true if FastHenry deck generation should use a single frequency.	 */	public static void setFastHenryUseSingleFrequency(boolean s) { cacheFastHenryUseSingleFrequency.setBoolean(s); }	/**	 * Method to tell whether FastHenry deck generation should use a single frequency, by default.	 * @return true if FastHenry deck generation should use a single frequency, by default.	 */	public static boolean isFactoryFastHenryUseSingleFrequency() { return cacheFastHenryUseSingleFrequency.getBooleanFactoryValue(); }	private static Pref cacheFastHenryStartFrequency = Pref.makeDoublePref("FastHenryStartFrequency", tool.prefs, 0);	/**	 * Method to return the FastHenry starting frequency (or only if using a single frequency).	 * The default is 0.	 * @return the FastHenry starting frequency (or only if using a single frequency).	 */	public static double getFastHenryStartFrequency() { return cacheFastHenryStartFrequency.getDouble(); }	/**	 * Method to set the FastHenry starting frequency (or only if using a single frequency).

⌨️ 快捷键说明

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