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

📄 busparameters.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	 * Added for ArchGen Plugin - BVE	 * @param var	 * @param lib	 * @param libParameters	 * @return	 */	private static String replaceVariableInString(String var, Library lib, Map<Library,String[]> libParameters) {		String varString = var;		for(;;)		{			int dollarPos = varString.indexOf("$(");			if (dollarPos < 0) break;			int closePos = varString.indexOf(')', dollarPos);			if (closePos < 0)			{				System.out.println("ERROR: Bus parameter '" + varString + "' is missing the close parenthesis");				break;			}			String varName = varString.substring(dollarPos+2, closePos);			String [] paramList = libParameters.get(lib);			String paramValue = null;			if (paramList != null) {				paramValue = findParameterValue(paramList, varName);			}			if (paramValue == null)			{				for(Iterator<Library> it = Library.getLibraries(); it.hasNext(); )				{					Library aLib = it.next();					if (aLib == lib || aLib.isHidden()) continue;					paramList = libParameters.get(aLib);					paramValue = findParameterValue(paramList, varName);					if (paramValue != null) break;				}				if (paramValue == null)				{					System.out.println("ERROR: Bus parameter '" + varName + "' is not defined");					break;				}			}			varString = varString.substring(0, dollarPos) + paramValue + varString.substring(closePos+1);		}		return varString;	}		private static String updateVariable(Variable var, Library lib, Map<Library,String[]> libParameters)	{		// first substitute variable names		String varString = (String)var.getObject();		// BVE - Old code refactored into helper function		varString = replaceVariableInString(varString, lib, libParameters);		// now that variables are substituted, handle arithmetic		for(int i=0; i<varString.length(); i++)		{			char op = varString.charAt(i);			if (op != '+' && op != '-' && op != '*' && op != '/') continue;			// gather number before the operator			int start = i;			while (start > 0 && TextUtils.isDigit(varString.charAt(start-1))) start--;			int end = i;			while (end+1 < varString.length() && TextUtils.isDigit(varString.charAt(end+1))) end++;			if (start < i && end > i)			{				// found numbers				int startVal = TextUtils.atoi(varString.substring(start));				int endVal = TextUtils.atoi(varString.substring(i+1));				int res = 0;				if (op == '+')				{					res = startVal + endVal;				} else if (op == '-')				{					res = startVal - endVal;				} else if (op == '*')				{					res = startVal * endVal;				} else if (op == '/')				{					if (endVal != 0) res = startVal / endVal;				}				String newString = Integer.toString(res);				varString = varString.substring(0, start) + newString + varString.substring(end+1);				i = start + newString.length() - 1;			}		}		return varString;	}	private static String findParameterValue(String [] parameterList, String varName)	{		for(int i=0; i<parameterList.length; i++)		{			String param = parameterList[i];			int equalPos = param.indexOf('=');			if (equalPos < 0) continue;			if (varName.equalsIgnoreCase(param.substring(0, equalPos)))				return param.substring(equalPos+1);		}		return null;	}	/**	 * Class to create a bus template on an arc or export.	 */	private static class AddTemplate extends Job	{		private ElectricObject owner;		private String templateString;		private AddTemplate(ElectricObject owner)		{			super("Create Bus Parameter", User.getUserTool(), Job.Type.CHANGE, null, null, Job.Priority.USER);			this.owner = owner;			this.templateString = "";			startJob();		}				/**		 * Constructor for adding a bus parameter template to an ElectricObject immediately or as a job.		 * Added the ability to append a string to the template		 * Added for ArchGen Plugin - BVE		 * @param owner		 * @param suffix		 * @return		 */		private AddTemplate(ElectricObject owner, boolean doItNow, String initValue)		{			super("Create Bus Parameter", User.getUserTool(), Job.Type.CHANGE, null, null, Job.Priority.USER);			this.owner = owner;			this.templateString = initValue;			if (doItNow) {			   try {doIt();} catch (Exception e) {e.printStackTrace();}			}else {				startJob();			}		}		public boolean doIt() throws JobException		{			if (owner instanceof NodeInst)			{				// add template to node				NodeInst ni = (NodeInst)owner;				TextDescriptor td = ni.getTextDescriptor(NodeInst.NODE_NAME);				double relSize = 1;				if (!td.getSize().isAbsolute())					relSize = td.getSize().getSize();				td = td.withOff(td.getXOff(), td.getYOff() - relSize*1.5).withRelSize(relSize/2).withDispPart(TextDescriptor.DispPos.NAMEVALUE);				if(!templateString.equals("")) {					ni.newVar(NODE_BUS_TEMPLATE, ni.getName()+templateString, td);								}else {					ni.newVar(NODE_BUS_TEMPLATE, ni.getName(), td);				}			} else if (owner instanceof ArcInst)			{				// add template to arc				ArcInst ai = (ArcInst)owner;				TextDescriptor td = ai.getTextDescriptor(ArcInst.ARC_NAME);				double relSize = 1;				if (!td.getSize().isAbsolute())					relSize = td.getSize().getSize();				td = td.withOff(td.getXOff(), td.getYOff() - relSize*1.5).withRelSize(relSize/2).withDispPart(TextDescriptor.DispPos.NAMEVALUE);				if(!templateString.equals("")) {					ai.newVar(ARC_BUS_TEMPLATE, ai.getName()+templateString, td);				}else {					ai.newVar(ARC_BUS_TEMPLATE, ai.getName(), td);				}			} else			{				// add template to export				Export e = (Export)owner;				TextDescriptor td = e.getTextDescriptor(Export.EXPORT_NAME);				double relSize = 1;				if (!td.getSize().isAbsolute())					relSize = td.getSize().getSize();				td = td.withOff(td.getXOff(), td.getYOff() - relSize*1.5).withRelSize(relSize/2).withDispPart(TextDescriptor.DispPos.NAMEVALUE);				if(!templateString.equals("")) {					e.newVar(EXPORT_BUS_TEMPLATE, e.getName()+templateString, td);				}else {					e.newVar(EXPORT_BUS_TEMPLATE, e.getName(), td);				}			}			return true;		}	}	/** This method is called from within the constructor to	 * initialize the form.	 * WARNING: Do NOT modify this code. The content of this method is	 * always regenerated by the Form Editor.	 */	// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents    private void initComponents() {        java.awt.GridBagConstraints gridBagConstraints;        done = new javax.swing.JButton();        jLabel1 = new javax.swing.JLabel();        libraryPopup = new javax.swing.JComboBox();        variablesPane = new javax.swing.JScrollPane();        jLabel2 = new javax.swing.JLabel();        value = new javax.swing.JTextField();        update = new javax.swing.JButton();        deleteVariable = new javax.swing.JButton();        newVariable = new javax.swing.JButton();        jLabel3 = new javax.swing.JLabel();        jSeparator1 = new javax.swing.JSeparator();        getContentPane().setLayout(new java.awt.GridBagLayout());        setTitle("Bus Parameters");        setName("");        addWindowListener(new java.awt.event.WindowAdapter() {            public void windowClosing(java.awt.event.WindowEvent evt) {                closeDialog(evt);            }        });        getAccessibleContext().setAccessibleName("Bus Parameters");        done.setText("Done");        done.addActionListener(new java.awt.event.ActionListener() {            public void actionPerformed(java.awt.event.ActionEvent evt) {                doneActionPerformed(evt);            }        });        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 2;        gridBagConstraints.gridy = 8;        gridBagConstraints.weightx = 0.5;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(done, gridBagConstraints);        jLabel1.setText("Library:");        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 0;        gridBagConstraints.gridy = 0;        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(jLabel1, gridBagConstraints);        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 1;        gridBagConstraints.gridy = 0;        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(libraryPopup, gridBagConstraints);        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 0;        gridBagConstraints.gridy = 2;        gridBagConstraints.gridwidth = 2;        gridBagConstraints.gridheight = 7;        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;        gridBagConstraints.weightx = 0.5;        gridBagConstraints.weighty = 1.0;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(variablesPane, gridBagConstraints);        jLabel2.setText("Parameters:");        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 0;        gridBagConstraints.gridy = 1;        gridBagConstraints.gridwidth = 2;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(jLabel2, gridBagConstraints);        value.setColumns(8);        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 2;        gridBagConstraints.gridy = 3;        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;        gridBagConstraints.weightx = 0.5;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(value, gridBagConstraints);        update.setText("Update All Templates");        update.addActionListener(new java.awt.event.ActionListener() {            public void actionPerformed(java.awt.event.ActionEvent evt) {                updateActionPerformed(evt);            }        });        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 2;        gridBagConstraints.gridy = 7;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(update, gridBagConstraints);        deleteVariable.setText("Delete Parameter");        deleteVariable.addActionListener(new java.awt.event.ActionListener() {            public void actionPerformed(java.awt.event.ActionEvent evt) {                deleteVariableActionPerformed(evt);            }        });        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 2;        gridBagConstraints.gridy = 5;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(deleteVariable, gridBagConstraints);        newVariable.setText("New Parameter");        newVariable.addActionListener(new java.awt.event.ActionListener() {            public void actionPerformed(java.awt.event.ActionEvent evt) {                newVariableActionPerformed(evt);            }        });        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 2;        gridBagConstraints.gridy = 4;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(newVariable, gridBagConstraints);        jLabel3.setText("Parameter Value:");        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 2;        gridBagConstraints.gridy = 2;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(jLabel3, gridBagConstraints);        gridBagConstraints = new java.awt.GridBagConstraints();        gridBagConstraints.gridx = 2;        gridBagConstraints.gridy = 6;        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);        getContentPane().add(jSeparator1, gridBagConstraints);        pack();    }    // </editor-fold>//GEN-END:initComponents    private void newVariableActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newVariableActionPerformed		String libName = (String)libraryPopup.getSelectedItem();		Library lib = Library.findLibrary(libName);		if (lib == null) return;		String [] parameterList = libParameters.get(lib);		String newParName = Job.getUserInterface().askForInput("New Bus Parameter Name:", "Create New Bus Parameter", "");		if (newParName == null) return;		// make sure the name is unique		int insertAfter = -1;		for(int i=0; i<parameterList.length; i++)		{			int equalPos = parameterList[i].indexOf('=');			if (equalPos < 0) continue;			String varName = parameterList[i].substring(0, equalPos);			if (varName.equalsIgnoreCase(newParName))			{				Job.getUserInterface().showErrorMessage("That bus parameter name already exists", "Duplicate Name");				return;			}			if (varName.compareToIgnoreCase(newParName) < 0) insertAfter = i;		}		String [] newParameterList = new String[parameterList.length+1];		int j = 0;		for(int i=0; i<parameterList.length; i++)		{			if (i == insertAfter+1) newParameterList[j++] = newParName + "=1";			newParameterList[j++] = parameterList[i];		}		if (parameterList.length == insertAfter+1) newParameterList[j++] = newParName + "=1";		libParameters.put(lib, newParameterList);		new UpdateLibrary(lib, newParameterList);		libraryChanged();    }//GEN-LAST:event_newVariableActionPerformed	private void deleteVariableActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteVariableActionPerformed		String libName = (String)libraryPopup.getSelectedItem();		Library lib = Library.findLibrary(libName);		if (lib == null) return;		String [] parameterList = libParameters.get(lib);		int selectedIndex = parametersList.getSelectedIndex();		if (selectedIndex < 0 || selectedIndex >= parameterList.length) return;		String [] newParameterList = new String[parameterList.length-1];		int j = 0;		for(int i=0; i<parameterList.length; i++)		{			if (i != selectedIndex) newParameterList[j++] = parameterList[i];		}		libParameters.put(lib, newParameterList);		new UpdateLibrary(lib, newParameterList);		libraryChanged();    }//GEN-LAST:event_deleteVariableActionPerformed    private void updateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_updateActionPerformed		new UpdateAllParameters(libParameters);    }//GEN-LAST:event_updateActionPerformed    private void doneActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doneActionPerformed		closeDialog(null);    }//GEN-LAST:event_doneActionPerformed	/** Closes the dialog */	private void closeDialog(java.awt.event.WindowEvent evt)//GEN-FIRST:event_closeDialog	{		setVisible(false);		dispose();	}//GEN-LAST:event_closeDialog    // Variables declaration - do not modify//GEN-BEGIN:variables    private javax.swing.JButton deleteVariable;    private javax.swing.JButton done;    private javax.swing.JLabel jLabel1;    private javax.swing.JLabel jLabel2;    private javax.swing.JLabel jLabel3;    private javax.swing.JSeparator jSeparator1;    private javax.swing.JComboBox libraryPopup;    private javax.swing.JButton newVariable;    private javax.swing.JButton update;    private javax.swing.JTextField value;    private javax.swing.JScrollPane variablesPane;    // End of variables declaration//GEN-END:variables}

⌨️ 快捷键说明

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