Added support for real value signals
This commit is contained in:
		| @@ -31,12 +31,12 @@ | ||||
| <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/> | ||||
| <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.minres.scviewer.database.test"/> | ||||
| <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> | ||||
| <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m -Xdock:icon=../Resources/Eclipse.icns -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts"/> | ||||
| <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m"/> | ||||
| <stringAttribute key="pde.version" value="3.3"/> | ||||
| <stringAttribute key="product" value="com.minres.scviewer.e4.product"/> | ||||
| <booleanAttribute key="run_in_ui_thread" value="true"/> | ||||
| <stringAttribute key="selected_target_plugins" value="com.google.guava@default:default,javax.annotation@default:default,javax.inject@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.ant@default:default,org.apache.commons.jxpath@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.codehaus.groovy@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.macosx@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.bidi@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.jface@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.cocoa.macosx.x86_64@default:false,org.eclipse.swt@default:default,org.hamcrest.core@default:default,org.junit@default:default"/> | ||||
| <stringAttribute key="selected_workspace_plugins" value="com.minres.scviewer.database.sqlite@default:true,com.minres.scviewer.database.test@default:default,com.minres.scviewer.database.text@default:true,com.minres.scviewer.database.ui.swt@default:default,com.minres.scviewer.database.ui@default:default,com.minres.scviewer.database.vcd@default:default,com.minres.scviewer.database@default:true,com.opcoach.e4.preferences@default:default"/> | ||||
| <stringAttribute key="selected_target_plugins" value="com.google.guava@default:default,javax.annotation@default:default,javax.inject@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.ant@default:default,org.apache.commons.jxpath@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.codehaus.groovy@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.bidi@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.jface@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt@default:default,org.hamcrest.core@default:default,org.junit@default:default"/> | ||||
| <stringAttribute key="selected_workspace_plugins" value="com.minres.scviewer.database.binary@default:default,com.minres.scviewer.database.sqlite@default:true,com.minres.scviewer.database.test@default:default,com.minres.scviewer.database.text@default:true,com.minres.scviewer.database.ui.swt@default:default,com.minres.scviewer.database.ui@default:default,com.minres.scviewer.database.vcd@default:default,com.minres.scviewer.database@default:true,com.opcoach.e4.preferences@default:default"/> | ||||
| <booleanAttribute key="show_selected_only" value="false"/> | ||||
| <booleanAttribute key="tracing" value="false"/> | ||||
| <booleanAttribute key="useCustomFeatures" value="false"/> | ||||
|   | ||||
| @@ -52,8 +52,16 @@ public interface IVCDDatabaseBuilder { | ||||
| 	 * | ||||
| 	 * @param signalId the int value | ||||
| 	 * @param currentTime the current time in ps | ||||
| 	 * @param decodedValues the decoded values | ||||
| 	 * @param decodedValues the decoded bit values | ||||
| 	 */ | ||||
| 	public void appendTransition(int signalId, long currentTime, BitVector decodedValues); | ||||
|  | ||||
| 	/** | ||||
| 	 * Append transition. | ||||
| 	 * | ||||
| 	 * @param signalId the int value | ||||
| 	 * @param currentTime the current time in ps | ||||
| 	 * @param vValues the real values | ||||
| 	 */ | ||||
| 	public void appendTransition(int signalId, long currentTime, Double values); | ||||
| } | ||||
|   | ||||
| @@ -23,6 +23,7 @@ import com.minres.scviewer.database.BitVector; | ||||
| import com.minres.scviewer.database.ISignal; | ||||
| import com.minres.scviewer.database.ISignalChange; | ||||
| import com.minres.scviewer.database.ISignalChangeMulti; | ||||
| import com.minres.scviewer.database.ISignalChangeReal; | ||||
| import com.minres.scviewer.database.ISignalChangeSingle; | ||||
| import com.minres.scviewer.database.IWaveform; | ||||
| import com.minres.scviewer.database.IWaveformDb; | ||||
| @@ -166,6 +167,17 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder { | ||||
| 		return signal.getWidth(); | ||||
| 	} | ||||
|  | ||||
| 	/* (non-Javadoc) | ||||
| 	 * @see com.minres.scviewer.database.vcd.ITraceBuilder#appendTransition(int, long, com.minres.scviewer.database.vcd.BitVector) | ||||
| 	 */ | ||||
| 	@SuppressWarnings("unchecked") | ||||
| 	@Override | ||||
| 	public void appendTransition(int signalId, long currentTime, Double value) { | ||||
| 		VCDSignal<? extends IWaveformEvent> signal = (VCDSignal<? extends IWaveformEvent>) signals.get(signalId); | ||||
| 		Long time = currentTime*TIME_RES; | ||||
| 		((VCDSignal<ISignalChangeReal>)signal).values.put(time, new VCDSignalChangeReal(time, value)); | ||||
| 	} | ||||
| 	 | ||||
| 	/* (non-Javadoc) | ||||
| 	 * @see com.minres.scviewer.database.vcd.ITraceBuilder#appendTransition(int, long, com.minres.scviewer.database.vcd.BitVector) | ||||
| 	 */ | ||||
| @@ -173,7 +185,7 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder { | ||||
| 	@Override | ||||
| 	public void appendTransition(int signalId, long currentTime, BitVector decodedValues) { | ||||
| 		VCDSignal<? extends IWaveformEvent> signal = (VCDSignal<? extends IWaveformEvent>) signals.get(signalId); | ||||
| 		Long time = currentTime* TIME_RES; | ||||
| 		Long time = currentTime*TIME_RES; | ||||
| 		if(signal.getWidth()==1){ | ||||
| 			((VCDSignal<ISignalChangeSingle>)signal).values.put(time, new VCDSignalChangeSingle(time, decodedValues.getValue()[0])); | ||||
| 		} else { | ||||
|   | ||||
| @@ -147,6 +147,7 @@ class VCDFileParser { | ||||
| 		if (tokenizer.sval.charAt(0) == '#') {	// If the line begins with a #, this is a timestamp. | ||||
| 			currentTime = Long.parseLong(tokenizer.sval.substring(1)) * picoSecondsPerIncrement; | ||||
| 		} else { | ||||
| 			boolean isReal=false; | ||||
| 			if(tokenizer.sval.equals("$comment")){ | ||||
| 				do { | ||||
| 					if (!nextToken()) return false; | ||||
| @@ -161,6 +162,13 @@ class VCDFileParser { | ||||
| 				value = tokenizer.sval.substring(1); | ||||
| 				nextToken(); | ||||
| 				id = tokenizer.sval; | ||||
| 			} else if (tokenizer.sval.charAt(0) == 'r') { | ||||
| 				// real value net. Value appears first, followed by space, | ||||
| 				// then identifier | ||||
| 				value = tokenizer.sval.substring(1); | ||||
| 				nextToken(); | ||||
| 				id = tokenizer.sval; | ||||
| 				isReal=true; | ||||
| 			} else { | ||||
| 				// Single value net. identifier first, then value, no space. | ||||
| 				value = tokenizer.sval.substring(0, 1); | ||||
| @@ -173,40 +181,48 @@ class VCDFileParser { | ||||
| 				return true; | ||||
| 			} | ||||
|  | ||||
| 			int netWidth = traceBuilder.getNetWidth(net); | ||||
| 			BitVector decodedValues = new BitVector(netWidth); | ||||
| 			if (value.equals("z") && netWidth > 1) { | ||||
| 				for (int i = 0; i < netWidth; i++) | ||||
| 					decodedValues.setValue(i, BitVector.VALUE_Z); | ||||
| 			} else if (value.equals("x") && netWidth > 1) { | ||||
| 				for (int i = 0; i < netWidth; i++) | ||||
| 					decodedValues.setValue(i, BitVector.VALUE_X); | ||||
| 			if(isReal) { | ||||
| 				if("nan".equals(value)) { | ||||
| 					traceBuilder.appendTransition(net, currentTime, Double.NaN); | ||||
| 				} else { | ||||
| 					traceBuilder.appendTransition(net, currentTime, Double.parseDouble(value)); | ||||
| 				} | ||||
| 			} else { | ||||
| 				int stringIndex = 0; | ||||
| 				for (int convertedIndex = netWidth - value.length(); convertedIndex < netWidth; convertedIndex++) { | ||||
| 					switch (value.charAt(stringIndex++)) { | ||||
| 					case 'z': | ||||
| 						decodedValues.setValue(convertedIndex, BitVector.VALUE_Z); | ||||
| 						break; | ||||
|  | ||||
| 					case '1': | ||||
| 						decodedValues.setValue(convertedIndex, BitVector.VALUE_1); | ||||
| 						break; | ||||
|  | ||||
| 					case '0': | ||||
| 						decodedValues.setValue(convertedIndex, BitVector.VALUE_0); | ||||
| 						break; | ||||
|  | ||||
| 					case 'x': | ||||
| 						decodedValues.setValue(convertedIndex, BitVector.VALUE_X); | ||||
| 						break; | ||||
|  | ||||
| 					default: | ||||
| 						decodedValues.setValue(convertedIndex, BitVector.VALUE_X); | ||||
| 				int netWidth = traceBuilder.getNetWidth(net); | ||||
| 				BitVector decodedValues = new BitVector(netWidth); | ||||
| 				if (value.equals("z") && netWidth > 1) { | ||||
| 					for (int i = 0; i < netWidth; i++) | ||||
| 						decodedValues.setValue(i, BitVector.VALUE_Z); | ||||
| 				} else if (value.equals("x") && netWidth > 1) { | ||||
| 					for (int i = 0; i < netWidth; i++) | ||||
| 						decodedValues.setValue(i, BitVector.VALUE_X); | ||||
| 				} else { | ||||
| 					int stringIndex = 0; | ||||
| 					for (int convertedIndex = netWidth - value.length(); convertedIndex < netWidth; convertedIndex++) { | ||||
| 						switch (value.charAt(stringIndex++)) { | ||||
| 						case 'z': | ||||
| 							decodedValues.setValue(convertedIndex, BitVector.VALUE_Z); | ||||
| 							break; | ||||
| 	 | ||||
| 						case '1': | ||||
| 							decodedValues.setValue(convertedIndex, BitVector.VALUE_1); | ||||
| 							break; | ||||
| 	 | ||||
| 						case '0': | ||||
| 							decodedValues.setValue(convertedIndex, BitVector.VALUE_0); | ||||
| 							break; | ||||
| 	 | ||||
| 						case 'x': | ||||
| 							decodedValues.setValue(convertedIndex, BitVector.VALUE_X); | ||||
| 							break; | ||||
| 	 | ||||
| 						default: | ||||
| 							decodedValues.setValue(convertedIndex, BitVector.VALUE_X); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				traceBuilder.appendTransition(net, currentTime, decodedValues); | ||||
| 			} | ||||
| 			traceBuilder.appendTransition(net, currentTime, decodedValues); | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
|   | ||||
| @@ -0,0 +1,37 @@ | ||||
| /******************************************************************************* | ||||
|  * Copyright (c) 2015 MINRES Technologies GmbH and others. | ||||
|  * All rights reserved. This program and the accompanying materials | ||||
|  * are made available under the terms of the Eclipse Public License v1.0 | ||||
|  * which accompanies this distribution, and is available at | ||||
|  * http://www.eclipse.org/legal/epl-v10.html | ||||
|  * | ||||
|  * Contributors: | ||||
|  *     MINRES Technologies GmbH - initial API and implementation | ||||
|  *******************************************************************************/ | ||||
| package com.minres.scviewer.database.vcd; | ||||
|  | ||||
| import com.minres.scviewer.database.ISignalChangeReal; | ||||
| import com.minres.scviewer.database.SignalChange; | ||||
|  | ||||
| public class VCDSignalChangeReal extends SignalChange implements ISignalChangeReal, Cloneable { | ||||
|  | ||||
| 	private double value; | ||||
|  | ||||
| 	public VCDSignalChangeReal(Long time, double value) { | ||||
| 		super(time); | ||||
| 		this.value=value; | ||||
| 	} | ||||
|  | ||||
| 	public double getValue() { | ||||
| 		return value; | ||||
| 	} | ||||
|  | ||||
| 	public void setValue(double value) { | ||||
| 		this.value = value; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() { | ||||
| 		return value+"@"+getTime(); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,17 @@ | ||||
| /******************************************************************************* | ||||
|  * Copyright (c) 2015 MINRES Technologies GmbH and others. | ||||
|  * All rights reserved. This program and the accompanying materials | ||||
|  * are made available under the terms of the Eclipse Public License v1.0 | ||||
|  * which accompanies this distribution, and is available at | ||||
|  * http://www.eclipse.org/legal/epl-v10.html | ||||
|  * | ||||
|  * Contributors: | ||||
|  *     MINRES Technologies GmbH - initial API and implementation | ||||
|  *******************************************************************************/ | ||||
| package com.minres.scviewer.database; | ||||
|  | ||||
| public interface ISignalChangeReal extends ISignalChange{ | ||||
|  | ||||
| 	public double getValue(); | ||||
| 	 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user