Commit 03f8c5bd authored by Andrey Filippov's avatar Andrey Filippov

Updated private vdt repository to the later changes in the open vdt-plugin one

parent 6ae5df1f
...@@ -361,6 +361,12 @@ ...@@ -361,6 +361,12 @@
<extension <extension
point="org.eclipse.core.variables.dynamicVariables"> point="org.eclipse.core.variables.dynamicVariables">
<variable
name="verilog_project_loc"
description="Returns the absolute file system path of the project."
resolver="com.elphel.vdt.ui.variables.VerilogResolver"
supportsArgument="true">
</variable>
<variable <variable
name="verilog_source_loc" name="verilog_source_loc"
description="%verilog_source_loc.description" description="%verilog_source_loc.description"
......
...@@ -39,7 +39,6 @@ import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; ...@@ -39,7 +39,6 @@ import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Display;
import com.elphel.vdt.Txt; import com.elphel.vdt.Txt;
import com.elphel.vdt.core.tools.contexts.BuildParamsItem;
import com.elphel.vdt.ui.MessageUI; import com.elphel.vdt.ui.MessageUI;
import com.elphel.vdt.veditor.VerilogPlugin; import com.elphel.vdt.veditor.VerilogPlugin;
import com.elphel.vdt.veditor.preference.PreferenceStrings; import com.elphel.vdt.veditor.preference.PreferenceStrings;
......
...@@ -139,7 +139,7 @@ public class XMLConfig extends Config { ...@@ -139,7 +139,7 @@ public class XMLConfig extends Config {
static final String CONTEXT_TOOL_LOG_DIRECTORY = "log-dir"; // folder to store the tool log files static final String CONTEXT_TOOL_LOG_DIRECTORY = "log-dir"; // folder to store the tool log files
static final String CONTEXT_TOOL_STATE_DIRECTORY = "state-dir"; // folder to store the tool state (snapshot) files static final String CONTEXT_TOOL_STATE_DIRECTORY = "state-dir"; // folder to store the tool state (snapshot) files
static final String CONTEXT_TOOL_DISABLED = "disabled"; // Parameter name that disables the tool if true static final String CONTEXT_TOOL_DISABLED = "disable"; // Parameter name that disables the tool if true
static final String CONTEXT_TOOL_RESULT = "result"; // Parameter name keeps the filename representing result (snapshot) static final String CONTEXT_TOOL_RESULT = "result"; // Parameter name keeps the filename representing result (snapshot)
static final String CONTEXT_TOOL_RESTORE = "restore"; // tool name that restores the state from result (shapshot) static final String CONTEXT_TOOL_RESTORE = "restore"; // tool name that restores the state from result (shapshot)
static final String CONTEXT_TOOL_SAVE = "save"; // tool name that saves the state to result file (snapshot) static final String CONTEXT_TOOL_SAVE = "save"; // tool name that saves the state to result file (snapshot)
......
...@@ -35,6 +35,12 @@ import java.util.Iterator; ...@@ -35,6 +35,12 @@ import java.util.Iterator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.variables.IDynamicVariable;
import org.eclipse.core.variables.IStringVariableManager;
import org.eclipse.core.variables.IValueVariable;
import org.eclipse.core.variables.VariablesPlugin;
import com.elphel.vdt.core.tools.ToolsCore; import com.elphel.vdt.core.tools.ToolsCore;
import com.elphel.vdt.core.tools.config.Config; import com.elphel.vdt.core.tools.config.Config;
import com.elphel.vdt.core.tools.config.ConfigException; import com.elphel.vdt.core.tools.config.ConfigException;
...@@ -327,7 +333,7 @@ public abstract class Context { ...@@ -327,7 +333,7 @@ public abstract class Context {
for(Iterator<String> lineIter = lines.iterator(); lineIter.hasNext();) { for(Iterator<String> lineIter = lines.iterator(); lineIter.hasNext();) {
String line = (String)lineIter.next(); String line = (String)lineIter.next();
// the result will not be used as some other parameter value, so topProcessor is null in the next line /Andrey // the result will not be used as some other parameter value, so topProcessor is null in the next line /Andrey
commandSequence.add(buildCommandString(line,null)); // TODO: parses them here? VERIFY commandSequence.add(resolveStrings(buildCommandString(line,null))); // TODO: parses them here? VERIFY
} }
// Here - already resolved to empty // Here - already resolved to empty
...@@ -736,4 +742,89 @@ public abstract class Context { ...@@ -736,4 +742,89 @@ public abstract class Context {
if(initialized) if(initialized)
throw new ConfigException("Context cannot be re-initialized"); throw new ConfigException("Context cannot be re-initialized");
} }
//Substitute Eclipse and VDT ("verilog_") strings ${} here, after all VDT parameter processing
// recursively resolve variables
private List<String> resolveStrings(List<String> preResolved){
List<String> resolved = new ArrayList<String>();
for (String s:preResolved){
resolved.add(resolveStrings(s));
}
return resolved;
}
private String resolveStrings(String s){
int start = s.indexOf("${");
if (start < 0) return s;
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_OTHER)) System.out.println("Before substitution\""+s+"\"");
int end = s.indexOf("}", start);
if (end < 0) return s;
String dynVar = s.substring(start+2,end).trim();
String dynValue = resolveEclipseVariables(dynVar);
if (dynValue == null) {
System.out.println("getEclipseSubstitutedString("+s+") - undefined variable: "+dynVar);
dynValue = s.substring(start,end+1); // just no substitution
}
String result = s.substring(0,start)+dynValue;
if (end < s.length()) result += resolveStrings(s.substring(end+1));
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_OTHER)) System.out.println("After substitution\""+result+"\"");
return result;
}
// from http://www.programcreek.com/java-api-examples/index.php?api=org.eclipse.core.variables.IDynamicVariable
private String resolveEclipseVariables(String key){
if (key == null) return null;
IStringVariableManager variableManager=VariablesPlugin.getDefault().getStringVariableManager();
//debug
/*
IValueVariable [] variables = variableManager.getValueVariables();
IDynamicVariable [] dVariables = variableManager.getDynamicVariables();
System.out.println("resolveEclipseVariables: key=" + key);
for (IValueVariable v : variables){
System.out.println("resolveEclipseVariables: variables=" + v.getValue());
}
for (IDynamicVariable dv : dVariables){
if (!dv.getName().contains("prompt")) {
try {
System.out.print("resolveEclipseVariables: dVariables=" + dv.getName());
System.out.println(" -- "+dv.getValue(null));
} catch (CoreException e) {
// TODO Auto-generated catch block
System.out.println(" -- null?");
}
}
}
*/
int index=key.indexOf(':');
if (index > 1) {
String varName=key.substring(0,index);
IDynamicVariable variable=variableManager.getDynamicVariable(varName);
if (variable == null) return null;
try {
if (key.length() > index + 1) return variable.getValue(key.substring(index + 1));
return variable.getValue(null);
}
catch ( CoreException e) {
return null;
}
}
IValueVariable variable=variableManager.getValueVariable(key);
if (variable == null) {
IDynamicVariable dynamicVariable=variableManager.getDynamicVariable(key);
if (dynamicVariable == null) return null;
try {
return dynamicVariable.getValue(null);
}
catch ( CoreException e) {
return null;
}
}
return variable.getValue();
}
} }
...@@ -46,7 +46,7 @@ import com.elphel.vdt.core.tools.params.types.ParamTypeBool; ...@@ -46,7 +46,7 @@ import com.elphel.vdt.core.tools.params.types.ParamTypeBool;
import com.elphel.vdt.core.tools.params.types.ParamTypeString; import com.elphel.vdt.core.tools.params.types.ParamTypeString;
import com.elphel.vdt.core.tools.params.types.ParamTypeString.KIND; import com.elphel.vdt.core.tools.params.types.ParamTypeString.KIND;
import com.elphel.vdt.core.tools.params.types.RunFor; import com.elphel.vdt.core.tools.params.types.RunFor;
import com.elphel.vdt.ui.MessageUI; //import com.elphel.vdt.ui.MessageUI;
import com.elphel.vdt.ui.VDTPluginImages; import com.elphel.vdt.ui.VDTPluginImages;
import com.elphel.vdt.ui.views.DesignFlowView; import com.elphel.vdt.ui.views.DesignFlowView;
import com.elphel.vdt.ui.variables.SelectedResourceManager; import com.elphel.vdt.ui.variables.SelectedResourceManager;
...@@ -227,6 +227,7 @@ public class Tool extends Context implements Cloneable, Inheritable { ...@@ -227,6 +227,7 @@ public class Tool extends Context implements Cloneable, Inheritable {
this.stateDirString= stateDirString; this.stateDirString= stateDirString;
this.disabledString= disabledString; // to disable tools from automatic running this.disabledString= disabledString; // to disable tools from automatic running
this.resultString= resultString; // parameter name of kind of file that represents state after running this tool this.resultString= resultString; // parameter name of kind of file that represents state after running this tool
this.restoreString= restoreString; // name of tool that restores the state of this tool ran (has own dependencies) this.restoreString= restoreString; // name of tool that restores the state of this tool ran (has own dependencies)
this.saveString= saveString; // name of tool that saves the state of this tool run this.saveString= saveString; // name of tool that saves the state of this tool run
...@@ -239,7 +240,7 @@ public class Tool extends Context implements Cloneable, Inheritable { ...@@ -239,7 +240,7 @@ public class Tool extends Context implements Cloneable, Inheritable {
result=null; result=null;
dependStates=null; dependStates=null;
dependFiles=null; dependFiles=null;
DEBUG_PRINT("Created tool"+name+" disabledString = "+disabledString);
pinned=false; pinned=false;
openState=null; openState=null;
openTool=null; openTool=null;
...@@ -577,14 +578,20 @@ public class Tool extends Context implements Cloneable, Inheritable { ...@@ -577,14 +578,20 @@ public class Tool extends Context implements Cloneable, Inheritable {
"' must be of type '" + ParamTypeBool.NAME + "' must be of type '" + ParamTypeBool.NAME +
"'"); "'");
} }
DEBUG_PRINT("initDisabled() tool "+name+" disabled = "+disabled); // parameter, not value
} }
public boolean isDisabled(){ public boolean isDisabled(){
if (abstractTool) return true; // abstract are always disabled if (abstractTool) return true; // abstract are always disabled
if (disabled==null) return false; if (disabled==null) return false;
List<String> values=disabled.getValue(new FormatProcessor(this)); // null for topFormatProcessor List<String> values=disabled.getValue(new FormatProcessor(this)); // null for topFormatProcessor
if ((values==null) || (values.size()==0)) return false; if ((values==null) || (values.size()==0)) {
return (!values.get(0).equals("true")); DEBUG_PRINT(name+".isDisabled() ==> FALSE (((values==null) || (values.size()==0)))");
return false;
}
DEBUG_PRINT(name+".isDisabled() ==> "+values.get(0).equals("true"));
// return (!values.get(0).equals("true"));
return (values.get(0).equals("true"));
} }
public void initDepends() throws ConfigException{ public void initDepends() throws ConfigException{
......
...@@ -530,8 +530,8 @@ java.lang.NullPointerException ...@@ -530,8 +530,8 @@ java.lang.NullPointerException
DEBUG_PRINT("Could not find enabled tool to provide state "+state); DEBUG_PRINT("Could not find enabled tool to provide state "+state);
return null; return null;
} else { } else {
MessageUI.error("No tool provide state "+state); MessageUI.error("No tool provides state "+state);
DEBUG_PRINT("No tool provide state "+state); DEBUG_PRINT("No tool provides state "+state);
return null; return null;
} }
} }
...@@ -698,8 +698,8 @@ java.lang.NullPointerException ...@@ -698,8 +698,8 @@ java.lang.NullPointerException
if ((dependStates!=null) && (dependStates.size()>0)){ if ((dependStates!=null) && (dependStates.size()>0)){
for (String state:dependStates){ for (String state:dependStates){
if (!stateProviders.containsKey(state)){ if (!stateProviders.containsKey(state)){
MessageUI.error("No tool provide output state '"+state+"' needed to satisfy dependency of the tool "+tool.getName()); MessageUI.error("No tool provides output state '"+state+"' needed to satisfy dependency of the tool "+tool.getName());
System.out.println("No tool provide output state '"+state+"' needed to satisfy dependency of the tool "+tool.getName()); System.out.println("No tool provides output state '"+state+"' needed to satisfy dependency of the tool "+tool.getName());
} }
} }
} }
...@@ -716,8 +716,10 @@ java.lang.NullPointerException ...@@ -716,8 +716,10 @@ java.lang.NullPointerException
String ignoreFilter) throws CoreException { String ignoreFilter) throws CoreException {
if (!okToRun()) return; if (!okToRun()) return;
// Set this tool dirty (not to try reports on this tool before it ran)
DEBUG_PRINT("launchToolSequence("+tool.getName()+", setting its state to \"Dirty\"");
tool.setDirty(true);
setStateProvides(); // just testing setStateProvides(); // just testing
// tool.setDesignFlowView(designFlowView); // tool.setDesignFlowView(designFlowView);
tool.setDesignFlowView(designFlowView); // maybe will not be needed with ToolSequencing class tool.setDesignFlowView(designFlowView); // maybe will not be needed with ToolSequencing class
tool.setMode(mode) ; //TOOL_MODE.RUN); tool.setMode(mode) ; //TOOL_MODE.RUN);
...@@ -1603,11 +1605,11 @@ java.lang.NullPointerException ...@@ -1603,11 +1605,11 @@ java.lang.NullPointerException
public void setDependState(Tool tool){ public void setDependState(Tool tool){
DEBUG_PRINT("++++++++ setDependState("+tool.getName()+")"); DEBUG_PRINT("++++++++ setDependState("+tool.getName()+")");
tool.clearDependStamps(); // is it needed? tool.clearDependStamps(); // is it needed?
Map <String,String> depStates=makeDependStates(tool); Map <String,String> depStates=makeDependStates(tool,false);
for (String state:depStates.keySet()){ for (String state:depStates.keySet()){
tool.setStateTimeStamp(state,depStates.get(state)); // name of the state file including timestamp tool.setStateTimeStamp(state,depStates.get(state)); // name of the state file including timestamp
} }
Map <String,String> depFiles=makeDependFiles(tool); Map <String,String> depFiles=makeDependFiles(tool,false);
for (String file:depFiles.keySet()){ for (String file:depFiles.keySet()){
DEBUG_PRINT("setDependState("+tool.getName()+"), file="+file+" stamp="+depFiles.get(file)); DEBUG_PRINT("setDependState("+tool.getName()+"), file="+file+" stamp="+depFiles.get(file));
tool.setFileTimeStamp(file,depFiles.get(file)); tool.setFileTimeStamp(file,depFiles.get(file));
...@@ -1621,15 +1623,26 @@ java.lang.NullPointerException ...@@ -1621,15 +1623,26 @@ java.lang.NullPointerException
* @return true if all timestamps matched, false otherwise * @return true if all timestamps matched, false otherwise
*/ */
public boolean matchDependState(Tool tool){ public boolean matchDependState(Tool tool){
Map <String,String> depStates=makeDependStates(tool); Map <String,String> depStates=makeDependStates(tool, true);
Map <String,String> depFiles=makeDependFiles(tool); Map <String,String> depFiles=makeDependFiles(tool,true);
Map <String,String> storedDepStates = tool.getDependStatesTimestamps(); Map <String,String> storedDepStates = tool.getDependStatesTimestamps();
Map <String,String> storedDepFiles = tool.getDependFilesTimestamps(); Map <String,String> storedDepFiles = tool.getDependFilesTimestamps();
if (depStates == null) {
DEBUG_PRINT("matchDependState("+tool.getName()+") :"+
" depStates == null");
return false;
}
if (depStates.size()!=storedDepStates.size()) { if (depStates.size()!=storedDepStates.size()) {
DEBUG_PRINT("matchDependState("+tool.getName()+") :"+ DEBUG_PRINT("matchDependState("+tool.getName()+") :"+
" depStates.size()!=storedDepStates.size() - "+depStates.size()+"!="+storedDepStates.size()); " depStates.size()!=storedDepStates.size() - "+depStates.size()+"!="+storedDepStates.size());
return false; return false;
} }
if (depFiles == null) {
DEBUG_PRINT("matchDependState("+tool.getName()+") :"+
" depFiles == null");
return false;
}
if (depFiles.size()!=storedDepFiles.size()) { if (depFiles.size()!=storedDepFiles.size()) {
DEBUG_PRINT("matchDependState("+tool.getName()+") :"+ DEBUG_PRINT("matchDependState("+tool.getName()+") :"+
" depFiles.size()!=storedDepFiles.size() - "+depFiles.size()+"!="+storedDepFiles.size()); " depFiles.size()!=storedDepFiles.size() - "+depFiles.size()+"!="+storedDepFiles.size());
...@@ -1662,7 +1675,7 @@ java.lang.NullPointerException ...@@ -1662,7 +1675,7 @@ java.lang.NullPointerException
* @param tool tool just ran * @param tool tool just ran
* @return map of states (link names) to states files (full with timestamps) * @return map of states (link names) to states files (full with timestamps)
*/ */
private Map <String,String> makeDependStates(Tool tool){ private Map <String,String> makeDependStates(Tool tool, boolean failOnMissing){
Map <String,String> depStates=new Hashtable<String,String>(); Map <String,String> depStates=new Hashtable<String,String>();
List<String> dependStates=tool.getDependStates(); List<String> dependStates=tool.getDependStates();
if (dependStates!=null) for (String state: dependStates){ if (dependStates!=null) for (String state: dependStates){
...@@ -1670,6 +1683,10 @@ java.lang.NullPointerException ...@@ -1670,6 +1683,10 @@ java.lang.NullPointerException
ToolStateStamp tss=currentStates.get(state); ToolStateStamp tss=currentStates.get(state);
depStates.put(state,tss.getToolStateFile()); // name of the state file including timestamp depStates.put(state,tss.getToolStateFile()); // name of the state file including timestamp
} else { } else {
if (failOnMissing) {
DEBUG_PRINT("makeDependStates: no information for state "+state+" on which tool "+tool.getName()+" depends, failing");
return null;
}
DEBUG_PRINT("Seems a BUG (OK when called matchDependState): no information for state "+state+" on which tool "+tool.getName()+" depends"); DEBUG_PRINT("Seems a BUG (OK when called matchDependState): no information for state "+state+" on which tool "+tool.getName()+" depends");
/* /*
DEBUG_PRINT("currentStates are:"); DEBUG_PRINT("currentStates are:");
...@@ -1681,10 +1698,10 @@ java.lang.NullPointerException ...@@ -1681,10 +1698,10 @@ java.lang.NullPointerException
} }
return depStates; return depStates;
} }
private Map <String,String> makeDependFiles(Tool tool){ private Map <String,String> makeDependFiles(Tool tool, boolean failOnMissing){
DEBUG_PRINT("++++++ makeDependFiles("+tool.getName()+")"); DEBUG_PRINT("++++++ makeDependFiles("+tool.getName()+")");
Map <String,String> depFiles=new Hashtable<String,String>(); Map <String,String> depFiles=new Hashtable<String,String>();
List<String> dependFileNames=tool.getDependFiles(); List<String> dependFileNames=tool.getDependFiles(); // files on which this tool depends
if (dependFileNames!=null) { if (dependFileNames!=null) {
IProject project = SelectedResourceManager.getDefault().getSelectedProject(); // should not be null when we got here IProject project = SelectedResourceManager.getDefault().getSelectedProject(); // should not be null when we got here
for (String depFile: dependFileNames){ for (String depFile: dependFileNames){
...@@ -1698,6 +1715,12 @@ java.lang.NullPointerException ...@@ -1698,6 +1715,12 @@ java.lang.NullPointerException
DEBUG_PRINT("makeDependFiles(): file="+depFile+", stamp="+sourceFile.getModificationStamp()+ DEBUG_PRINT("makeDependFiles(): file="+depFile+", stamp="+sourceFile.getModificationStamp()+
" ("+sourceFile.toString()+")"); " ("+sourceFile.toString()+")");
} else { } else {
if (failOnMissing) {
DEBUG_PRINT("makeDependFiles(): source file "+sourceFile.getLocation()+" on which tool "+
tool.getName()+" depends does not exist, failing");
return null;
}
System.out.println("Seems a BUG: source file "+sourceFile.getLocation()+" on which tool "+ System.out.println("Seems a BUG: source file "+sourceFile.getLocation()+" on which tool "+
tool.getName()+" depends does not exist"); tool.getName()+" depends does not exist");
depFiles.put(depFile, ""); // empty stamp for non-existent files? depFiles.put(depFile, ""); // empty stamp for non-existent files?
......
...@@ -77,7 +77,11 @@ public class VerilogResolver implements IDynamicVariableResolver { ...@@ -77,7 +77,11 @@ public class VerilogResolver implements IDynamicVariableResolver {
*/ */
protected String translateToValue(IResource resource, IDynamicVariable variable) throws CoreException { protected String translateToValue(IResource resource, IDynamicVariable variable) throws CoreException {
String name = variable.getName(); String name = variable.getName();
if (name.endsWith("_loc")) { //$NON-NLS-1$ if (name.endsWith("project_loc")) { //$NON-NLS-1$
resource = SelectedResourceManager.getDefault().getChosenVerilogFile();
return resource.getProject().getLocation().toOSString();
} else if (name.endsWith("_loc")) { //$NON-NLS-1$
return resource.getLocation().toOSString(); return resource.getLocation().toOSString();
} else if (name.endsWith("_path")) { //$NON-NLS-1$ } else if (name.endsWith("_path")) { //$NON-NLS-1$
return resource.getFullPath().toOSString(); return resource.getFullPath().toOSString();
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*******************************************************************************
* Copyright (c) 2015 Elphel, Inc.
* This file is a part of VDT plug-in.
* VDT plug-in 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.
*
* VDT plug-in 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 this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional permission under GNU GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining it
* with Eclipse or Eclipse plugins (or a modified version of those libraries),
* containing parts covered by the terms of EPL/CPL, the licensors of this
* Program grant you additional permission to convey the resulting work.
* {Corresponding Source for a non-source form of such a combination shall
* include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.}
*******************************************************************************/
-->
<vdt-project>
<interface name="QuartusInterface" extends="FPGAPprojectInterface">
<syntax name="GrepFilterProblemSyntax" format='| grep --line-buffered -v "\[%%ParamName"' />
<syntax name="GrepFilterProblemOtherSyntax" format='%(| grep --line-buffered -v "\[%%ParamValue"%|\n%)' />
<typedef name="ParserModeType">
<paramtype kind= "enum" base="String">
<item value="0" label="Tool output is parsed immediately"/>
<item value="1" label="Tool output is delayed by not more than 1 line when consolidating bits"/>
<item value="2" label="As '1', but do not show same bits again"/>
<item value="3" label="All tool output containg hierarchical output is delayed to the very end"/>
</paramtype>
</typedef>
</interface>
<!-- Abstract tools to be inherited by instances used for various Quartus tools -->
<!-- Restore tool for Quartus -->
<tool name="RestoreQuartus" label="Restore state after Quartus tool"
project="FPGA_project"
interface="QuartusInterface"
package="FPGA_package"
shell="/bin/bash"
abstract="true">
<output>
<line name="quartus_pre_restore">
"-c"
<!-- Create project directory on remote server if it did not exist -->
"ssh"
"-oBatchMode=yes"
"-l %RemoteUser %RemoteHost"
"'"
"mkdir -p"
"%QuartusProjectRoot"
"' ;"
<!-- Copy snapshot generated after synthesis from local to remote -->
"rsync -avr -e ssh"
<!-- from: -->
"%QuartusLocalDir/%%StateFile"
<!-- to: -->
"%RemoteUser@%RemoteHost:%QuartusProjectRoot"
";"
</line>
<line name="quartus_restore"
dest="QuartusConsole"
mark="``"
sep="\n"
failure="ERROR"
prompt="@@FINISH@@"
log="">
"puts \"\Restoring snapshot %%StateFile""
"cd ~/%QuartusProjectRoot"
"set outputDir ~/%QuartusProjectRoot/%QuartusRemoteDir"
"file mkdir $outputDir"
"project_restore %QuartusRemoteDir/%%StateFile"
"puts \"@@FINISH@@\""
</line>
</output>
</tool>
<!-- Save tool for Quartus tool -->
<tool name="SaveQuartus"
label="SaveQuartus"
project="FPGA_project"
interface="QuartusInterface"
package="FPGA_package"
shell="/bin/bash"
abstract="true">
<output>
<line name="quartus_save"
dest="QuartusConsole"
mark="``"
sep="\n"
prompt="@@FINISH@@"
failure="ERROR"
log="">
"puts \"Saving snapshot %%StateFile\""
"cd ~/%QuartusProjectRoot"
"set outputDir ~/%QuartusProjectRoot/%QuartusRemoteDir"
"file mkdir $outputDir"
"project_archive -overwrite %QuartusRemoteDir/%%StateFile"
"puts \"@@FINISH@@\""
</line>
<line name="quartus_copy_after_save">
"-c"
"mkdir -p %QuartusLocalDir ;"
"rsync -avr -e ssh"
"%RemoteUser@%RemoteHost:%QuartusProjectRoot/%QuartusRemoteDir/%%StateFile"
"%%StateDir/"
</line>
</output>
</tool>
</vdt-project>
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*******************************************************************************
* Copyright (c) 2015 Elphel, Inc.
* This file is a part of VDT plug-in.
* VDT plug-in 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.
*
* VDT plug-in 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 this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional permission under GNU GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining it
* with Eclipse or Eclipse plugins (or a modified version of those libraries),
* containing parts covered by the terms of EPL/CPL, the licensors of this
* Program grant you additional permission to convey the resulting work.
* {Corresponding Source for a non-source form of such a combination shall
* include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.}
*******************************************************************************/
-->
<vdt-project>
<tool name="Quartus"
label="Launch Quartus"
project="FPGA_project"
package="FPGA_package"
shell="/bin/bash" interface="QuartusInterface" description="Launching remote Quartus in console">
<action-menu>
<action label="Launch Quartus" resource="" icon="door_in.png" />
<action label="Generate public key" resource="" icon="key.png" />
<action label="Setup connection to" resource="%RemoteUser@%RemoteHost"
check-extension="false" check-existence="false" icon="setup.png" />
</action-menu>
<parameter id="command" label="Shell command" default="bash"
type="String" format="CopyValue" visible="true" readonly="false" />
<parameter id="actionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" />
<input>
<group name="General">
"QuartusRemoteCommand"
</group>
<group name="Shell">
"command"
</group>
</input>
<output>
<if actionIndex="0">
<line name="Quartus"
timeout="1"
keep-open= "true">
"%QuartusShellSwitches"
"%QuartusPreSSH"
"ssh"
"-oBatchMode=yes"
<if TerminalMode = "true">
"-t -t"
</if>
"%QuartusSSHSwitches"
"-l"
"%RemoteUser"
"%RemoteHost"
"'"
"%QuartusRemoteCommand"
"'"
"%QuartusSSHExtra"
"|| { echo '*** ssh connection to the server %RemoteUser@%RemoteHost failed ***';"
"echo 'You may need to configure connection - it is done in \"Package Setup\"';"
"echo 'Then generate a public key (if it is not done already), and post it to';"
"echo 'the remote server (currently set as %RemoteUser@%RemoteHost)';"
"exit 1; } ;"
</line>
<line name="quartus_check"
dest="QuartusConsole"
mark="``"
sep=""
success="All rights reserved."
prompt="@@FINISH@@">
<!--success="Finished parsing RTL primitives"-->
"puts \"@@FINISH@@\"\n"
</line>
</if>
<if actionIndex="1">
<line name="Keygen">
"%QuartusShellSwitches"
"echo \"Generating public key with command:\";"
"echo \"ssh-keygen -t rsa -q -f ~/.ssh/id_rsa -N ''\";"
"ssh-keygen -t rsa -q -f ~/.ssh/id_rsa -N ''"
</line>
</if>
<if actionIndex="2">
<line name="SSHCopyID">
"%QuartusShellSwitches"
"echo \"*********************************************\";"
"echo \"** **\";"
"echo \"** This command requires you to be able **\";"
"echo \"** to login to the remote system and enter **\";"
"echo \"** a password once to post your public key **\";"
"echo \"** there. **\";"
"echo \"** **\";"
"echo \"** For this you need 'ssh-askpass' to be **\";"
"echo \"** installed in your system. **\";"
"echo \"** **\";"
"echo \"** If the command will fail, you need to **\";"
"echo \"** install 'ssh-askpass' and try again or **\";"
"echo \"** just manually run: **\";"
"echo \"\n ssh-copy-id %RemoteUser@%RemoteHost\n\";"
"echo \"** from the system terminal and enter your **\";"
"echo \"** password when prompted. **\";"
"echo \"** **\";"
"echo \"** If you see nothing below this box, that **\";"
"echo \"** likely means that Eclipse is launched **\";"
"echo \"** from the terminal, and the system asks **\";"
"echo \"** your password (or permission to add **\";"
"echo \"** key of the remote host first) in that **\";"
"echo \"** terminal - just switch to it and **\";"
"echo \"** complete the setup. **\";"
"echo \"** **\";"
"echo \"*********************************************\";"
"ssh-copy-id %RemoteUser@%RemoteHost;"
</line>
</if>
</output>
</tool>
</vdt-project>
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*******************************************************************************
* Copyright (c) 2015 Elphel, Inc.
* This file is a part of VDT plug-in.
* VDT plug-in 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.
*
* VDT plug-in 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 this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional permission under GNU GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining it
* with Eclipse or Eclipse plugins (or a modified version of those libraries),
* containing parts covered by the terms of EPL/CPL, the licensors of this
* Program grant you additional permission to convey the resulting work.
* {Corresponding Source for a non-source form of such a combination shall
* include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.}
*******************************************************************************/
-->
<vdt-project>
<interface name="QuartusPlaceInterface" extends="QuartusInterface">
<typedef name="PackRegisters">
<paramtype kind="enum" base="String">
<item value="off" label="The Fitters does not attempt to place a pair of logic functions in a single logic cell"/>
<item value="normal" label="The Fitter places both a combinational and a sequential operation in logic cell when it is expected that the
placement will not affect performance"/>
<item value="minimize area" label="The Fitter agressively combines unrelated combinational and sequential functions into a single logic cell to reduce the
logic element count, even at the expence of performance"/>
<item value="minimize with chains" label="The Fitter agressively combines sequential and combinational functions that are part of arithmetic or
register cascade chains, or that can be converted to register cascade chains"/>
<item value="auto" label="The Fitter automatically chooses the best method to fit the design"/>
</paramtype>
</typedef>
<typedef name="QuartusPlaceEffort">
<paramtype kind="enum" base="String">
<item value="auto" label="Directs the Fitter to reduce effort after meeting timing requirements. Decreases compilation time only when
timing and fitting requirements can be met"/>
<item value="standard" label="Directs the Fitter not to decrease effort. Preserves fmax but does not decrease compilation time"/>
<item value="fast" label="Directs the Fitter to descrease effort. Descreases compilation time by up to 50%, with a possible reduction in fmax"/>
</paramtype>
</typedef>
<typedef name="QuartusRegPack">
<paramtype kind="enum" base="String">
<item value="auto" label="The Fitter automatically chooses the best method to fit the design"/>
<item value="off" label="The Fitter does not attempt to place a pair of logic functions in a single logic cell"/>
<item value="normal" label="The fitter places both a combinational and a sequential operation in a logic cell when
it is expected that the placement will not affect performance"/>
<item value="minimize_area" label="The Fitter agressively combines unrelated sequential and combinational functions into a single
logic cell to reduce the logic element count, even at the expense of performance"/>
<item value="minimize_area_with_chains" label="The Fitter aggressively combines combinational and sequential functions that are part of arithmetic or
register cascade chains, or that can be converted to register cascade chains"/>
</paramtype>
</typedef>
</interface>
<tool name="QuartusPlace" label="Place and route design"
project="FPGA_project"
interface="QuartusPlaceInterface"
package="FPGA_package"
shell="/bin/bash"
ignore="%QuartusIgnoreSource"
description="Quartus place and route design"
result="QuartusSnapshotPlace"
log-dir="QuartusLogDir"
state-dir="QuartusLocalDir"
restore="RestoreQuartusPlace"
save="SaveQuartusPlace"
autosave="AutosaveQuartusPlace"
inherits="QuartusToolPrototype"
>
<action-menu>
<action lable="Place" resource="" icon="mondrian2x2.png"/>
</action-menu>
<depends-list>
<depends state="QuartusSnapshotSynth"/>
</depends-list>
<!-- Interfce parameters -->
<parameter id="AutosaveQuartusPlace" label="Create snapshot" tooltip="Automaticaly create snapshot after fitter"
default="true" type="Boolean" format="None"/>
<!-- Command line parameters -->
<!-- TODO: consider moving this option to separate design menu item -->
<parameter id="check_netlist" label="Run legality checking" tooltip="Option to run only legality checking on the current netlist.
Analysis and synthesis must be run successfully before you use this option."
default="false" visible="true" omit="false" readonly="false" type="Boolean" format="DoubleDashName"/>
<parameter id="par_effort" outid="effort" label="Placement effort" tooltip="Option to specify the level of effor you want the Fitter to use"
default="auto" visible="true" omit="auto" readonly="false" type="QuartusPlaceEffort" format="DoubleDash"/>
<parameter id="incremental_signaltap" label="Incremental SignalTap" tooltip="Option to perform an incremental SignalTap(R) II compilation.
Use this option when only SignalTap settings have changed since the last compilation"
default="false" visible="true" omit="false" readonly="false" type="Boolean" format="DoubleDashName"/>
<parameter id="inner_num" label="Placement effort multiplier" tooltip="Option to specify a value for the loop multiplier
used during placement. Use of a higher value increases compilation time, but may increase the quality of placement"
default="1" visible="true" omit="1" readonly="false" type="Cardinal" format="DoubleDash"/>
<parameter id="lower_priority" label="Lower priority" tooltip="Option to lower priority of the current process."
default="false" visible="true" readonly="false" omit="false" type="Boolean" format="DoubleDashName"/>
<parameter id="one_fit_attempt" label="One fit attempt" tooltip="Option to perform only one fitting attempt, giving a no fit if that
attempt fails. When this option is turned off, the fitter may perform additional attemps"
default="false" visible="true" readonly="false" omit="false" type="Bool_on_off" format="DoubleDash"/>
<parameter id="optimize_io_register_for_timing" label="Optimize IO registers" tooltip="Option to optimize I/O register placement for timing.
This option is used for timing-driven compilation"
default="false" visible="true" readonly="false" omit="false" type="Bool_on_off" format="DoubleDash"/>
<parameter id="pack_register" label="Pack registers" tooltip="Option to implement register packing for appropriate pairs of
registers and logic functions"
default="auto" visible="true" readonly="false" omit="auto" type="QuartusRegPack" format="DoubleDash"/>
<parameter id="parallel" label="# of processors to use" tooltip="Controls parallel compilation. If 0 is specified, the Quartus software
uses all processors detected on the system. Otherwise, the software attempts to use the specified number of processors.
Note: this feature is not licenced for the Web Edition and this parameter should be set to 1"
default="1" visible="true" readonly="false" omit="0" type="Cardinal" format="DoubleDash"/>
<parameter id="part_par" outid="part" label="Part (see Project)" tooltip="Altera device to use (configured in 'project' dialog)"
default="%part" visible="true" readonly="true" omit="" type="String" format="DoubleDash"/>
<parameter id="plan" label="Plan" tooltip="This flow will place all periphery elements (such as IOs and PLLs) and determine a legal
clock plan. No core placement or routing will be performed"
default="false" visible="true" readonly="false" omit="false" type="Boolean" format="DoubleDashName"/>
<parameter id="recompile" label="Rapid recompile" tooltip="Option to run Quartus Fit in Rapid Recompile mode"
default="false" visible="true" readonly="false" omit="false" type="Bool_on_off" format="DoubleDash"/>
<parameter id="seed" label="Seed" tooltip="Option to used the specified seed value. The Fitter uses this value as the initial placement configuration
when attempting to optimize the design timing requirements, including fmax"
default="1" visible="true" omit="1" readonly="false" type="Cardinal" format="DoubleDash"/>
<parameter id="tdc" label="Timing-driven compilation" tooltip="Option to use timing-driven compilation. This option optimizes place and route based on
timing information"
default="false" visible="true" readonly="false" omit="false" type="Bool_on_off" format="DoubleDash"/>
<input>
<group name="General">
<!-- Same as in project settings-->
"AutosaveQuartusPlace"
"QuartusSnapshotPlace"
</group>
<group name="Placement">
"check_netlist"
"par_effort"
"incremental_signaltap"
"inner_num"
"lower_priority"
"one_fit_attempt"
"optimize_io_register_for_timing"
"pack_register"
"parallel"
"part_par"
"plan"
"recompile"
"seed"
"tdc"
</group>
</input>
<output>
<!-- Assemble quartus_fit arguments line -->
<line name="quartus_assemble_args"
dest="QuartusConsole"
sep=" ">
"set par_args \""
"%check_netlist"
"%par_effort"
"%incremental_signaltap"
"%inner_num"
"%lower_priority"
"%one_fit_attempt"
"%optimize_io_register_for_timing"
"%pack_register"
"%parallel"
"%part_par"
"%plan"
"%recompile"
"%seed"
"%tdc"
"\"\n"
</line>
<!-- Start fitter -->
<line name="quartus_run_synth"
dest="QuartusConsole"
mark="``"
sep="\n"
prompt="@@FINISH@@"
success="@@FINISH@@"
log=""
stdout="parser_Quartus">
"cd ~/%QuartusProjectRoot"
"set projectName %%ProjectName"
"set outputDir ~/%QuartusProjectRoot/%QuartusRemoteDir"
"file mkdir $outputDir"
"load_package flow"
<!-- Reopen project if it was closed somehow -->
"if [is_project_open] {"
"puts \"Project is open, starting fitter\""
"} else {"
"project_open $projectName"
"}"
"if {[catch {execute_module -tool fit -args $par_args} result]} {"
"puts \"Result: $result\""
"puts \"ERROR: Place and route faild. See the report file.\""
"} else {"
"puts \"INFO: Place and route was successful.\""
"}"
"puts \"@@FINISH@@\""
</line>
</output>
</tool>
<!-- Restore tool for QuartusSynthesis -->
<tool name="RestoreQuartusPlace"
project="FPGA_project"
interface="QuartusInterface"
package="FPGA_package"
inherits="RestoreQuartus"/>
<!-- Save tool for QuartusSynthesis -->
<tool name="SaveQuartusPlace"
project="FPGA_project"
interface="QuartusInterface"
package="FPGA_package"
inherits="SaveQuartus"/>
</vdt-project>
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*******************************************************************************
* Copyright (c) 2015 Elphel, Inc.
* This file is a part of VDT plug-in.
* VDT plug-in 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.
*
* VDT plug-in 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 this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional permission under GNU GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining it
* with Eclipse or Eclipse plugins (or a modified version of those libraries),
* containing parts covered by the terms of EPL/CPL, the licensors of this
* Program grant you additional permission to convey the resulting work.
* {Corresponding Source for a non-source form of such a combination shall
* include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.}
*******************************************************************************/
-->
<vdt-project>
<tool name="QuartusToolPrototype" label="QuartusToolPrototype"
project="FPGA_project"
interface="QuartusInterface"
package="FPGA_package"
shell="/bin/bash"
description="Quartus tool prototype"
abstract="true"
>
</tool>
</vdt-project>
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*******************************************************************************
* Copyright (c) 2015 Elphel, Inc.
* This file is a part of VDT plug-in.
* VDT plug-in 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.
*
* VDT plug-in 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 this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional permission under GNU GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining it
* with Eclipse or Eclipse plugins (or a modified version of those libraries),
* containing parts covered by the terms of EPL/CPL, the licensors of this
* Program grant you additional permission to convey the resulting work.
* {Corresponding Source for a non-source form of such a combination shall
* include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.}
*******************************************************************************/
-->
<vdt-project>
<interface name="QuartusSynthesisInterface" extends="QuartusInterface">
<syntax name="read_qdc_syntax" format="%(read_qdc %%ParamValue%|\n%)" />
<typedef name="FSMType">
<paramtype kind="enum" base="String">
<item value="auto" label="Allows Analysis and Synthesis to choose the best encoding for the state machine."/>
<item value="one_hot" label="Encodes the state machine in one-hot style."/>
<item value="minimal_bits" label="Uses the minimal number of bits to encode a state machine."/>
<item value="user_encoded" label="Encodes the state machine in the manner specified by user."/>
</paramtype>
</typedef>
<typedef name="SynthesisEffort">
<paramtype kind="enum" base="String">
<item value="auto" label="Maximum synthesis effort."/>
<item value="fast" label="Synthesis process is streamlined to improve the runtime at the cost of design performance and/or resource usage.
Use this option when the FItter early_timing_estimate mode is used or when fast-synthesis compilation is needed
whitout the need to run the Fitter. When this option is used with the regular Fitter, Fitter performance
may decrease as fast-synthesis netlists take longer to route."/>
</paramtype>
</typedef>
<typedef name="OptimizeDesign">
<paramtype kind="enum" base="String">
<item value="area" label="Makes the design as small as possible in order to minimize resource usage."/>
<item value="speed" label="Chooses a design implementation that has the fastest fmax."/>
<item value="balanced" label="Chooses a design implementation that has a high-speed performance with minimal logic usage."/>
</paramtype>
</typedef>
<typedef name="IncrementalCompilation">
<paramtype kind="enum" base="String">
<item value="off" label="Turn off incremental compilation" />
<item value="full_incremental_compilation" label="Turn on full incremental compilaation" />
</paramtype>
</typedef>
</interface>
<tool name="QuartusSynthesis" label="Load Source files to Quartus and Synthesize"
project="FPGA_project"
interface="QuartusSynthesisInterface"
package="FPGA_package"
shell="/bin/bash"
ignore="%QuartusIgnoreSource"
description="Quartus Synthesis"
result="QuartusSnapshotSynth"
log-dir="QuartusLogDir"
state-dir="QuartusLocalDir"
restore="RestoreQuartusSynthesis"
save="SaveQuartusSynthesis"
autosave="AutosaveQuartusSynthesis"
inherits="QuartusToolPrototype"
>
<extensions-list>
<extension mask="v"/>
<extension mask="tf"/>
</extensions-list>
<depends-list>
<depends files="FilteredSourceListPar"/>
<depends files="FilteredIncludesListPar"/>
<depends files="ConstraintsFiles"/>
</depends-list>
<parameter id="analysis_and_elaboration" label="Analysis and elaboration" tooltip= "Option to check all the design files in a design for syntax and
semantec errors, and perform a netlist exraction."
default="false" visible="true" readonly="false" omit="false" type="Boolean" format="DoubleDashName"/>
<parameter id="effort" label="Synthesis effort" tooltip="Option to select synthesis effort level"
default="auto" visible="true" readonly="false" omit="auto" type="SynthesisEffort" format="DoubleDash"/>
<parameter id="family" outid="family" label="Device family" tooltip= "Option to target the specified device family. The family name should not contain any
spaces. If you need to add space between words in the family name, make sure that you enclose the family name in double quotation marks."
default="CycloneV" visible="true" readonly="false" omit="" type="String" format="DoubleDash"/>
<parameter id="ignore_carry_buffers" label="Ignore CARRY_SUM buffers" tooltip="Ignore CARRY_SUM buffers that are instantiated in the design."
default="false" visible="true" omit="false" type="Bool_on_off" format="DoubleDash"/>
<parameter id="ignore_cascade_buffers" label="Ignore CASCADE buffers" tooltip="Ignore CASCADE buffers that are instantiated in the design."
default="false" visible="true" omit="false" type="Bool_on_off" format="DoubleDash"/>
<parameter id="incremental_compilation" label="Incremental compilation" tooltip="Option to specify the incremental compilation mode."
default="off" visible="true" omit="off" type="IncrementalCompilation" format="DoubleDash"/>
<parameter id="lower_priority" label="Lower priority" tooltip="Option to lower priority of the current process."
default="false" visible="true" readonly="false" omit="false" type="Boolean" format="DoubleDashName"/>
<parameter id="optimize" label="Optimize design" tooltip="Option to optimeze the design to achieve maximum speed performance,
minimum area usage or high speed performance with minimal area cost during synthesis."
default="balanced" visible="true" readonly="false" omit="balanced" type="OptimizeDesign" format="DoubleDash"/>
<parameter id="parallel" label="# of processors to use" tooltip="Controls parallel compilation. If 0 is specified, the Quartus software
uses all processors detected on the system. Otherwise, the software attempts to use the specified number of processors.
Note: this feature is not licenced for the Web Edition and this parameter should be set to 1"
default="1" visible="true" readonly="false" omit="0" type="Cardinal" format="DoubleDash"/>
<parameter id="part_synth" outid="part" label="Part (see Project)" tooltip="Altera device to use (configured in 'project' dialog)"
default="%part" visible="true" readonly="true" omit="" type="String" format="DoubleDash"/>
<parameter id="state_machine_encoding" label="FSM encoding" tooltip="Finite state machine encoding."
default="auto" visible="true" readonly="false" omit="auto" type="FSMType" format="DoubleDash"/>
<parameter id="top" label="Design top module" tooltip= "Top module of the design, determined by the project top file"
default="%%TopModule" visible="true" omit="" readonly="true" type="String" format="Dash"/>
<parameter id="read_qdc" type="Filelist"
format="read_qdc_syntax" default="%ConstraintsFiles" visible="false" />
<parameter id="FilteredSourceListPar" type="Filelist" label="FilteredSourceListPar"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="false" visible="true" />
<parameter id="FilteredIncludesListPar" type="Filelist" label="FilteredIncludesListPar"
format="ParamListSyntax" default="%%FilteredIncludesList" readonly="false" visible="true" />
<parameter id="QuartusSynthActionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" />
<parameter id="ConstraintsFiles" type="Filelist" format="ParamListSyntax"
default="" label="Constraints files" tooltip="Select constraint files to load to Quartus" readonly="false"
visible="true" />
<parameter id="AutosaveQuartusSynthesis" label="Create snapshot" tooltip="Automatically create snapshot after successful synthesis"
default="true" type= "Boolean" format="None"/>
<parameter id="ResetProject" label="Reset project" tooltip="Reset project before loading source files"
default="true" type= "Boolean" format="None"/>
<parameter id="SkipPreSynth" label="Skip pre-synthesis" tooltip="Do not run pre-synthesis TCL commands"
default="false" type= "Boolean" format="None"/>
<parameter id="PreTCL" label="Pre-synthesis TCL commands" tooltip="TCL commands to run before synthesis"
type="Stringlist" format="ProgramSyntax" default="" omit=""
readonly="false" visible="true" />
<input>
<group name="General">
"FilteredSourceListPar"
"FilteredIncludesListPar"
"ConstraintsFiles"
"AutosaveQuartusSynthesis"
"QuartusSnapshotSynth" <!-- same as in project -->
"ResetProject"
"---"
"SkipPreSynth"
"PreTCL"
</group>
<group name="Synthesis">
"analysis_and_elaboration"
"effort"
"family"
"part_synth"
"ignore_carry_buffers"
"ignore_cascade_buffers"
"incremental_compilation"
"lower_priority"
"optimize"
"parallel"
"state_machine_encoding"
</group>
</input>
<output>
<!-- mkdir -p vdt/npmtest -->
<line name="quartus_copy_pre_synth">
"-c"
"ssh"
"-oBatchMode=yes"
"-l %RemoteUser %RemoteHost"
"'"
"mkdir -p"
"%QuartusProjectRoot"
"' ;"
"rsync -avrR -e ssh"
"%FilteredSourceListPar"
"%FilteredIncludesListPar"
<if QuartusSynthActionIndex="0">
"%ConstraintsFiles"
</if>
"%RemoteUser@%RemoteHost:%QuartusProjectRoot"
</line>
<!-- Assemble quartus_map arguments line -->
<line name="quartus_assemble_args"
dest="QuartusConsole"
sep=" ">
"set synth_args \""
"%part_synth"
"%family"
"%analysis_and_elaboration"
"%effort"
"%ignore_carry_buffers"
"%ignore_cascade_buffers"
"%incremental_compilation"
"%lower_priority"
"%optimize"
"%parallel"
"%state_machine_encoding"
"\"\n"
</line>
<line name="quartus_run_synth"
dest="QuartusConsole"
mark="``"
sep="\n"
prompt="@@FINISH@@"
success="@@FINISH@@"
log=""
stdout="parser_Quartus">
"cd ~/%QuartusProjectRoot"
"load_package flow"
"set projectName %%ProjectName"
"set outputDir ~/%QuartusProjectRoot/%QuartusRemoteDir"
"file mkdir $outputDir"
<!-- Load all project files -->
<if ResetProject="true">
"if [is_project_open] { project_close }"
</if>
"if [project_exists $projectName] {"
"project_open $projectName"
"} else {"
"project_new $projectName }"
"foreach file [list %FilteredSourceListPar] {"
"puts \"Adding $file to project\""
"set_global_assignment -name VERILOG_FILE $file }"
<if QuartusSynthActionIndex="0">
<if ConstraintsFiles="">
"puts \"No constraints files specified, skipping read_qdc command\";"
</if>
<if-not ConstraintsFiles="">
"%read_qdc"
</if-not>
</if>
<!-- Run pre-synthesis TCL commands (if specified) -->
<if SkipPreSynth="false">
<if-not PreTCL="">
"%PreTCL"
</if-not>
<if PreTCL="">
"puts \"No pre-synthesis TCL commands specified\""
</if>
</if>
<!-- Start synthesizer -->
"if {[catch {execute_module -tool map -args $synth_args} result]} {"
"puts \"Result: $result\""
"puts \"ERROR: Analysis and Synthesis faild. See the report file.\""
"} else {"
"puts \"INFO: Analysis and Synthesis was successful.\""
"}"
"puts \"@@FINISH@@\""
</line>
</output>
</tool>
<!-- Restore tool for QuartusSynthesis -->
<tool name="RestoreQuartusSynthesis"
project="FPGA_project"
interface="QuartusInterface"
package="FPGA_package"
inherits="RestoreQuartus"/>
<!-- Save tool for QuartusSynthesis -->
<tool name="SaveQuartusSynthesis"
project="FPGA_project"
interface="QuartusInterface"
package="FPGA_package"
inherits="SaveQuartus"/>
</vdt-project>
...@@ -123,6 +123,8 @@ ...@@ -123,6 +123,8 @@
<syntax name="DashName" format=" -%%ParamName" /> <syntax name="DashName" format=" -%%ParamName" />
<syntax name="QuotedDash" format=' -%%ParamName "%%ParamValue"' /> <syntax name="QuotedDash" format=' -%%ParamName "%%ParamValue"' />
<syntax name="NameValue" format=" %%ParamName %%ParamValue" /> <syntax name="NameValue" format=" %%ParamName %%ParamValue" />
<syntax name="DoubleDash" format="--%%ParamName=%%ParamValue" />
<syntax name="DoubleDashName" format="--%%ParamName" />
<!-- <!--
Does not work according to 2.2.1. "Inside text-repetitor, one and only one pattern-generator is mandatory". Does not work according to 2.2.1. "Inside text-repetitor, one and only one pattern-generator is mandatory".
......
...@@ -82,8 +82,7 @@ ...@@ -82,8 +82,7 @@
icon="clock.png" icon="clock.png"
call="ISETraceMap"/> call="ISETraceMap"/>
<menuitem name="ISEPAR" <menuitem name="ISEPAR"
label="Place &amp; route design" label="Place &amp; route design" icon="route66.png"
icon="route66.png"
call="ISEPAR"/> call="ISEPAR"/>
<menuitem name="ISETracePAR" <menuitem name="ISETracePAR"
label="Report post-implementation timing" label="Report post-implementation timing"
...@@ -178,9 +177,24 @@ ...@@ -178,9 +177,24 @@
label="Generate bitstream" label="Generate bitstream"
icon="bitstream.png" icon="bitstream.png"
call="VivadoBitstream"/> call="VivadoBitstream"/>
</menu> </menu>
<menu name="Quartus"
label="Quartus tools"
icon="quartus16x16.png">
<menuitem name="Quartus Server"
label="Start remote Quartus session"
icon="door_in.png"
call="Quartus"/>
<menuitem name="QuartusSynthesis"
label="Synthesize design"
icon="Retort.png"
call="QuartusSynthesis"/>
<menuitem name="QuartusFitter"
label="Place and route design"
icon="route66.png"
call="QuartusPlace"/>
</menu>
</menu> </menu>
......
...@@ -29,8 +29,6 @@ ...@@ -29,8 +29,6 @@
<vdt-project> <vdt-project>
<interface name="FPGAPprojectInterface"> <interface name="FPGAPprojectInterface">
<syntax name="RemoteRootSyntax" format="%%ParamValue/%%ProjectName" /> <syntax name="RemoteRootSyntax" format="%%ParamValue/%%ProjectName" />
<!-- <syntax name="SourceListSyntax" format="%(%%SourceList%| %)" />
<syntax name="FilteredSourceListSyntax" format="%(%%FilteredSourceList%| %)" /> -->
<syntax name="ProgramSyntax" format="%(%%ParamValue%|\n%)" /> <syntax name="ProgramSyntax" format="%(%%ParamValue%|\n%)" />
<!-- typedef --> <!-- typedef -->
</interface> </interface>
...@@ -44,7 +42,7 @@ ...@@ -44,7 +42,7 @@
<parameter id="RemoteUser" label="Remote user name" tooltip="Remote user name" type="String" <parameter id="RemoteUser" label="Remote user name" tooltip="Remote user name" type="String"
format="CopyValue" default="%%UserName" readonly="false" visible="true" /> format="CopyValue" default="%%UserName" readonly="false" visible="true" />
<!-- Vivado options --> <!-- Vivado options -->
<parameter id="VivadoRelease" label="Vivado release" tooltip="Vivado release number (part of the path)" <parameter id="VivadoRelease" label="Vivado release" tooltip="Vivado release number (part of the path)"
type="String" format="CopyValue" default="2013.4" readonly="false" type="String" format="CopyValue" default="2013.4" readonly="false"
visible="true" /> visible="true" />
...@@ -53,7 +51,7 @@ ...@@ -53,7 +51,7 @@
type="String" format="CopyValue" default="/opt/Xilinx/Vivado" readonly="false" type="String" format="CopyValue" default="/opt/Xilinx/Vivado" readonly="false"
visible="true" /> visible="true" />
<!-- ISE options --> <!-- ISE options -->
<parameter id="ISERelease" label="ISE release" tooltip="ISE release number (part of the path)" <parameter id="ISERelease" label="ISE release" tooltip="ISE release number (part of the path)"
type="String" format="CopyValue" default="14.7" readonly="false" type="String" format="CopyValue" default="14.7" readonly="false"
visible="true" /> visible="true" />
...@@ -62,8 +60,16 @@ ...@@ -62,8 +60,16 @@
type="String" format="CopyValue" default="/opt/Xilinx" readonly="false" type="String" format="CopyValue" default="/opt/Xilinx" readonly="false"
visible="true" /> visible="true" />
<!-- Quartus options -->
<parameter id="QuartusRelease" label="Quartus release" tooltip="Quartus release number (part of the path)"
type="String" format="CopyValue" default="15.0" readonly="false"
visible="true" />
<parameter id="QuartusInstallationRoot" label="Quartus root" tooltip="Quartus Installation Root"
type="String" format="CopyValue" default="/opt/Altera" readonly="false"
visible="true" />
<!-- Vivado advanced parameters --> <!-- Vivado advanced parameters -->
<parameter id="TerminalMode" type="BoolYesNo" format="None" <parameter id="TerminalMode" type="BoolYesNo" format="None"
default="false" label="Force terminal mode" tooltip="Force terminal mode for the remote program" /> default="false" label="Force terminal mode" tooltip="Force terminal mode for the remote program" />
...@@ -102,7 +108,7 @@ ...@@ -102,7 +108,7 @@
readonly="true" readonly="true"
visible="true" /> visible="true" />
<!-- ISE advanced parameters --> <!-- ISE advanced parameters -->
<parameter id="ISETerminalMode" type="BoolYesNo" format="None" <parameter id="ISETerminalMode" type="BoolYesNo" format="None"
default="false" label="Force terminal mode" tooltip="Force terminal mode for the remote program" /> default="false" label="Force terminal mode" tooltip="Force terminal mode for the remote program" />
...@@ -147,9 +153,36 @@ ...@@ -147,9 +153,36 @@
readonly="true" readonly="true"
visible="true" /> visible="true" />
<!-- Quartus advanced parameters -->
<parameter id="QuartusTerminalMode" type="BoolYesNo" format="None"
default="false" label="Force terminal mode" tooltip="Force terminal mode for the remote program" />
<parameter id="QuartusShellSwitches" label="Shell switch" tooltip="Shell switches" type="String"
format="CopyValue" default="-c" readonly="false" visible="true" />
<parameter id="QuartusPreSSH" label="pre-ssh" tooltip="pre-ssh shell parameters"
type="String" format="CopyValue" default="" readonly="false" visible="true" />
<parameter id="QuartusSSHSwitches" label="ssh switches" tooltip="Other ssh switches"
type="String" format="CopyValue" default="" readonly="false" visible="true" />
<!-- /opt/Xilinx/Vivado/2013.4/bin/vivado -mode tcl --> <parameter id="QuartusSSHExtra" label="ssh extra parameters" tooltip="ssh extra parameters" type="String"
format="CopyValue" default="" readonly="false" visible="true" />
<parameter id="QuartusConsole" default="Quartus" label="Quartus console name" tooltip="Quartus console name in Eclipse, used by other tools"
type="String" format="CopyValue" visible="true" readonly="false"/>
<parameter id="QuartusRelativeExeOptions" label="Quartus launch command" tooltip="Quartus relative executable path and command options"
type="String" format="CopyValue" default="quartus/bin/quartus_sh -s" readonly="false"
visible="true" />
<parameter id="QuartusRemoteCommand" label="Remote command" tooltip="Remote ssh command"
type="String" format="CopyValue"
default="%QuartusInstallationRoot/%QuartusRelease/%QuartusRelativeExeOptions"
readonly="true"
visible="true" />
<!-- /opt/Xilinx/Vivado/2013.4/bin/vivado -mode tcl -->
<parameter id="NoBabyTalk" label="No Baby talk" tooltip= "Remove licensing baby talk from INFO messages." <parameter id="NoBabyTalk" label="No Baby talk" tooltip= "Remove licensing baby talk from INFO messages."
default="true" visible="true" omit="false" type="Boolean" format="DashName"/> default="true" visible="true" omit="false" type="Boolean" format="DashName"/>
...@@ -161,6 +194,8 @@ ...@@ -161,6 +194,8 @@
"VivadoInstallationRoot" "VivadoInstallationRoot"
"ISERelease" "ISERelease"
"ISEInstallationRoot" "ISEInstallationRoot"
"QuartusRelease"
"QuartusInstallationRoot"
</group> </group>
<group name="AdvancedVivado" label="Vivado server advanced setup"> <group name="AdvancedVivado" label="Vivado server advanced setup">
"TerminalMode" "TerminalMode"
...@@ -186,6 +221,16 @@ ...@@ -186,6 +221,16 @@
"ISEBinDirectory" "ISEBinDirectory"
"ISEUnisimsAbsolutePath" "ISEUnisimsAbsolutePath"
</group> </group>
<group name="AdvancedQuartus" label="Quartus server advanced setup">
"QuartusTerminalMode"
"QuartusShellSwitches"
"QuartusPreSSH"
"QuartusSSHSwitches"
"QuartusSSHExtra"
"QuartusConsole"
"QuartusRelativeExeOptions"
"QuartusRemoteCommand"
</group>
</input> </input>
</package> </package>
...@@ -223,7 +268,7 @@ ...@@ -223,7 +268,7 @@
<parameter id="VivadoIgnoreSource" label="Ignore source files" tooltip="Pattern to ignore source files that match this regular expression" <parameter id="VivadoIgnoreSource" label="Ignore source files" tooltip="Pattern to ignore source files that match this regular expression"
type="String" default=".*unisims.*" format="CopyValue" readonly="false" /> type="String" default=".*unisims.*" format="CopyValue" readonly="false" />
<!-- ISE parameters --> <!-- ISE parameters -->
<parameter id="ISEProjectRoot" label="Workspace directory" tooltip="Relative (to user home directory) path of the workspace on ISE server" <parameter id="ISEProjectRoot" label="Workspace directory" tooltip="Relative (to user home directory) path of the workspace on ISE server"
type="String" default="vdt_ise" format="RemoteRootSyntax" readonly="false" /> type="String" default="vdt_ise" format="RemoteRootSyntax" readonly="false" />
...@@ -242,12 +287,30 @@ ...@@ -242,12 +287,30 @@
<parameter id="ISEIgnoreSource" label="Ignore source files" tooltip="Pattern to ignore source files that match this regular expression" <parameter id="ISEIgnoreSource" label="Ignore source files" tooltip="Pattern to ignore source files that match this regular expression"
type="String" default=".*unisims.*" format="CopyValue" readonly="false" /> type="String" default=".*unisims.*" format="CopyValue" readonly="false" />
<!-- Quartus parameters -->
<parameter id="part" label="Device" tooltip= "FPGA part number (device) to use"
default="" visible="true" omit="" type="String" format="CopyValue"/>
<parameter id="QuartusProjectRoot" label="Workspace directory" tooltip="Relative (to user home directory) path of the workspace on Quartus server"
type="String" default="vdt" format="RemoteRootSyntax" readonly="false" />
<parameter id="QuartusRemoteDir" label="Remote Quartus directory" tooltip="Remote Quartus output subdirectroy for snapshot and result files"
type="Pathname" default="quartus_build" format="CopyValue" readonly="false" />
<!-- Calculated --> <parameter id="QuartusLocalDir" label="Local Quartus directory" tooltip="Local project subdirectroy for Quartus snapshot files"
<!-- <parameter id="VivadoProjectRoot" label="" tooltip="Relative (to user home directory) path of the project on Vivado server" type="Pathname" default="quartus_state" format="CopyValue" readonly="false" />
type="String" default="vdt" format="RemoteRootSyntax" readonly="false" /> -->
<parameter id="QuartusLocalResultDir" label="Local Quartus results directory"
tooltip="Local project subdirectroy for Xilinx Quartus generated result files"
type="Pathname" default="quartus_results" format="CopyValue" readonly="false" />
<parameter id="QuartusLogDir" label="Local Quartus tool logs directory" tooltip="Local project subdirectroy for Quartus tools log files"
type="Pathname" default="quartus_logs" format="CopyValue" readonly="false" />
<parameter id="QuartusIgnoreSource" label="Ignore source files" tooltip="Pattern to ignore source files that match this regular expression"
type="String" default="" format="CopyValue" readonly="false" />
<!-- Calculated -->
<parameter id="SnapshotSynth" <parameter id="SnapshotSynth"
label="Synthesis snapshot" tooltip="Name of Vivado snapshot archive after synthesis" label="Synthesis snapshot" tooltip="Name of Vivado snapshot archive after synthesis"
default="%%ProjectName-synth.dcp" default="%%ProjectName-synth.dcp"
...@@ -324,7 +387,7 @@ ...@@ -324,7 +387,7 @@
type="Boolean" format="None" /> type="Boolean" format="None" />
"" <!-- same as in project --> "" <!-- same as in project -->
<!-- Invisible (calculated) project-wide parameters --> <!-- Invisible (calculated) project-wide parameters -->
<parameter id="SimulDirSlash" type="Pathname" visible="false" <parameter id="SimulDirSlash" type="Pathname" visible="false"
default="?%SimulDir=:,%SimulDir/" format="CopyValue"/> default="?%SimulDir=:,%SimulDir/" format="CopyValue"/>
<parameter id="VivadoSedPaths" type="String" format="CopyValue" <parameter id="VivadoSedPaths" type="String" format="CopyValue"
...@@ -335,6 +398,10 @@ ...@@ -335,6 +398,10 @@
label="sed command line" tooltip="Remote file prefix to be removed for the local error parser when running ISE tools" label="sed command line" tooltip="Remote file prefix to be removed for the local error parser when running ISE tools"
default="sed -u 's@/home/%RemoteUser/%ISEProjectRoot/%%ProjectName/@@'"/> default="sed -u 's@/home/%RemoteUser/%ISEProjectRoot/%%ProjectName/@@'"/>
<parameter id="QuartusSedPaths" type="String" format="CopyValue"
label="sed command line" tooltip="Remote file prefix to be removed for the local error parser when running Quartus tools"
default="sed -u 's@/home/%RemoteUser/%QuartusProjectRoot/%%ProjectName/@@'"/>
<parameter id="ISEWorkspace" label="Workspace directory" tooltip="Relative (to user home directory) path of the workspace on ISE server" <parameter id="ISEWorkspace" label="Workspace directory" tooltip="Relative (to user home directory) path of the workspace on ISE server"
type="String" default="%ISEProjectRoot" format="CopyValue" readonly="true" /> type="String" default="%ISEProjectRoot" format="CopyValue" readonly="true" />
...@@ -394,11 +461,18 @@ ...@@ -394,11 +461,18 @@
tooltip= "Remove remote ISE project files before unpacking snapshot archives" tooltip= "Remove remote ISE project files before unpacking snapshot archives"
default="true" visible="true" type="Boolean" format="None"/> default="true" visible="true" type="Boolean" format="None"/>
<parameter id="QuartusSnapshotSynth"
label="Synthesis snapshot" tooltip="Name of Quartus snapshot archive"
default="%%ProjectName-synth.qar"
type="String" format="CopyValue" />
<parameter id="QuartusSnapshotPlace"
label="Place and route snapshot" tooltip="Name of Quartus snapshot archive"
default="%%ProjectName-par.qar"
type="String" format="CopyValue" />
<input> <input>
<group name="Genaral" label="General parameters"> <group name="General" label="General parameters">
"part" "part"
"ImplementationTopFile" "ImplementationTopFile"
</group> </group>
...@@ -459,8 +533,15 @@ ...@@ -459,8 +533,15 @@
"ISESnapshotOptPhys" "ISESnapshotOptPhys"
"ISESnapshotRoute" "ISESnapshotRoute"
</group> </group>
<group name="Quartus" label="Quartus general properties">
"QuartusProjectRoot"
"QuartusRemoteDir"
"QuartusLocalDir"
"QuartusLocalResultDir"
"QuartusLogDir"
"QuartusIgnoreSource"
"QuartusSedPaths"
</group>
</input> </input>
<output>
</output>
</project> </project>
</vdt-project> </vdt-project>
...@@ -28,8 +28,8 @@ ...@@ -28,8 +28,8 @@
--> -->
<vdt-project> <vdt-project>
<interface name="ISEInterface" extends="FPGAPprojectInterface"> <interface name="ISEInterface" extends="FPGAPprojectInterface">
<syntax name="GrepFilterProblemSyntax" format='| grep --line-buffered -v "\[%%ParamName"' /> <syntax name="GrepFilterProblemSyntax" format='| grep --line-buffered -v "%%ParamName"' />
<syntax name="GrepFilterProblemOtherSyntax" format='%(| grep --line-buffered -v "\[%%ParamValue"%|\n%)' /> <syntax name="GrepFilterProblemOtherSyntax" format='%(| grep --line-buffered -v "%%ParamValue"%|\n%)' />
<typedef name="intstyleType"> <typedef name="intstyleType">
<paramtype kind= "enum" base="String"> <paramtype kind= "enum" base="String">
<item value="ise" label="Indicates the program is being run as part of an integrated design environment"/> <item value="ise" label="Indicates the program is being run as part of an integrated design environment"/>
......
...@@ -194,7 +194,7 @@ ...@@ -194,7 +194,7 @@
default="off" visible="true" omit="off" type="PRIOType" format="Dash"/> default="off" visible="true" omit="off" type="PRIOType" format="Dash"/>
<!-- default not clear , disabling omit--> <!-- default not clear , disabling omit-->
<parameter id="register_duplication" label="Register duplication" <parameter id="register_duplication" label="Register duplication"
tooltip="PRegister duplication (disabled if '-global_opt' is used, reguires '-timing')" tooltip="Register duplication (disabled if '-global_opt' is used, reguires '-timing')"
default="true" omit="" type= "Bool_on_off" format="Dash"/> default="true" omit="" type= "Bool_on_off" format="Dash"/>
<parameter id="register_ordering" outid="r" label="Register ordering" <parameter id="register_ordering" outid="r" label="Register ordering"
tooltip="Register ordering in a slice (use 4 or 8)" tooltip="Register ordering in a slice (use 4 or 8)"
......
...@@ -240,6 +240,7 @@ ...@@ -240,6 +240,7 @@
<!-- TODO: find out, how to reset state and make a tool to depend on--> <!-- TODO: find out, how to reset state and make a tool to depend on-->
<depends-list> <depends-list>
<depends files="FilteredSourceListPar"/> <depends files="FilteredSourceListPar"/>
<depends files="FilteredIncludesListPar"/>
<depends files="constraints"/> <depends files="constraints"/>
</depends-list> </depends-list>
<parameter id="clean_start" label="Clean start" tooltip= "Delete all files on remote before running XST" <parameter id="clean_start" label="Clean start" tooltip= "Delete all files on remote before running XST"
...@@ -496,6 +497,8 @@ ...@@ -496,6 +497,8 @@
<!-- calculated parameters --> <!-- calculated parameters -->
<parameter id="FilteredSourceListPar" type="Filelist" label="FilteredSourceListPar" <parameter id="FilteredSourceListPar" type="Filelist" label="FilteredSourceListPar"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="false" visible="true" /> format="ParamListSyntax" default="%%FilteredSourceList" readonly="false" visible="true" />
<parameter id="FilteredIncludesListPar" type="Filelist" label="FilteredIncludesListPar"
format="ParamListSyntax" default="%%FilteredIncludesList" readonly="false" visible="true" />
<parameter id="ISESynthActionIndex" default="%%ChosenActionIndex" <parameter id="ISESynthActionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" /> type="String" format="CopyValue" visible="false" />
<parameter id="ConstraintsFiles" type="Filelist" format="ParamListSyntax" <parameter id="ConstraintsFiles" type="Filelist" format="ParamListSyntax"
...@@ -532,6 +535,7 @@ ...@@ -532,6 +535,7 @@
"target_device" <!-- outid="p" --> "target_device" <!-- outid="p" -->
"---" "---"
"FilteredSourceListPar" "FilteredSourceListPar"
"FilteredIncludesListPar"
"RawOutFile" "RawOutFile"
"xst_prj" "xst_prj"
"---" "---"
...@@ -665,6 +669,7 @@ ...@@ -665,6 +669,7 @@
"' ;" "' ;"
"rsync -avrR -e ssh" "rsync -avrR -e ssh"
"%FilteredSourceListPar" "%FilteredSourceListPar"
"%FilteredIncludesListPar"
<if ISESynthActionIndex="0"> <if ISESynthActionIndex="0">
"%ConstraintsFiles" "%ConstraintsFiles"
</if> </if>
......
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
* include the source code for the parts of Eclipse or Eclipse plugins used * include the source code for the parts of Eclipse or Eclipse plugins used
* as well as that of the covered work.} * as well as that of the covered work.}
*******************************************************************************/ *******************************************************************************/
Warnings was (was in an attempt to catch "CRITICAL WARNING" too?):
default=".*([^ ]WARNING:) (\[.*\].*)\[(.*):([0-9]+)\]"
Problem was - missing 1-st line as group 0 had the previous end of line)
--> -->
<vdt-project> <vdt-project>
<tool name="VivadoToolPrototype" label="VivadoToolPrototype" <tool name="VivadoToolPrototype" label="VivadoToolPrototype"
...@@ -40,7 +43,7 @@ ...@@ -40,7 +43,7 @@
default=".*(ERROR:|CRITICAL WARNING:) (\[.*\].*)\[(.*):([0-9]+)\]" default=".*(ERROR:|CRITICAL WARNING:) (\[.*\].*)\[(.*):([0-9]+)\]"
visible="true" type="String" format="CopyValue"/> visible="true" type="String" format="CopyValue"/>
<parameter id="PatternWarnings" label="Warnings" tooltip= "Regular expression for warnings messages" <parameter id="PatternWarnings" label="Warnings" tooltip= "Regular expression for warnings messages"
default=".*([^ ]WARNING:) (\[.*\].*)\[(.*):([0-9]+)\]" default=".*(WARNING:) (\[.*\].*)\[(.*):([0-9]+)\]"
visible="true" type="String" format="CopyValue"/> visible="true" type="String" format="CopyValue"/>
<parameter id="PatternInfo" label="Info" tooltip= "Regular expression for info messages" <parameter id="PatternInfo" label="Info" tooltip= "Regular expression for info messages"
default=".*(INFO:) (\[.*\].*)\[(.*):([0-9]+)\]" default=".*(INFO:) (\[.*\].*)\[(.*):([0-9]+)\]"
......
...@@ -106,6 +106,7 @@ ...@@ -106,6 +106,7 @@
<!-- TODO: find out, how to reset state and make a tool to depend on--> <!-- TODO: find out, how to reset state and make a tool to depend on-->
<depends-list> <depends-list>
<depends files="FilteredSourceListPar"/> <depends files="FilteredSourceListPar"/>
<depends files="FilteredIncludesListPar"/>
<depends files="ConstraintsFiles"/> <depends files="ConstraintsFiles"/>
</depends-list> </depends-list>
...@@ -186,6 +187,8 @@ ...@@ -186,6 +187,8 @@
format="read_xdc_syntax" default="%ConstraintsFiles" visible="false" /> format="read_xdc_syntax" default="%ConstraintsFiles" visible="false" />
<parameter id="FilteredSourceListPar" type="Filelist" label="FilteredSourceListPar" <parameter id="FilteredSourceListPar" type="Filelist" label="FilteredSourceListPar"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="false" visible="true" /> format="ParamListSyntax" default="%%FilteredSourceList" readonly="false" visible="true" />
<parameter id="FilteredIncludesListPar" type="Filelist" label="FilteredIncludesListPar"
format="ParamListSyntax" default="%%FilteredIncludesList" readonly="false" visible="true" />
<parameter id="VivadoSynthActionIndex" default="%%ChosenActionIndex" <parameter id="VivadoSynthActionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" /> type="String" format="CopyValue" visible="false" />
...@@ -226,6 +229,7 @@ ...@@ -226,6 +229,7 @@
<input> <input>
<group name="General"> <group name="General">
"FilteredSourceListPar" "FilteredSourceListPar"
"FilteredIncludesListPar"
"ConstraintsFiles" "ConstraintsFiles"
"SkipSnapshotSynth" "SkipSnapshotSynth"
"SnapshotSynth" <!-- same as in project --> "SnapshotSynth" <!-- same as in project -->
...@@ -275,6 +279,7 @@ ...@@ -275,6 +279,7 @@
"' ;" "' ;"
"rsync -avrR -e ssh" "rsync -avrR -e ssh"
"%FilteredSourceListPar" "%FilteredSourceListPar"
"%FilteredIncludesListPar"
<if VivadoSynthActionIndex="0"> <if VivadoSynthActionIndex="0">
"%ConstraintsFiles" "%ConstraintsFiles"
</if> </if>
...@@ -289,14 +294,14 @@ ...@@ -289,14 +294,14 @@
success="synth_design completed successfully" success="synth_design completed successfully"
log="" log=""
stdout="parser_Vivado"> stdout="parser_Vivado">
<!-- synth_design completed successfully --> <!-- synth_design completed successfully reset_project -quiet (quiet - will not complain if nothing opened)-->
"cd ~/%VivadoProjectRoot\n" "cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n" "set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
<if ResetProject="true"> <if ResetProject="true">
"reset_project -quiet\n" "close_project -quiet\n"
</if> </if>
<!-- Increase number of warning lines, filter them separately. TODO: add configuration parameter --> <!-- Increase number of warning lines, filter them separately. TODO: add configuration parameter -->
"set_msg_config -severity WARNING -limit 1000\n" "set_msg_config -severity WARNING -limit 10000\n"
"file mkdir $outputDir\n" "file mkdir $outputDir\n"
"read_verilog " "read_verilog "
"%FilteredSourceListPar\n" "%FilteredSourceListPar\n"
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment