Commit d8bf8483 authored by Andrey Filippov's avatar Andrey Filippov

Tool dependency, sequencing, wait for VEditor database

parent e166573a
......@@ -158,5 +158,7 @@ public class VDT {
public static final String GENERATOR_ID_STATE_DIR = "StateDir";
public static final String GENERATOR_ID_STATE_FILE = "StateFile";
public static final String TIME_STAMP_FORMAT = "yyyyMMddHHmmssSSS";
} // class VDT
......@@ -24,8 +24,10 @@ import java.util.Iterator;
import java.util.Set;
import java.util.Vector;
import com.elphel.vdt.ui.variables.SelectedResourceManager;
import com.elphel.vdt.veditor.VerilogPlugin;
import com.elphel.vdt.veditor.document.HdlDocument;
import com.elphel.vdt.veditor.document.VerilogDocument;
import com.elphel.vdt.veditor.parser.OutlineContainer;
import com.elphel.vdt.veditor.parser.OutlineDatabase;
//import com.elphel.vdt.veditor.parser.vhdl.VhdlOutlineElementFactory.PackageDeclElement;
......@@ -67,7 +69,9 @@ public class VerilogUtils {
e.printStackTrace();
}
if (hdlDocument!=null) return hdlDocument.getOutlineDatabase(); /* will create a new one if does not exist */
return null;
// Create HdlDocument from selected/restored HDLfile
hdlDocument=new VerilogDocument(project, (IFile) SelectedResourceManager.getDefault().getChosenVerilogFile());
return hdlDocument.getOutlineDatabase(); /* will create a new one if does not exist */
}
public static String [] getExtList(String str){
......
......@@ -39,7 +39,7 @@ public class ParamBasedListOption extends ParamBasedOption {
/**
* Set the option value
*
* @param value the sequnce of the list items separated by SEPARATOR.
* @param value the sequence of the list items separated by SEPARATOR.
*/
public void setValue(String value) {
List<String> list = OptionsUtils.convertStringToList(value);
......
......@@ -46,7 +46,7 @@ public class ValueBasedListOption extends Option {
/**
* Set the option value
*
* @param value the sequnce of the list items separated by SEPARATOR.
* @param value the sequence of the list items separated by SEPARATOR.
*/
public void setValue(String value) {
List<String> list = OptionsUtils.convertStringToList(value);
......
......@@ -114,6 +114,7 @@ public class XMLConfig extends Config {
static final String CONTEXT_TOOL_DEPENDS_LIST_TAG = "depends-list";
static final String CONTEXT_TOOL_DEPENDS_TAG = "depends";
static final String CONTEXT_TOOL_DEPENDS_STATE_TAG = "state";
static final String CONTEXT_TOOL_DEPENDS_FILES_TAG = "files";
// TODO: May add other types of dependencies
static final String CONTEXT_TOOL_DFLT_ACTION_LABEL = "Run for";
......@@ -663,7 +664,8 @@ public class XMLConfig extends Config {
List<String> toolExtensionsList = readToolExtensionsList(contextNode, contextName);
List<RunFor> toolRunfor= readToolRunForList(contextNode, contextName);
List<String> toolDepends= readToolDependsList(contextNode, contextName);
List<String> toolDependsStates= readToolDependsList(contextNode, contextName,false);
List<String> toolDependsFiles= readToolDependsList(contextNode, contextName,true);
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_OTHER)) {
System.out.println("contextNode.getNodeValue()="+contextNode.getNodeValue());
......@@ -692,7 +694,8 @@ public class XMLConfig extends Config {
toolInfo,
toolRunfor,
ignoreFilter,
toolDepends,
toolDependsStates,
toolDependsFiles,
logDir,
stateDir,
disabled,
......@@ -1045,9 +1048,12 @@ public class XMLConfig extends Config {
return extList;
}
private List<String> readToolDependsList(Node toolNode, String toolName)
private List<String> readToolDependsList(Node toolNode, String toolName, boolean filesNotStates)
throws ConfigException
{
String filesStateTag= filesNotStates?CONTEXT_TOOL_DEPENDS_FILES_TAG:CONTEXT_TOOL_DEPENDS_STATE_TAG;
String otherTag= (!filesNotStates)?CONTEXT_TOOL_DEPENDS_FILES_TAG:CONTEXT_TOOL_DEPENDS_STATE_TAG;
String toolInfo = "Tool '" + toolName + "'";
List<String> depList = new ArrayList<String>();
......@@ -1066,10 +1072,14 @@ public class XMLConfig extends Config {
// TODO: allow here other types of dependencies (conditionals(source files)
for(Iterator<Node> n = depNodes.iterator(); n.hasNext();) {
Node node = (Node)n.next();
String dep = getAttributeValue(node, CONTEXT_TOOL_DEPENDS_STATE_TAG);
if(dep == null)
throw new ConfigException(toolInfo + ": Attribute '" + CONTEXT_TOOL_DEPENDS_STATE_TAG + "' is absent");
depList.add(dep);
String dep = getAttributeValue(node, filesStateTag);
if (dep != null) {
depList.add(dep);
} else if (getAttributeValue(node, otherTag)==null){
throw new ConfigException(toolInfo + ": Both alternative attributes '" + CONTEXT_TOOL_DEPENDS_FILES_TAG +
" and '"+CONTEXT_TOOL_DEPENDS_STATE_TAG +"' are absent");
}
}
return depList;
}
......
......@@ -262,6 +262,9 @@ public abstract class Context {
createdControlFiles.clear();
currentHash=0;
// if (name.equals("VivadoSynthesis")){
// System.out.println("1. Check here: VivadoSynthesis");
// }
while(commandLinesBlockIter.hasNext()) {
CommandLinesBlock commandLinesBlock = (CommandLinesBlock)commandLinesBlockIter.next();
......@@ -398,15 +401,23 @@ public abstract class Context {
String [] params=item.getParams();
if (params!=null) for (int i=0;i<params.length;i++){
currentHash += params[i].hashCode();
// if (name.equals("VivadoSynthesis")){
// System.out.println(params[i]+": "+currentHash);
// }
}
}
}
// System.out.println("BildParam("+dryRun+"), name="+name+" currentHash="+currentHash);
// Seems that during build it worked on a working copy of the tool, so calculated parameter did not get back
Tool proto=ToolsCore.getConfig().getContextManager().findTool(name);
// System.out.println("Calculated currentHash for "+name+"="+currentHash);
// if (name.equals("VivadoSynthesis")){
// System.out.println("Check here: VivadoSynthesis");
// }
if (proto!=null){
if (proto!=this){
System.out.println("++++ Updating tool's currentHas from working copy, name="+name);
System.out.println("++++ Updating tool's currentHash from working copy, name="+name);
proto.setCurrentHash(currentHash);
}
......
......@@ -38,9 +38,25 @@ public class ParamRepeaterRecognizer extends RepeaterRecognizer {
String repSuffix,
String separator)
{
if(genName.equals(ParamFormatRecognizer.FORMAT_PARAM_VALUE_MARK))
return new ValueGenerator(param, repPrefix, repSuffix, separator);
/* Trying to put these here */
// TODO make repetitor to accept several pattern generators with only one generating a list
/*
if(genName.equals(ParamFormatRecognizer.FORMAT_PARAM_NAME_MARK)) {
return new AbstractGenerator() {
public String getName() {
return "ParamName (parameter '" + param.getID() +
"' of context '" + param.getContext().getName() +
"')";
}
protected String[] getStringValues() {
return new String[]{param.getOutID()};
}
};
}
*/
if(genName.equals(ParamFormatRecognizer.FORMAT_PARAM_VALUE_MARK))
return new ValueGenerator(param, repPrefix, repSuffix, separator);
/* Trying to put these here */
if(genName.equals(FilteredSourceListGenerator.NAME))
return new FilteredSourceListGenerator(repPrefix, repSuffix, separator);
else if(genName.equals(SourceListGenerator.NAME))
......
......@@ -39,7 +39,9 @@ public class SimpleGeneratorRecognizer implements Recognizer {
new UserNameGenerator(),
new StateDirGenerator(),
new StateFileGenerator(),
new StateBaseGenerator()
new StateBaseGenerator(),
new SourceListGenerator("","",""),
new FilteredSourceListGenerator("","","")
};
public SimpleGeneratorRecognizer(){
......
......@@ -17,12 +17,15 @@
*******************************************************************************/
package com.elphel.vdt.ui.variables;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Stack;
import com.elphel.vdt.VDT;
import com.elphel.vdt.VerilogUtils;
import com.elphel.vdt.core.tools.params.Tool;
import com.elphel.vdt.core.tools.params.ToolSequence;
import com.elphel.vdt.veditor.VerilogPlugin;
import com.elphel.vdt.veditor.preference.PreferenceStrings;
......@@ -39,6 +42,7 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.ISelectionService;
......@@ -59,9 +63,9 @@ import org.eclipse.ui.PlatformUI;
*/
public class SelectedResourceManager implements IWindowListener, ISelectionListener {
// singleton
private static SelectedResourceManager fgDefault = new SelectedResourceManager();
private IResource fSelectedResource = null;
private IResource fSelectedVerilogFile = null;
private ITextSelection fSelectedText = null;
......@@ -76,6 +80,7 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
private String timestamp;
private String ignoreFilter=null;
private boolean toolsLinked=true;
private ToolSequence toolSequence=null; // to be able to reach toolSequence instance from VEditor
// private Tool selectedTool=null; // last selected tool
//
......@@ -117,6 +122,14 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
return toolsLinked;
}
public void setToolSequence (ToolSequence toolSequence){
this.toolSequence=toolSequence;
}
public ToolSequence getToolSequence(){
return toolSequence;
}
/**
* @see org.eclipse.ui.IWindowListener#windowActivated(org.eclipse.ui.IWorkbenchWindow)
*/
......@@ -161,7 +174,7 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
/**
* Returns the currently selected resource in the active workbench window,
* or <code>null</code> if none. If an editor is active, the resource adapater
* or <code>null</code> if none. If an editor is active, the resource adapter
* associated with the editor is returned.
*
* @return selected resource or <code>null</code>
......@@ -181,7 +194,7 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
return fSelectedVerilogFile;
}
/**
/**
* Returns resource by selection in the active workbench window,
* or <code>null</code> if none. If an editor is active, the resource adapater
* associated with the editor is returned.
......@@ -286,17 +299,37 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
}
}
// Build stamp/date methods
public String setBuildStamp(){
// timestamp=System.nanoTime();
//String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS'.txt'").format(new Date()));
timestamp= new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
timestamp=getBuildStamp(new Date());
return getBuildStamp();
}
public String getBuildStamp(){
return timestamp;
}
public static String getBuildStamp(Date date){
return new SimpleDateFormat(VDT.TIME_STAMP_FORMAT).format(date);
}
public static Date parseStamp(String stamp){
Date d;
try {
d = new SimpleDateFormat(VDT.TIME_STAMP_FORMAT).parse(stamp);
} catch (ParseException e) {
d=new Date(0);
System.out.println("Date format '"+stamp+"' not recognized, using beginning of all of times: "+
new SimpleDateFormat(VDT.TIME_STAMP_FORMAT).format(d));
return d; // 1970
}
return d;
}
public static boolean afterStamp(String after, String before){
return parseStamp(before).after(parseStamp(after));
}
public String getChosenTarget() {
return fChosenTarget;
......@@ -304,10 +337,17 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
public String getChosenShort() {
return fChosenShort;
}
public IResource getChosenVerilogFile() {
return (fChosenVerilogFile!=null)?fChosenVerilogFile:fSelectedVerilogFile;
}
// Used when restoring from memento
public void setChosenVerilogFile(IResource file) {
fChosenVerilogFile=file;
if (fSelectedResource==null) fSelectedResource=file;
}
public int getChosenAction() {
return fChosenAction;
......@@ -320,6 +360,9 @@ public class SelectedResourceManager implements IWindowListener, ISelectionListe
public String getFilter(){
return ignoreFilter;
}
public void setFilter(String filter){
ignoreFilter=filter;
}
......
......@@ -58,6 +58,7 @@ import com.elphel.vdt.core.tools.params.ToolSequence;
import com.elphel.vdt.core.tools.params.types.RunFor;
import com.elphel.vdt.Txt;
import com.elphel.vdt.VDT;
import com.elphel.vdt.VerilogUtils;
import com.elphel.vdt.veditor.VerilogPlugin;
import com.elphel.vdt.veditor.preference.PreferenceStrings;
import com.elphel.vdt.ui.MessageUI;
......@@ -94,7 +95,9 @@ import org.eclipse.debug.ui.DebugUITools;
public class DesignFlowView extends ViewPart implements ISelectionListener {
// Persistance tags.
private static final String TAG_SELECTED_RESOURCE = "SelectedProject";
private static final String TAG_SELECTED_RESOURCE = "SelectedProject";
private static final String TAG_SELECTED_HDL_FILE = "SelectedHdlFile";
private static final String TAG_SELECTED_HDL_FILTER = "SelectedHdlFilter";
private static final String TAG_LINKED_TOOLS = "LinkedTools";
private TreeViewer viewer;
......@@ -267,6 +270,10 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
setTitleToolTip(null);
}
}
public void changeMenuTitle(String title){
setPartName(title);
}
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu");
......@@ -973,6 +980,7 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
DesignMenu newDesignMenu = dialog.getSelectedDesignMenu();
String newDesignMenuName = newDesignMenu == null ? null
: newDesignMenu.getName();
desigMenuName.setValue(newDesignMenuName); // ??? Andrey
OptionsCore.doStoreOption(desigMenuName, project);
doLoadDesignMenu(newDesignMenuName);
}
......@@ -1112,19 +1120,51 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
* @since 2.0
*/
protected void restoreState(IMemento memento) {
SelectedResourceManager.getDefault().setToolSequence(toolSequence); // to enable access through static method
Boolean linkedTools= memento.getBoolean(TAG_LINKED_TOOLS);
ToolsCore.restoreToolsState(memento);
if (linkedTools==null) linkedTools=true;
SelectedResourceManager.getDefault().setToolsLinked(linkedTools);
toggleLinkedTools.setChecked(!SelectedResourceManager.getDefault().isToolsLinked());
String location = memento.getString(TAG_SELECTED_RESOURCE);
if (location == null)
if (location == null) {
System.out.println("No project selected");
return;
}
selectedResource = ResourcesPlugin.getWorkspace().getRoot().findMember(Path.fromPortableString(location));
String HDLLocation=memento.getString(TAG_SELECTED_HDL_FILE);
if (HDLLocation!=null) {
IResource HDLFile=ResourcesPlugin.getWorkspace().getRoot().findMember(Path.fromPortableString(HDLLocation));
SelectedResourceManager.getDefault().setChosenVerilogFile(HDLFile);
System.out.println("Setting HDL file to "+HDLFile.toString());
}
String HDLFilter=memento.getString(TAG_SELECTED_HDL_FILTER); //SelectedResourceManager.getDefault().getFilter();
if (HDLFilter!=null){
SelectedResourceManager.getDefault().setFilter(HDLFilter);
System.out.println("Setting HDL filter to "+HDLFilter);
}
if (linkedTools==null) linkedTools=true;
SelectedResourceManager.getDefault().setToolsLinked(linkedTools);
toggleLinkedTools.setChecked(!SelectedResourceManager.getDefault().isToolsLinked());
// Initialize VEditor database build
IResource HDLFile=SelectedResourceManager.getDefault().getChosenVerilogFile();
if ((HDLFile!=null) && HDLFile.exists()){
toolSequence.setUnfinishedBoot(memento);
VerilogUtils.getTopModuleNames((IFile) HDLFile);
} else {
toolSequence.setUnfinishedBoot(null);
finalizeAfterVEditorDB(memento);
}
}
public void finalizeAfterVEditorDB(IMemento memento){
toolSequence.restoreCurrentStates(memento); // restore states and recalc "dirty" flags - should be after tools themselves
doLoadDesignMenu();
updateLaunchAction();
}
/**
* @see ViewPart#saveState
......@@ -1139,9 +1179,19 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
String location = selectedResource.getFullPath().toPortableString();
memento.putString(TAG_SELECTED_RESOURCE, location);
}
IResource HDLFile=SelectedResourceManager.getDefault().getChosenVerilogFile();
if (HDLFile!=null){
memento.putString(TAG_SELECTED_HDL_FILE,HDLFile.getFullPath().toPortableString());
System.out.println("memento.putString("+TAG_SELECTED_HDL_FILE+","+HDLFile.getFullPath().toPortableString()+")");
}
String HDLFilter=SelectedResourceManager.getDefault().getFilter();
if (HDLFilter!=null){
memento.putString(TAG_SELECTED_HDL_FILTER,HDLFilter);
System.out.println("memento.putString("+TAG_SELECTED_HDL_FILTER+","+HDLFilter+")");
}
memento.putBoolean(TAG_LINKED_TOOLS, new Boolean(SelectedResourceManager.getDefault().isToolsLinked()));
ToolsCore.saveToolsState(memento);
toolSequence.saveCurrentStates(memento);
}
} // class DesignFlowView
\ No newline at end of file
......@@ -303,7 +303,6 @@ public class DesignMenuModel {
public void measureItem (Event event){
super.measureItem (event);
boolean dirty=tool.isDirty();
boolean pinned=tool.isPinned() || !SelectedResourceManager.getDefault().isToolsLinked();
String iconName,key;
if (tool.isRunning()){
......@@ -325,7 +324,7 @@ public class DesignMenuModel {
key= VDTPluginImages.KEY_TOOLSTATE_NEW;
break;
case FAILURE:
if (dirty){
if (tool.isDirtyOrChanged()){
iconName=VDTPluginImages.ICON_TOOLSTATE_BAD_OLD;
key= VDTPluginImages.KEY_TOOLSTATE_BAD_OLD;
} else {
......@@ -338,7 +337,7 @@ public class DesignMenuModel {
iconName=VDTPluginImages.ICON_TOOLSTATE_PINNED;
key= VDTPluginImages.KEY_TOOLSTATE_PINNED;
} else {
if (dirty){
if (tool.isDirtyOrChanged()){
iconName=VDTPluginImages.ICON_TOOLSTATE_GOOD_OLD;
key= VDTPluginImages.KEY_TOOLSTATE_GOOD_OLD;
} else {
......@@ -352,7 +351,7 @@ public class DesignMenuModel {
key= VDTPluginImages.KEY_TOOLSTATE_KEPT_OPEN;
break;
default:
if (dirty){
if (tool.isDirtyOrChanged()){
iconName=VDTPluginImages.ICON_TOOLSTATE_WTF_OLD;
key= VDTPluginImages.KEY_TOOLSTATE_WTF_OLD;
} else {
......
......@@ -94,6 +94,11 @@
<syntax name="DashListIndividual" format="%(-%%ParamName %%ParamValue%| %)" />
<syntax name="DashListCommon" format="-%%ParamName %(%%ParamValue%| %)" />
<syntax name="DashName" format=" -%%ParamName" />
<!--
Does not work according to 2.2.1. "Inside text-repetitor, one and only one pattern-generator is mandatory".
<syntax name="RepeatCommandSyntax" format="%(%%ParamName %%ParamValue%|\n%)" /> -->
</interface>
......
......@@ -2,8 +2,8 @@
<vdt-project>
<interface name="FPGAPprojectInterface">
<syntax name="RemoteRootSyntax" format="%%ParamValue/%%ProjectName" />
<syntax name="SourceListSyntax" format="%(%%SourceList%| %)" />
<syntax name="FilteredSourceListSyntax" format="%(%%FilteredSourceList%| %)" />
<!-- <syntax name="SourceListSyntax" format="%(%%SourceList%| %)" />
<syntax name="FilteredSourceListSyntax" format="%(%%FilteredSourceList%| %)" /> -->
<syntax name="ProgramSyntax" format="%(%%ParamValue%|\n%)" />
<!-- typedef -->
</interface>
......@@ -129,37 +129,37 @@
<parameter id="SnapshotSynth"
label="Synthesis snapshot" tooltip="Name of Vivado snapshot archive after synthesis"
default="%%ProjectName-synth.dcp"
type="Filename" format="CopyValue" />
type="String" format="CopyValue" />
<parameter id="SnapshotOptPlace"
label="Placement snapshot" tooltip="Name of Vivado snapshot archive after optimization/placement"
default="%%ProjectName-opt-place.dcp"
type="Filename" format="CopyValue" />
type="String" format="CopyValue" />
<parameter id="SnapshotOpt"
label="Optimization snapshot" tooltip="Name of Vivado snapshot archive after optimization"
default="%%ProjectName-opt.dcp"
type="Filename" format="CopyValue" />
type="String" format="CopyValue" />
<parameter id="SnapshotOptPower"
label="Power optimization snapshot" tooltip="Name of Vivado snapshot archive after power optimization"
default="%%ProjectName-opt-power.dcp"
type="Filename" format="CopyValue" />
type="String" format="CopyValue" />
<parameter id="SnapshotPlace"
label="Placement snapshot" tooltip="Name of Vivado snapshot archive after placement"
default="%%ProjectName-place.dcp"
type="Filename" format="CopyValue" />
type="String" format="CopyValue" />
<parameter id="SnapshotOptPhys"
label="Physical optimization snapshot" tooltip="Name of Vivado snapshot archive after physical optimization"
default="%%ProjectName-opt-phys.dcp"
type="Filename" format="CopyValue" />
type="String" format="CopyValue" />
<parameter id="SnapshotRoute"
label="Routing snapshot" tooltip="Name of Vivado snapshot archive after routing"
default="%%ProjectName-route.dcp"
type="Filename" format="CopyValue" />
type="String" format="CopyValue" />
<parameter id="DisableVivadoSynth"
label="Disable Vivado synthesis" tooltip="Disable tool Vivado Synthesis"
......
......@@ -119,9 +119,11 @@
<parameter id="v" type="SwitchType" format="SwitchSyntax"
default="true" label="Verbose" />
<parameter id="Param_SourceList" label="Param_SourceList"
<!-- <parameter id="Param_SourceList" label="Param_SourceList"
type="Stringlist" format="SourceListSyntax" default="" readonly="true"
visible="true" />
visible="true" /> -->
<parameter id="SourceListPar" label="Param_SourceList" type="Filelist"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="true" visible="false" />
<parameter id="ShowNoProblem" type="BoolYesNo" format="None"
......@@ -199,8 +201,10 @@
<parameter id="IVerilogActionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" />
<parameter id="SourceList" format="SourceListSyntax"
type="Stringlist" default="" readonly="true" visible="false" />
<!-- <parameter id="SourceList" format="SourceListSyntax"
type="Stringlist" default="" readonly="true" visible="false" /> -->
<parameter id="SourceListPar" label="Param_SourceList" type="Filelist"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="true" visible="false" />
<parameter id="iverilog_include_file" default="IVERILOG_INCLUDE.v"
type="Filename" format="CopyValue" visible="false" />
......@@ -300,7 +304,7 @@
"%legacy_model"
"%no_specify"
"%v"
"%SourceList"
"%SourceListPar"
"%ExtraFiles"
<if ShowNoProblem="false">
"2&gt;&amp;1"
......
......@@ -2,7 +2,7 @@
<vdt-project>
<interface name="VivadoSynthesisInterface" extends="VivadoInterface">
<syntax name="read_xdc_syntax" format="%(read_xdc %%ParamValue%|\n%)" />
<syntax name="read_xdc_syntax" format="%(read_xdc %%ParamValue%|\n%)" />
<typedef name="FlattenHierarchyType">
<paramtype kind= "enum" base="String">
<item value="rebuilt" label="Attempt to rebuild hierarchy after synthesis is completed"/>
......@@ -75,10 +75,17 @@
<action label="Check by Vivado Synthesis:" resource="%%SelectedFile"
check-extension="true" check-existence="true" icon="IconTestTube.png" />
</action-menu>
<!-- TODO: find out, how to reset state and make a tool to depend on-->
<depends-list>
<depends files="FilteredSourceListPar"/>
<depends files="ConstraintsFiles"/>
</depends-list>
<parameter id="ConstraintsFiles" type="Filelist" format="ParamListSyntax"
default="" label="Constraints files" tooltip="Select constraint files to load to Vivado" readonly="false"
visible="true" />
<parameter id="SkipSnapshotSynth" label="Skip snapshot" tooltip="Do not create snapshot after synthesis"
default="false"
type= "Boolean" format="None"/>
......@@ -149,12 +156,19 @@
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<!-- hidden (calculated) parameters -->
<parameter id="FilteredSourceList" type="Stringlist"
format="FilteredSourceListSyntax" default="" readonly="true" visible="false" />
<!-- <parameter id="FilteredSourceList" type="Filelist"
format="FilteredSourceListSyntax" default="" readonly="true" visible="false" /> -->
<parameter id="FilteredSourceListPar" type="Filelist"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="true" visible="false" />
<!-- Parameter read_xdc just copies parameter ConstraintsFiles, but they have different syntax (output representation) -->
<parameter id="read_xdc" type="Filelist" format="read_xdc_syntax" label="" tooltip="read_xdc"
<!-- Parameter read_xdc just copies parameter ConstraintsFiles, but they have different syntax (output representation) -->
<parameter id="read_xdc" type="Filelist" format="read_xdc_syntax"
default="%ConstraintsFiles" visible="false" />
<!-- <parameter id="read_xdc" type="Filelist" format="read_xdc_syntax" label="" tooltip="read_xdc"
default="%ConstraintsFiles" visible="false" /> -->
<!-- <parameter id="top" label="" tooltip= "Top module of the design"
default="%%TopModule" visible="false" omit="" type="String" format="Dash"/> -->
<parameter id="VivadoSynthActionIndex" default="%%ChosenActionIndex"
......@@ -190,7 +204,8 @@
<!-- invisible/calculated parameters -->
<parameter id="AutosaveVivadoSynthesis" default="?%%ChosenActionIndex=0 ^ %SkipSnapshotSynth=false : true, false"
visible="false" type="Boolean" format="None"/>
<parameter id="condConstraintsFiles" default="?%%ChosenActionIndex=0 : %ConstraintsFiles, "
visible="false" type="Filelist" format="None"/>
<input>
<group name="General">
......@@ -257,7 +272,7 @@
"%VivadoProjectRoot"
"' ;"
"rsync -avrR -e ssh"
"%FilteredSourceList"
"%FilteredSourceListPar"
<if VivadoSynthActionIndex="0">
"%ConstraintsFiles"
</if>
......@@ -279,13 +294,14 @@
"reset_project -quiet\n"
</if>
"file mkdir $outputDir\n"
"read_verilog %FilteredSourceList\n"
"read_verilog "
"%FilteredSourceListPar\n"
<if VivadoSynthActionIndex="0">
<if ConstraintsFiles="">
"puts \"No constraints files specified, skipping read_xdc command\";\n"
</if>
<if-not ConstraintsFiles="">
"%read_xdc\n"
"%read_xdc\n"
</if-not>
</if>
"synth_design"
......
......@@ -25,8 +25,10 @@
<parameter id="Timeout" label="Script timeout(sec)" type="Cardinal"
format="CopyValue" default="10" readonly="false" visible="true" />
<!-- hidden (calculated) parameters -->
<parameter id="FilteredSourceList" type="Stringlist"
format="FilteredSourceListSyntax" default="" readonly="true" visible="false" />
<!-- <parameter id="FilteredSourceList" type="Stringlist"
format="FilteredSourceListSyntax" default="" readonly="true" visible="false" /> -->
<parameter id="FilteredSourceListPar" type="Filelist"
format="ParamListSyntax" default="%%FilteredSourceList" readonly="true" visible="false" />
<input>
<group name="General">
......@@ -40,7 +42,7 @@
"-c"
"echo 'scp files here' ;"
"echo '"
"%FilteredSourceList"
"%FilteredSourceListPar"
"' ;"
"sleep 2 ;"
</line>
......
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