Commit 06425a7a authored by Andrey Filippov's avatar Andrey Filippov

Just next snapshot

parent 4a32831e
......@@ -33,6 +33,7 @@ import org.eclipse.debug.core.model.IProcess;
import org.eclipse.debug.core.model.IStreamMonitor;
import org.eclipse.debug.core.model.IStreamsProxy2;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsoleManager;
......@@ -264,20 +265,30 @@ public class VDTConsoleRunner{
outputListener);
consoleOutStreamMonitor.addListener(outputListener );
// }
//Problems occurred when invoking code from plug-in: "org.eclipse.ui.console".
//Exception occurred during console property change notification.
outStream.setColor(new Color(null, 128, 128, 255)); // org.eclipse.swt.SWTException: Invalid thread access
try {
for (int i=0;i<arguments.length;i++){
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.LOCAL_ECHO)) {
outStream.write(arguments[i]+"\n"); // writes to console itself
System.out.println("--->"+arguments[i]+"\n");
}
consoleInStreamProxy.write(arguments[i]+"\n");
}
} catch (IOException e) {
System.out.println("Can not write to outStream of console "+iCons.getName());
}
// Problems occurred when invoking code from plug-in: "org.eclipse.ui.console".
// Exception occurred during console property change notification.
// Trying to fix Illegal THread Access
final String [] fArguments=arguments;
final IOConsoleOutputStream fOutStream= outStream;
final IOConsole fICons=iCons;
Display.getDefault().syncExec(new Runnable() {
public void run() {
fOutStream.setColor(new Color(null, 128, 128, 255)); // org.eclipse.swt.SWTException: Invalid thread access
try {
for (int i=0;i<fArguments.length;i++){
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.LOCAL_ECHO)) {
fOutStream.write(fArguments[i]+"\n"); // writes to console itself
System.out.println("--->"+fArguments[i]+"\n");
}
consoleInStreamProxy.write(fArguments[i]+"\n");
}
} catch (IOException e) {
System.out.println("Can not write to outStream of console "+fICons.getName());
}
}
});
int timeout=buildParamsItem.getTimeout();
if ((timeout==0) && (buildParamsItem.getPrompt()==null)) timeout=1;// should specify at least one of timeout or prompt
timer=null;
......
......@@ -103,6 +103,7 @@ public class XMLConfig extends Config {
static final String CONTEXT_TOOL_SHELL_ATTR = "shell";
static final String CONTEXT_TOOL_EXTENSIONS_LIST_TAG = "extensions-list";
static final String CONTEXT_TOOL_EXTENSION_TAG = "extension";
static final String CONTEXT_TOOL_EXTENSION_MASK_ATTR = "mask";
static final String CONTEXT_TOOL_ACTION_LIST_TAG = "action-menu";
static final String CONTEXT_TOOL_ACTION_TAG = "action";
static final String CONTEXT_TOOL_ACTION_LABEL = "label";
......@@ -110,9 +111,9 @@ public class XMLConfig extends Config {
static final String CONTEXT_TOOL_ACTION_CHECK_EXTENSION = "check-extension";
static final String CONTEXT_TOOL_ACTION_CHECK_EXISTENCE = "check-existence";
static final String CONTEXT_TOOL_ACTION_ICON = "icon";
static final String CONTEXT_TOOL_DEPENDS_LIST_TAG = "depends-list";
static final String CONTEXT_TOOL_DEPENDS_TAG = "depends";
static final String CONTEXT_TOOL_DEPENDS_TOOL_TAG = "tool";
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";
// TODO: May add other types of dependencies
static final String CONTEXT_TOOL_DFLT_ACTION_LABEL = "Run for";
......@@ -120,7 +121,6 @@ public class XMLConfig extends Config {
static final String CONTEXT_TOOL_DFLT_ACTION_CHECK_EXTENSION = "true";
static final String CONTEXT_TOOL_DFLT_ACTION_CHECK_EXISTENCE = "false";
static final String CONTEXT_TOOL_EXTENSION_MASK_ATTR = "mask";
static final String CONTEXT_TOOL_SYNTAX_ERRORS = "errors";
static final String CONTEXT_TOOL_SYNTAX_WARNINGS= "warnings";
static final String CONTEXT_TOOL_SYNTAX_INFO = "info";
......@@ -1066,9 +1066,9 @@ 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_TOOL_TAG);
String dep = getAttributeValue(node, CONTEXT_TOOL_DEPENDS_STATE_TAG);
if(dep == null)
throw new ConfigException(toolInfo + ": Attribute '" + CONTEXT_TOOL_DEPENDS_TOOL_TAG + "' is absent");
throw new ConfigException(toolInfo + ": Attribute '" + CONTEXT_TOOL_DEPENDS_STATE_TAG + "' is absent");
depList.add(dep);
}
return depList;
......
......@@ -21,7 +21,6 @@ import java.util.*;
import java.io.*;
import org.eclipse.core.resources.IProject;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IMemento;
import com.elphel.vdt.VDT;
......@@ -123,6 +122,7 @@ public class Tool extends Context implements Cloneable, Inheritable {
private TOOL_MODE runMode;
private TOOL_MODE lastRunMode; // last running (not STOP) mode
private int lastRunHash; // hash code of the last run
private ToolWaitingArguments toolWaitingArguments; // save here launch parameters wjhen tool need to wait for other tools to run/get restored
public Tool(String name,
String controlInterfaceName,
......@@ -217,22 +217,51 @@ public class Tool extends Context implements Cloneable, Inheritable {
}
public enum TOOL_MODE {
STOP,
WAIT,
RUN,
RESTORE,
SAVE,
PLAYBACK
}
public class ToolWaitingArguments{
private TOOL_MODE mode;
private int choice;
private String fullPath;
private String ignoreFilter;
public ToolWaitingArguments(
TOOL_MODE mode,
int choice,
String fullPath,
String ignoreFilter){
this.mode=mode;
this.choice=choice;
this.fullPath=fullPath;
this.ignoreFilter=ignoreFilter;
}
public TOOL_MODE getMode() { return mode;}
public int getChoice() { return choice;}
public String getFullPath(){ return fullPath;}
public String getIgnoreFilter(){ return ignoreFilter;}
}
// public void setRunStamp(long runStamp) { this.runStamp=runStamp; }
public List<String> getDepends() { return depends; }
public boolean isDirty() { return dirty; }
// public boolean isRunning() { return running; }
public boolean isRunning() { return runMode!=TOOL_MODE.STOP; }
public boolean isRunning() { return (runMode!=TOOL_MODE.STOP) && ((runMode!=TOOL_MODE.WAIT)); }
public boolean isWaiting() { return runMode==TOOL_MODE.WAIT; }
public boolean isAlmostDone(){
if (runMode!=TOOL_MODE.STOP) return false;
if ((getRestore()!=null) && (getRestore().isRunning())) return true;
if ((getSave()!=null) && (getSave().isRunning())) return true;
return false;
}
public TOOL_MODE getMode() { return runMode; }
public TOOL_MODE getLastMode() { return lastRunMode; }
// public long getRunStamp() { return runStamp; }
public TOOL_STATE getState() { return state; }
public boolean isPinned() { return pinned; }
public String getOpenState() { return openState; }
......@@ -255,8 +284,14 @@ public class Tool extends Context implements Cloneable, Inheritable {
}
}
public void setModeWait(ToolWaitingArguments toolWaitingArguments) {
this.toolWaitingArguments = toolWaitingArguments;
setMode(TOOL_MODE.WAIT);
}
public void setMode(TOOL_MODE mode) {
if ((runMode!=TOOL_MODE.STOP) && (mode==TOOL_MODE.STOP)){ // jsut stopped
if (mode !=TOOL_MODE.WAIT) this.toolWaitingArguments = null;
if ((runMode!=TOOL_MODE.STOP) && (mode==TOOL_MODE.STOP)){ // just stopped
lastRunHash=getCurrentHash();
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_TOOL_SEQUENCE)) {
System.out.println(":::: Tool "+name+": lastRunHash="+lastRunHash);
......@@ -294,7 +329,7 @@ public class Tool extends Context implements Cloneable, Inheritable {
System.out.println("SetState("+state+")");
}
}
public void setDesignFlowView (DesignFlowView designFlowView){
this.designFlowView = designFlowView; // to be able to update actions and so the state icons
}
......
......@@ -24,6 +24,7 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.swt.widgets.Display;
import com.elphel.vdt.Txt;
......@@ -54,9 +55,125 @@ public class ToolSequence {
private boolean stopOn; // Stop button is pressed
private boolean saveOn; // save button is on
public ToolSequence(DesignFlowView designFlowView){
this.designFlowView=designFlowView;
}
public void toolFinished(Tool tool){
doToolFinished(tool);
if (designFlowView!=null){
Display.getDefault().syncExec(new Runnable() {
public void run() {
designFlowView.updateLaunchAction(); // Run from Display thread to prevent "invalid thread access" when called from Runner
}
});
}
}
public void doToolFinished(Tool tool){
if (tool.isRunning()) {
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_TOOL_SEQUENCE))
System.out.println("\nTool "+tool.getName()+" is still running");
return;
}
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_TOOL_SEQUENCE))
System.out.println("\nTool "+tool.getName()+" FINISHED , state="+tool.getState()+", mode="+tool.getLastMode());
if (tool.getState()==TOOL_STATE.SUCCESS){
// Update state of the session(s) - should be done after run or restore
if ((tool.getLastMode()==TOOL_MODE.RUN) || (tool.getLastMode()==TOOL_MODE.RESTORE)){
boolean sessionUpdated=updateSessionTools(tool); // Update state
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_TOOL_SEQUENCE))
System.out.println("updateSessionTools("+tool.getName()+"tool)-> "+sessionUpdated);
}
if (tool.getLastMode()==TOOL_MODE.RESTORE){
restoreToolProperties(tool);// set last run hashcode and timestamp for the tool just restored
}
// Check for stop here
if ((tool.getLastMode()==TOOL_MODE.RUN) || (tool.getLastMode()==TOOL_MODE.SAVE)){
updateLinkLatest(tool); // Do not update link if the session was just restored. Or should it be updated
}
getToolsToSave(); // find if there are any sessions in unsaved state - returns list (not yet processed)
if (tryAutoSave(tool)) return; // started autoSave that will trigger "toolFinished" again
} else if (tool.getState()==TOOL_STATE.KEPT_OPEN){ // Got here after launching a session
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_TOOL_SEQUENCE))
System.out.println("\nTool "+tool.getName()+" kept open , state="+tool.getState()+", mode="+tool.getLastMode());
} else { // Process failures here
}
}
/**
* Find which tool to run to satisfy dependency of the specified tool (may be recursive - make sure no loops)
* @param tool tool to satisfy dependency for
* @return tool to run or null - failed to find any
*/
private Tool findToolToLaunch(Tool tool, boolean launchSessions){
List<Tool> consoleTools= getUsedConsoles(tool);
if (launchSessions) for (Tool consoleTool:consoleTools){ // or maybe do it after other dependencies?
if (consoleTool.getState()!=TOOL_STATE.KEPT_OPEN) {
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_OTHER)) {
System.out.println("Need to launch tool"+consoleTool.getName()+" to satisfy dependencies of tool "+tool.getName());
}
return consoleTool;
}
}
// All session tools are running
return null;
}
public void launchToolSequence(
Tool tool,
TOOL_MODE mode,
int choice,
String fullPath,
String ignoreFilter) throws CoreException {
if (!okToRun()) return;
// tool.setDesignFlowView(designFlowView);
tool.setDesignFlowView(designFlowView); // maybe will not be needed with ToolSequencing class
tool.setMode(mode) ; //TOOL_MODE.RUN);
tool.toolFinished();
tool.setChoice(0);
SelectedResourceManager.getDefault().updateActionChoice(fullPath, choice, ignoreFilter); // Andrey
SelectedResourceManager.getDefault().setBuildStamp(); // Andrey
// apply designFlowView to the tool itself
LaunchCore.launch( tool,
SelectedResourceManager.getDefault().getSelectedProject(),
fullPath,
null); // run, not playback
} // launchTool()
// TODO: restore "working copy" functionality here to be able to play back logs while tools are running
// It just should not touch the actual tool state
public void playLogs(// does immediately, no need of console (wait for console) - need the tool itself. So
Tool tool,
String fullPath,
String logBuildStamp) throws CoreException {
if (logBuildStamp==null) return; // cancelled selection
if (!okToRun()) return;
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_OTHER)) {
System.out.println("logBuildStamp="+logBuildStamp);
}
tool.setDesignFlowView(designFlowView);
// tool.setRunning(true);
tool.setMode(TOOL_MODE.PLAYBACK);
tool.toolFinished();
tool.setChoice(0);
SelectedResourceManager.getDefault().updateActionChoice(fullPath, 0, null); // Andrey
SelectedResourceManager.getDefault().setBuildStamp(); // OK - even for log? Or use old/selected one?
// apply designFlowView to the tool itself
LaunchCore.launch(tool,
SelectedResourceManager.getDefault().getSelectedProject(),
fullPath,
logBuildStamp);
} // launchTool()
public boolean okToRun(){
if (isAnyToolRunnig()){
if (isAnyToolRunnigOrWaiting()){
MessageUI.error("Some tool(s) are running, can not start another one. Press 'stop' button while holding"+
" 'Shift' key if it is an error. This is a debug feature - the tools will not be stopped (just marked as if stopped)");
return false;
......@@ -77,9 +194,6 @@ public class ToolSequence {
return shiftPressed;
}
public ToolSequence(DesignFlowView designFlowView){
this.designFlowView=designFlowView;
}
public void setStop(boolean pressed){
this.stopOn=pressed;
if (pressed && shiftPressed) {
......@@ -180,11 +294,11 @@ public class ToolSequence {
}
//TODO: make possible to run multiple tools async if they do not share common session
public boolean isAnyToolRunnig(){
public boolean isAnyToolRunnigOrWaiting(){
IProject project = SelectedResourceManager.getDefault().getSelectedProject(); // should not be null when we got here
List<Tool> saveToolsList=new ArrayList<Tool>();
for (Tool tool : ToolsCore.getConfig().getContextManager().getToolList()){
if (tool.isRunning()) return true;
if (tool.isRunning() || tool.isWaiting()) return true;
}
return false;
}
......@@ -202,51 +316,6 @@ public class ToolSequence {
}
public void toolFinished(Tool tool){
if (tool.isRunning()) {
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_TOOL_SEQUENCE))
System.out.println("\nTool "+tool.getName()+" is still running");
return;
}
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_TOOL_SEQUENCE))
System.out.println("\nTool "+tool.getName()+" FINISHED , state="+tool.getState()+", mode="+tool.getLastMode());
if (tool.getState()==TOOL_STATE.SUCCESS){
// Update state of the session(s) - should be done after run or restore
if (
(tool.getLastMode()==TOOL_MODE.RUN) ||
(tool.getLastMode()==TOOL_MODE.RESTORE)){
boolean sessionUpdated=updateSessionTools(tool); // Update state
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_TOOL_SEQUENCE))
System.out.println("updateSessionTools("+tool.getName()+"tool)-> "+sessionUpdated);
}
if (tool.getLastMode()==TOOL_MODE.RESTORE){
restoreToolProperties(tool);// set last run hashcode and timestamp for the tool just restored
}
// Check for stop here
if (
(tool.getLastMode()==TOOL_MODE.RUN) || // not needed, but won't harm. Update will be after save
(tool.getLastMode()==TOOL_MODE.SAVE)){
updateLinkLatest(tool); // Do not update link if the session was just restored. Or should it be updated
//Currently hashcode/timestamp are set by the restore tool (at least when (by mistake) it was trying to save - it used it's own
}
getToolsToSave();
if (tryAutoSave(tool)) return; // started autoSave that will trigger "toolFinished" again
} else if (tool.getState()==TOOL_STATE.KEPT_OPEN){
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_TOOL_SEQUENCE))
System.out.println("\nTool "+tool.getName()+" kept open , state="+tool.getState()+", mode="+tool.getLastMode());
} else {
}
if (designFlowView!=null){
Display.getDefault().syncExec(new Runnable() {
public void run() {
designFlowView.updateLaunchAction(); // Run from Display thread to prevent "invalid thread access" when called from Runner
}
});
}
}
public boolean restoreToolProperties(Tool tool){
if (tool.getLastMode()!=TOOL_MODE.RESTORE) return false;
if (tool.getRestoreMaster()!=null) tool=tool.getRestoreMaster();
......@@ -356,10 +425,11 @@ public class ToolSequence {
" stateDirString="+stateDirString+
" linkString ="+linkString+
" targetString="+targetString);
if ((stateDirString==null) || (targetString==null) || (linkString==null)) return;
IProject project = SelectedResourceManager.getDefault().getSelectedProject(); // should not be null when we got here
IFolder stateDir= project.getFolder((stateDirString==null)?"":stateDirString);
// Create file for target and see if it actually exists
IFile target= stateDir.getFile(targetString);
IFile target= stateDir.getFile(targetString); // null pointer after error in copying files
// Eclipse does not know IFile exists until it refreshes. It is also possible to test File existence, not the IFile
try {
target.refreshLocal(0, null); // long-running
......@@ -442,18 +512,7 @@ public class ToolSequence {
", no session will be updated");
return false;
}
List<Tool> sessionList=new ArrayList<Tool>();
List<String> consoleNames=tool.getSessionConsoles();
if (consoleNames!=null){
for(Iterator<String> iter = consoleNames.iterator(); iter.hasNext();) {
String consoleName=iter.next();
if (consoleName!=null) {
Tool consoleTool=ToolsCore.getContextManager().findTool(consoleName);
if (tool!=null) sessionList.add(consoleTool);
}
}
}
List<Tool> sessionList=getUsedConsoles(tool); // never null
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_TOOL_SEQUENCE))
System.out.println("Found "+sessionList.size()+" console sessions for this tool "+tool.getName());
if (sessionList.size()>0){
......@@ -475,6 +534,23 @@ public class ToolSequence {
}
return true;
}
List<Tool> getUsedConsoles(Tool tool){
List<Tool> sessionList=new ArrayList<Tool>();
List<String> consoleNames=tool.getSessionConsoles(); // which consoles are used by this tool
if (consoleNames!=null){
for(Iterator<String> iter = consoleNames.iterator(); iter.hasNext();) {
String consoleName=iter.next();
if (consoleName!=null) {
Tool consoleTool=ToolsCore.getContextManager().findTool(consoleName);
if (tool!=null) sessionList.add(consoleTool);
}
}
}
return sessionList;
}
public String getSelectedStateFile(Tool tool, boolean select){
String [] filter=splitResultName(tool);
String linkString=tool.getResultName();
......
......@@ -89,7 +89,10 @@ public class VDTPluginImages {
public static final String ICON_TOOLSTATE_WTF = "obj16"+File.separator+"question.png";
public static final String ICON_TOOLSTATE_WTF_OLD = "obj16"+File.separator+"question_dim.png";
public static final String ICON_TOOLSTATE_RUNNING = "obj16"+File.separator+"spinning.gif";
// public static final String ICON_TOOLSTATE_KEPT_OPEN= "obj16"+File.separator+"heart.gif";
public static final String ICON_TOOLSTATE_WAITING = "obj16"+File.separator+"hourglass.gif";
public static final String ICON_TOOLSTATE_ALMOST_GOOD = "obj16"+File.separator+"check_almost.gif";
public static final String ICON_TOOLSTATE_ALMOST_WTF = "obj16"+File.separator+"question_almost.gif";
public static final String ICON_TOOLSTATE_KEPT_OPEN= "obj16"+File.separator+"beat.gif";
public static final String ICON_TOOLSTATE_PINNED = "obj16"+File.separator+"pinned_good.png";
......@@ -101,6 +104,11 @@ public class VDTPluginImages {
public static final String KEY_TOOLSTATE_WTF = "TOOLSTATE_WTF";
public static final String KEY_TOOLSTATE_WTF_OLD = "TOOLSTATE_WTF_OLD";
public static final String KEY_TOOLSTATE_RUNNING = "TOOLSTATE_RUNNING";
public static final String KEY_TOOLSTATE_WAITING = "TOOLSTATE_WAITING";
public static final String KEY_TOOLSTATE_ALMOST_GOOD = "TOOLSTATE_ALMOST_GOOD";
public static final String KEY_TOOLSTATE_ALMOST_WTF = "TOOLSTATE_ALMOST_WTF";
public static final String KEY_TOOLSTATE_KEPT_OPEN ="TOOLSTATE_KEPT_OPEN";
public static final String KEY_TOOLSTATE_PINNED = "TOOLSTATE_PINNED";
......
......@@ -798,7 +798,6 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
public void run() {
try {
playLogs(
fDesignFlowView, // to be able to launch update when build state of the tool changes
false,
fFullPath,
fIgnoreFilter);
......@@ -813,7 +812,6 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
public void run() {
try {
playLogs(
fDesignFlowView, // to be able to launch update when build state of the tool changes
true,
fFullPath,
fIgnoreFilter);
......@@ -881,20 +879,7 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
String fullPath,
String ignoreFilter) throws CoreException {
if (tool != null) {
// tool.setDesignFlowView(designFlowView);
tool.setDesignFlowView(this); // maybe will not be needed with ToolSequencing class
if (!toolSequence.okToRun()) return;
tool.setMode(mode) ; //TOOL_MODE.RUN);
tool.toolFinished();
tool.setChoice(0);
SelectedResourceManager.getDefault().updateActionChoice(fullPath, choice, ignoreFilter); // Andrey
SelectedResourceManager.getDefault().setBuildStamp(); // Andrey
// apply designFlowView to the tool itself
LaunchCore.launch( tool,
selectedResource.getProject(),
fullPath,
null); // run, not playback
toolSequence.launchToolSequence(tool,mode, choice, fullPath, ignoreFilter);
} else if (selectedItem.hasChildren()) {
if (viewer.getExpandedState(selectedItem))
viewer.collapseToLevel(selectedItem, AbstractTreeViewer.ALL_LEVELS);
......@@ -903,10 +888,7 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
}
} // launchTool()
private void playLogs(
final DesignFlowView designFlowView,
boolean select, // select log file
String fullPath,
String ignoreFilter) throws CoreException {
......@@ -917,21 +899,10 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_OTHER)) {
System.out.println("logBuildStamp="+logBuildStamp);
}
tool.setDesignFlowView(designFlowView);
if (!toolSequence.okToRun()) return;
// tool.setRunning(true);
tool.setMode(TOOL_MODE.PLAYBACK);
tool.toolFinished();
tool.setChoice(0);
SelectedResourceManager.getDefault().updateActionChoice(fullPath, 0, ignoreFilter); // Andrey
SelectedResourceManager.getDefault().setBuildStamp(); // OK - even for log? Or use old/selected one?
// apply designFlowView to the tool itself
LaunchCore.launch(tool,
selectedResource.getProject(),
fullPath,
logBuildStamp);
// probably should not get here if not a tool
toolSequence.playLogs(
tool,
fullPath,
logBuildStamp);
} else if (selectedItem.hasChildren()) {
if (viewer.getExpandedState(selectedItem))
viewer.collapseToLevel(selectedItem, AbstractTreeViewer.ALL_LEVELS);
......
......@@ -48,6 +48,7 @@ import com.elphel.vdt.core.tools.menu.DesignMenu;
import com.elphel.vdt.core.tools.menu.DesignMenuItem;
import com.elphel.vdt.core.tools.menu.DesignMenuToolItem;
import com.elphel.vdt.core.tools.params.Tool;
import com.elphel.vdt.core.tools.params.Tool.TOOL_STATE;
import com.elphel.vdt.ui.VDTPluginImages;
import com.elphel.vdt.ui.variables.SelectedResourceManager;
......@@ -308,7 +309,15 @@ public class DesignMenuModel {
if (tool.isRunning()){
iconName=VDTPluginImages.ICON_TOOLSTATE_RUNNING;
key= VDTPluginImages.KEY_TOOLSTATE_RUNNING;
} else if (tool.isWaiting()){
iconName=VDTPluginImages.ICON_TOOLSTATE_WAITING;
key= VDTPluginImages.KEY_TOOLSTATE_WAITING;
} else if (tool.isAlmostDone()&& (tool.getState()==TOOL_STATE.SUCCESS )){
iconName=VDTPluginImages.ICON_TOOLSTATE_ALMOST_GOOD;
key= VDTPluginImages.KEY_TOOLSTATE_ALMOST_GOOD;
} else if (tool.isAlmostDone()&& (tool.getState()==TOOL_STATE.UNKNOWN )){
iconName=VDTPluginImages.ICON_TOOLSTATE_ALMOST_WTF;
key= VDTPluginImages.KEY_TOOLSTATE_ALMOST_WTF;
} else {
switch (tool.getState()){
case NEW:
......
......@@ -44,40 +44,65 @@
label="Start remote Vivado session"
icon="door_in.png"
call="Vivado"/>
<menuitem name="VivadoSynthesis"
label="Synthesize design"
icon="Retort.png"
call="VivadoSynthesis"/>
<menu name="VivadoSynthesisTools"
label="Synthesis Tools"
icon="Retort.png">
<menuitem name="VivadoSynthesis"
label="Synthesize design"
icon="Retort.png"
call="VivadoSynthesis"/>
<menuitem name="VivadoTimingReportSynthesis"
label="Timing report"
icon="clock.png"
call="VivadoTimingReportSynthesis"/>
<menuitem name="VivadoTimimgSummaryReportSynthesis"
label="Timing summary"
icon="clock_sum.png"
call="VivadoTimimgSummaryReportSynthesis"/>
</menu>
<!-- <menuitem name="VivadoOptPlace"
label="Optimize and place design"
icon="mondrian2x2.png"
call="VivadoOptPlace"/> -->
<menu name="VivadoImplementationTools"
label="Implementation tools"
icon="process.gif">
<menuitem name="VivadoOpt"
label="Optimize design"
icon="opt_blue.png"
call="VivadoOpt"/>
<menuitem name="VivadoOpt"
label="Optimize design"
icon="opt_blue.png"
call="VivadoOpt"/>
<menuitem name="VivadoOptPower"
label="Reduce power"
icon="fire.png"
call="VivadoOptPower"/>
<menuitem name="VivadoOptPower"
label="Reduce power"
icon="fire.png"
call="VivadoOptPower"/>
<menuitem name="VivadoPlace"
label="Place design"
icon="mondrian2x2.png"
call="VivadoPlace"/>
<menuitem name="VivadoOptPhys"
label="Post-placement optimize"
icon="opt_yellow.png"
call="VivadoOptPhys"/>
<menuitem name="VivadoPlace"
label="Place design"
icon="mondrian2x2.png"
call="VivadoPlace"/>
<menuitem name="VivadoRoute"
label="Route design"
icon="route66.png"
call="VivadoRoute"/>
<menuitem name="VivadoOptPhys"
label="Post-placement optimize"
icon="opt_yellow.png"
call="VivadoOptPhys"/>
<menuitem name="VivadoRoute"
label="Route design"
icon="route66.png"
call="VivadoRoute"/>
<menuitem name="VivadoTimingReportImplemented"
label="Timing report"
icon="clock.png"
call="VivadoTimingReportImplemented"/>
<menuitem name="VivadoTimimgSummaryReportImplemented"
label="Timing summary"
icon="clock_sum.png"
call="VivadoTimimgSummaryReportImplemented"/>
</menu>
<menuitem name="VivadoBitstream"
label="Generate bitstream"
icon="bitstream.png"
......
......@@ -107,12 +107,15 @@
<parameter id="VivadoProjectRoot" label="Workspace directory" tooltip="Relative (to user home directory) path of the workspace on Vivado server"
type="String" default="vdt" format="RemoteRootSyntax" readonly="false" />
<parameter id="VivadoLocalDir" label="Local Xilinx directory" tooltip="Local project subdirectroy for Xilinx Vivado generated files"
type="Pathname" default="vivado" format="CopyValue" readonly="false" />
<parameter id="VivadoRemoteDir" label="Remote Vivado directory" tooltip="Remote Vivado output subdirectroy for snapshot and result files"
type="Pathname" default="vivado_build" format="CopyValue" readonly="false" />
<parameter id="VivadoLocalResultDir" label="Local Xilinx results directory"
<parameter id="VivadoLocalDir" label="Local Vivado directory" tooltip="Local project subdirectroy for Xilinx Vivado snapshot files"
type="Pathname" default="vivado_state" format="CopyValue" readonly="false" />
<parameter id="VivadoLocalResultDir" label="Local Vivado results directory"
tooltip="Local project subdirectroy for Xilinx Vivado generated result files"
type="Pathname" default="vivado" format="CopyValue" readonly="false" />
type="Pathname" default="vivado_results" format="CopyValue" readonly="false" />
<parameter id="VivadoLogDir" label="Local Vivado tool logsx directory" tooltip="Local project subdirectroy for Xilinx Vivado tools log files"
type="Pathname" default="vivado_logs" format="CopyValue" readonly="false" />
......@@ -217,6 +220,7 @@
<group name="Vivado" label="Vivado general properties">
"part"
"VivadoProjectRoot"
"VivadoRemoteDir"
"VivadoLocalDir"
"VivadoLocalResultDir"
"VivadoLogDir"
......
......@@ -17,6 +17,9 @@
<action-menu>
<action label="Generate bitstream" resource="" icon="bitstream.png" />
</action-menu>
<depends-list>
<depends state="SnapshotRoute"/>
</depends-list>
<parameter id="SkipPreBitstream" label="Skip pre-bitstream" tooltip="Do not run pre bitstream TCL commands"
default="false" type= "Boolean" format="None"/>
<!-- left from synthesis, may need update-->
......@@ -43,7 +46,7 @@
<!-- write_bitstream arguments -->
<parameter id="filename" label="Bitstream filename" tooltip= "Bitstream file name (will add *.bit extension)."
<parameter id="rawfile" label="Bitstream filename" tooltip= "Bitstream file name (will add *.bit extension)."
default="%%ProjectName" visible="true" omit="" type="String" format="CopyValue"/>
<parameter id="force" label="Force (overwrite)" tooltip= "Overwrite existent files."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
......@@ -60,7 +63,7 @@
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="reference_bitfile" label="Read reference bitfile" tooltip= "Read reference bitstream file."
default="" visible="true" omit="" type="Filename" format="Dash"/>
default="" visible="true" omit="" type="Filename" format="CopyValue"/>
<parameter id="quiet_bit" outid="quiet" label="Quiet" tooltip= "Ignore errors, return TCL_OK in any case"
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="verbose_bit" outid="verbose" label="Verbose" tooltip= "Temporarily override message limits set with set_msg_config"
......@@ -106,9 +109,11 @@
<!-- hidden (calculated) parameters -->
<!-- not really used now, always "0" -->
<parameter id="VivadoBitstreamActionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" />
<input>
<group name="General">
......@@ -121,7 +126,7 @@
"PreBitstreamTCL"
</group>
<group name="Bitstream">
"filename"
"rawfile"
"force"
"raw_bitfile"
"no_binary_bitfile"
......@@ -161,9 +166,9 @@
"-c"
"rsync -avrR -e ssh"
<!-- from: (trying full name) -->
"%reference_bitfile"
"%VivadoLocalResultDir/%reference_bitfile"
<!-- to: -->
"%RemoteUser@%RemoteHost:%VivadoProjectRoot/build"
"%RemoteUser@%RemoteHost:%VivadoProjectRoot/%VivadoRemoteDir"
";"
</line>
</if-not>
......@@ -171,13 +176,13 @@
<line name="vivado_run_bitstream"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
prompt="@@FINISH@@"
success="write_bitstream completed successfully"
log=""
stdout="parser_VivadoBitstream">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
<!-- Run pre-bitstream TCL commands (if specified) -->
<if SkipPreBitstream="false">
......@@ -190,16 +195,18 @@
</if>
<!-- Run routing -->
"write_bitstream "
"%filename"
"%force"
"%raw_bitfile"
"%no_binary_bitfile"
"%readback_file"
"%logic_location_file"
"%bin_file"
"%reference_bitfile"
<if-not reference_bitfile="">
"-reference_bitfile %VivadoRemoteDir/%reference_bitfile"
</if-not>
"%quiet_bit"
"%verbose_bit"
"%VivadoRemoteDir/%rawfile"
"\n"
"puts \"@@FINISH@@\"\n"
</line>
......@@ -207,7 +214,7 @@
"-c"
"mkdir -p %VivadoLocalResultDir ;"
"rsync -avr -e ssh"
"%RemoteUser@%RemoteHost:%VivadoProjectRoot/build/%filename.*"
"%RemoteUser@%RemoteHost:%VivadoProjectRoot/%VivadoRemoteDir/%rawfile.*"
"%VivadoLocalResultDir/"
</line>
<line name="parser_VivadoBitstream"
......
......@@ -46,14 +46,14 @@
<line name="vivado_restore"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
failure="ERROR"
prompt="@@FINISH@@"
log="">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
"open_checkpoint %%StateFile\n"
"open_checkpoint %VivadoRemoteDir/%%StateFile\n"
"puts \"@@FINISH@@\"\n"
</line>
</output>
......@@ -71,21 +71,21 @@
<line name="vivado_save"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
prompt="@@FINISH@@"
failure="ERROR"
log="">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
"write_checkpoint -force %%StateFile\n"
"write_checkpoint -force %VivadoRemoteDir/%%StateFile\n"
"puts \"@@FINISH@@\"\n"
</line>
<line name="vivado_copy_after_save">
"-c"
"mkdir -p %VivadoLocalDir ;"
"rsync -avr -e ssh"
"%RemoteUser@%RemoteHost:%VivadoProjectRoot/%%StateFile"
"%RemoteUser@%RemoteHost:%VivadoProjectRoot/%VivadoRemoteDir/%%StateFile"
"%%StateDir/"
</line>
</output>
......
......@@ -61,8 +61,6 @@
sep=""
success="Finished parsing RTL primitives"
prompt="@@FINISH@@">
<!-- "cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"-->
"puts \"@@FINISH@@\"\n"
</line>
......
......@@ -32,6 +32,11 @@
<action-menu>
<action label="Optimize" resource="" icon="opt_blue.png" />
</action-menu>
<depends-list>
<depends state="SnapshotSynth"/>
</depends-list>
<parameter id="SkipPreOptimization" label="Skip pre-optimization" tooltip="Do not run pre optimization TCL commands"
default="false" type= "Boolean" format="None"/>
<parameter id="SkipOptimization" label="Skip optimize" tooltip="Do not run opt_design"
......@@ -172,13 +177,13 @@
<line name="vivado_run_opt"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
prompt="@@FINISH@@"
success="opt_design completed successfully"
log=""
stdout="parser_VivadoOpt">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
<!-- Run pre-optimization TCL commands (if specified) -->
<if SkipPreOptimization="false">
......
......@@ -29,11 +29,13 @@
disable="DisableVivadoOptPhys"
autosave="AutosaveVivadoOptPhys"
save="SaveVivadoOptPhys"
>
<action-menu>
<action label="Post placement optimize" resource="" icon="opt_yellow.png" />
</action-menu>
<depends-list>
<depends state="SnapshotPlace"/>
</depends-list>
<parameter id="SkipPreOptimization" label="Skip pre-optimization" tooltip="Do not run pre optimization TCL commands"
default="false" type= "Boolean" format="None"/>
<parameter id="SkipPhysOpt" label="Skip physical optimize" tooltip="Do not run phys_opt_design"
......@@ -192,13 +194,13 @@
<line name="vivado_run_opt_phys"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
prompt="@@FINISH@@"
success="phys_opt_design completed successfully"
log=""
stdout="parser_VivadoOptPhys">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
<!-- Run pre-optimization TCL commands (if specified) -->
<if SkipPreOptimization="false">
......
......@@ -66,6 +66,9 @@
<action-menu>
<action label="Optimize and Place" resource="" icon="mondrian2x2.png" />
</action-menu>
<depends-list>
<depends state="SnapshotSynth"/>
</depends-list>
<parameter id="SkipPreOptimization" label="Skip pre-optimization" tooltip="Do not run pre optimization TCL commands"
default="false" type= "Boolean" format="None"/>
<parameter id="SkipOptimization" label="Skip optimize" tooltip="Do not run opt_design"
......@@ -309,13 +312,13 @@
<line name="vivado_run_opt"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
prompt="@@FINISH@@"
success="phys_opt_design completed successfully"
log=""
stdout="parser_VivadoOpt">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
<!-- Run pre-optimization TCL commands (if specified) -->
<if SkipPreOptimization="false">
......
......@@ -21,6 +21,9 @@
<action-menu>
<action label="Power optimize" resource="" icon="fire.png" />
</action-menu>
<depends-list>
<depends state="SnapshotOpt"/>
</depends-list>
<parameter id="SkipPreOptimization" label="Skip pre-optimization" tooltip="Do not run pre optimization TCL commands"
default="false" type= "Boolean" format="None"/>
<parameter id="SkipPowerOptimization" label="skip power optimize" tooltip="Do not run power_opt_design"
......@@ -127,13 +130,13 @@
<line name="vivado_run_opt_pwr"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
prompt="@@FINISH@@"
success="power_opt_design completed successfully"
log=""
stdout="parser_VivadoOptPwr">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
<!-- Run pre-optimization TCL commands (if specified) -->
<if SkipPreOptimization="false">
......
......@@ -43,6 +43,9 @@
<action-menu>
<action label="Place" resource="" icon="mondrian2x2.png" />
</action-menu>
<depends-list>
<depends state="SnapshotOptPower"/>
</depends-list>
<parameter id="SkipPreOptimization" label="Skip pre-optimization" tooltip="Do not run pre optimization TCL commands"
default="false" type= "Boolean" format="None"/>
<parameter id="SkipPlacement" label="Skip place" tooltip="Do not run place_design"
......@@ -173,13 +176,13 @@
<line name="vivado_run_place"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
prompt="@@FINISH@@"
success="place_design completed successfully"
log=""
stdout="parser_VivadoPlace">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
<!-- Run pre-optimization TCL commands (if specified) -->
<if SkipPreOptimization="false">
......
......@@ -33,6 +33,9 @@
<action-menu>
<action label="Route" resource="" icon="route66.png" />
</action-menu>
<depends-list>
<depends state="SnapshotOptPhys"/>
</depends-list>
<parameter id="SkipPreRoute" label="Skip pre-route" tooltip="Do not run pre route TCL commands"
default="false" type= "Boolean" format="None"/>
<parameter id="SkipSnapshotRoute" label="Skip snapshot save" tooltip="Do not create snapshot after route"
......@@ -197,13 +200,13 @@
<line name="vivado_run_route"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
prompt="@@FINISH@@"
success="route_design completed successfully"
log=""
stdout="parser_VivadoRoute">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
<!-- Run pre-route TCL commands (if specified) -->
<if SkipPreRoute="false">
......
......@@ -267,14 +267,14 @@
<line name="vivado_run_synth"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
prompt="@@FINISH@@"
success="synth_design completed successfully"
log=""
stdout="parser_VivadoSynth">
<!-- synth_design completed successfully -->
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
<if ResetProject="true">
"reset_project -quiet\n"
</if>
......
<?xml version="1.0" encoding="UTF-8"?>
<vdt-project>
<tool name="VivadoTimingReportImplemented"
label="Report post-implementation timimg"
project="FPGA_project"
interface="VivadoReportTimingInterface"
package="FPGA_package"
inherits="VivadoReportTiming"
shell="/bin/bash"
description="Report post-implementation timimg"
disable="DisableVivadoTiming"
>
<depends-list>
<depends state="SnapshotOptPhys"/>
</depends-list>
<action-menu>
<action label="Report post-implementation timing" resource="" icon="clock.png" />
</action-menu>
<parameter id="DisableVivadoTiming" label="Disable" tooltip="Disable post-implementation timing report"
default="false" type= "Boolean" format="None"/>
<!-- TODO Add (copy from proto) parameters that should be different for post and pre routing.
Or add more derivative reports. -->
<parameter id="rawfile" label="Result filename" tooltip= "Write report to the specified file."
default="%%ProjectName.timing_impl" visible="true" omit="" type="String" format="CopyValue"/>
<parameter id="append" label="Append to file" tooltip= "Append to the output file."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="return_string" label="Return string" tooltip= "Write result to TCL to be captured into variable."
default="" visible="true" omit="" type="String" format="Dash"/>
<!-- Invisible (calculated) parameters -->
<!-- same value as %file, but will appear withou "-file" prefix -->
<parameter id="file" default="%VivadoRemoteDir/%rawfile" visible="false" omit="" type="String" format="Dash"/>
</tool>
</vdt-project>
<?xml version="1.0" encoding="UTF-8"?>
<vdt-project>
<interface name="VivadoReportTimingInterface" extends="VivadoInterface">
<typedef name = "Cardinal_0_3">
<paramtype kind="number" lo="0" hi="3" format="%d" />
</typedef>
<typedef name="DelayTypeType">
<paramtype kind= "enum" base="String">
<item value="min" label="Analyse minimal delays"/>
<item value="max" label="Analyze maximal maximal"/>
<item value="min_max" label="Analyze both minimal and maximal delays"/>
<item value="max_rise" label="Analyze maximal delays for rising fronts"/>
<item value="max_fall" label="Analyze maximal delays for falling fronts"/>
<item value="min_rise" label="Analyze minimal delays for rising fronts"/>
<item value="min_fall" label="Analyze minimal delays for falling fronts"/>
</paramtype>
</typedef>
<typedef name="PathTypeType">
<paramtype kind= "enum" base="String">
<item value="end" label="Shows the endpoint of the path only, with calculated timing values."/>
<item value="summary" label="Displays the startpoints and endpoints with slack calculation."/>
<item value="short" label="Displays the startpoints and endpoints with calculated timing values."/>
<item value="full" label="Displays the full timing path, including startpoints, through points, and endpoints."/>
<item value="full_clock" label="Displays full clock paths in addition to the full timing path."/>
<item value="full_clock_expanded" label="Displays full clock paths between a master clock and generated clocks in addition to the full_clock timing path."/>
</paramtype>
</typedef>
<typedef name="SortByType">
<paramtype kind= "enum" base="String">
<item value="slack" label="Sort results by slack value."/>
<item value="group" label="Sort results by path groups."/>
</paramtype>
</typedef>
<typedef name="MatchStyleType">
<paramtype kind= "enum" base="String">
<item value="sdc" label="Pattern matching style - SDC."/>
<item value="ucf" label="Pattern matching style UCF (obsolete, but default)."/>
</paramtype>
</typedef>
</interface>
<tool name="VivadoReportTiming" label="Report Timimg"
project="FPGA_project"
interface="VivadoReportTimingInterface"
package="FPGA_package"
shell="/bin/bash"
description="Report timing"
log-dir="VivadoLogDir"
state-dir="VivadoLocalDir"
disable="DisableVivadoTiming"
abstract="true"
>
<action-menu>
<action label="Report timing" resource="" icon="clock.png" />
</action-menu>
<parameter id="DisableVivadoTiming" label="Disable" tooltip="Disable timing report"
default="false" type= "Boolean" format="None"/>
<parameter id="SkipTCL" label="Skip TCL commands" tooltip="Do not run pre-timing summary TCL commands"
default="false" type= "Boolean" format="None"/>
<!-- left from synthesis, may need update-->
<parameter id="ShowWarnings" label="Parse warnings" tooltip="Parse warning messages"
default="true"
type= "Boolean" format="None"/>
<parameter id="ShowInfo" label="Parse info" tooltip="Parse info messages"
default="true"
type= "Boolean" format="None"/>
<parameter id="PreGrepW" visible="false"
type="String" format="None"
default="?%ShowWarnings=true: |WARNING, "/>
<parameter id="PreGrepI" visible="false"
type="String" format="None"
default="?%ShowInfo=true: |INFO, "/>
<parameter id="GrepEWI" label="Grep filter" tooltip="Calculated grep filter"
default="grep --line-buffered -E 'ERROR%PreGrepW%PreGrepI'"
type="String" format="CopyValue"
visible="true" readonly="true"/>
<parameter id="PreTCL" label="Pre timing summary TCL commands" tooltip="TCL commands to run before timing summary"
type="Stringlist" format="ProgramSyntax" default="" omit=""
readonly="false" visible="true" />
<!-- report_timing arguments -->
<parameter id="from" label="From"
tooltip= "The starting points of the timing paths to be analyzed."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="rise_from" label="From (rise only)"
tooltip= "As -from, but only rising edges analyzed."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="fall_from" label="From (fall only)"
tooltip= "As -from, but only falling edges analyzed."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="to" label="To"
tooltip= "The end points of the timing paths to be analyzed."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="rise_to" label="To (rise only)"
tooltip= "As -to, but only rising edges analyzed."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="fall_to" label="To (fall only)"
tooltip= "As -to, but only falling edges analyzed."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="through" label="Through points"
tooltip= "The through points of the timing paths to be analyzed. Each line may have multiple points in order"
default="" visible="true" omit="" type="Stringlist" format="DashListIndividual"/>
<parameter id="rise_through" label="Through points (rise only)"
tooltip= "As -to, but only rising edges analyzed."
default="" visible="true" omit="" type="Stringlist" format="DashListIndividual"/>
<parameter id="fall_through" label="Through points (fall only)"
tooltip= "As -to, but only falling edges analyzed."
default="" visible="true" omit="" type="Stringlist" format="DashListIndividual"/>
<parameter id="delay_type" label="Delay type" tooltip= "Delay types to analyze."
default="max" visible="true" omit="max" type="DelayTypeType" format="Dash"/>
<parameter id="setup" label="Check for setup violations" tooltip= "Same as -delay_type max."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="hold" label="Check for hold violations" tooltip= "Same as -delay_type min."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="max_paths" label="Number of paths per group"
tooltip= "Maximal number of paths to report per group."
default="1" visible="true" omit="1" type="Cardinal_1" format="Dash"/>
<parameter id="nworst" label="Number of paths" tooltip= "Maximal number of paths per endpoint."
default="1" visible="true" omit="1" type="Cardinal_1" format="Dash"/>
<parameter id="unique_pins" label="One path per unique set"
tooltip= "Only report timing paths through each unique set of pins, reporting one path per path group."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="path_type" label="Path type" tooltip= "Specify the path data to output in the timing summary report."
default="full_clock_expanded" visible="true" omit="full_clock_expanded" type="PathTypeType" format="Dash"/>
<parameter id="input_pins" label="Show input pins" tooltip= "Show input pins in the timing path report."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="no_header" label="No header" tooltip= "Do not add header information to the report."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="slack_lesser_than" label="Slack lesser than"
tooltip= "Report timing on paths with a calculated slack value less than the specified value."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="slack_greater_than" label="Slack greater than"
tooltip= "Report timing on paths with a calculated slack value greater than the specified value."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="group" label="Report paths for groups"
tooltip= "Report timing for paths in the specified path groups."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="sort_by" label="Sort by" tooltip= "Sort timing paths in the report."
default="slack" visible="true" omit="slack" type="SortByType" format="Dash"/>
<parameter id="no_report_unconstrained" label="Do not report unconstrained paths."
tooltip= "Do not report timing on unconstrained paths in the design (mutually exclusive with -user_ignored)."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="user_ignored" label="Report only ignored paths."
tooltip= "Report only paths that are usually ignored (mutually exclusive with -no_report_unconstrained)."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="match_style" label="Pattern match style" tooltip= "Pattern matching style."
default="ucf" visible="true" omit="ucf" type="MatchStyleType" format="Dash"/>
<parameter id="of_objects" label="Report timing objects"
tooltip= "Report timing for paths in the specified timing objects. Not compatible with -from*, -to* and -through* options."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="significant_digits" label="Number of digits" tooltip= "Number of significat digits ion the output."
default="3" visible="true" omit="3" type="Cardinal_0_3" format="Dash"/>
<parameter id="rawfile" label="Result filename" tooltip= "Write report to the specified file."
default="%%ProjectName.timing" visible="true" omit="" type="String" format="CopyValue"/>
<parameter id="append" label="Append to file" tooltip= "Append to the output file."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="return_string" label="Return string" tooltip= "Write result to TCL to be captured into variable."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="quiet" outid="quiet" label="Quiet" tooltip= "Ignore errors, return TCL_OK in any case"
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="verbose" outid="verbose" label="Verbose" tooltip= "Temporarily override message limits set with set_msg_config"
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<!-- parser parameters -->
<parameter id="PatternErrors" label="Errors" tooltip= "Regular expression for error messages"
default=".*ERROR: (\[.*\].*)\[(.*):([0-9]+)\]"
visible="true" type="String" format="CopyValue"/>
<parameter id="PatternWarnings" label="Warnings" tooltip= "Regular expression for warnings messages"
default=".*WARNING: (\[.*\].*)\[(.*):([0-9]+)\]"
visible="true" type="String" format="CopyValue"/>
<parameter id="PatternInfo" label="Info" tooltip= "Regular expression for info messages"
default=".*INFO: (\[.*\].*)\[(.*):([0-9]+)\]"
visible="true" type="String" format="CopyValue"/>
<parameter id="NoFileProblem" label="No-file problems" tooltip= "Report problems that do not specify particular source file/line"
default="true" visible="true" omit="false" type="Boolean" format="None"/>
<parameter id="Drc" label="Drc" tooltip= "Enable problems with [Drc to be reported"
default="true" visible="true" omit="true" type="Boolean" format="GrepFilterProblemSyntax"/>
<parameter id="Vivado_Tcl" label="Vivado_Tcl" tooltip= "Enable problems with [Vivado_Tcl to be reported"
default="true" visible="true" omit="true" type="Boolean" format="GrepFilterProblemSyntax"/>
<parameter id="Route" label="Route" tooltip= "Enable problems with [Route to be reported"
default="true" visible="true" omit="true" type="Boolean" format="GrepFilterProblemSyntax"/>
<!-- Other patterns copied from other commands, maybe not applicablwe here -->
<parameter id="Memdata" label="Memdata" tooltip= "Enable problems with [Memdata to be reported"
default="true" visible="true" omit="true" type="Boolean" format="GrepFilterProblemSyntax"/>
<parameter id="Netlist" label="Netlist" tooltip= "Enable problems with [Netlist to be reported"
default="true" visible="true" omit="true" type="Boolean" format="GrepFilterProblemSyntax"/>
<parameter id="Opt" label="Opt" tooltip= "Enable problems with [Opt to be reported"
default="true" visible="true" omit="true" type="Boolean" format="GrepFilterProblemSyntax"/>
<parameter id="Project" label="Project" tooltip= "Enable problems with [Project to be reported"
default="true" visible="true" omit="true" type="Boolean" format="GrepFilterProblemSyntax"/>
<parameter id="Timing" label="Timing" tooltip= "Enable problems with [Timing to be reported"
default="true" visible="true" omit="true" type="Boolean" format="GrepFilterProblemSyntax"/>
<parameter id="Pwropt" label="Pwropt" tooltip= "Enable problems with [Pwropt to be reported"
default="true" visible="true" omit="true" type="Boolean" format="GrepFilterProblemSyntax"/>
<parameter id="OtherProblems" label="Other problems" tooltip= "Other problem patterns (after opening '[') to be suppressed)"
default="" visible="true" omit="" type="Stringlist" format="GrepFilterProblemOtherSyntax"/>
<!-- Invisible (calculated) parameters -->
<!-- same value as %file, but will appear withou "-file" prefix -->
<parameter id="file" default="%VivadoRemoteDir/%rawfile" visible="false" omit="" type="String" format="Dash"/>
<input>
<group name="General">
"DisableVivadoTiming"
"SkipTCL"
"ShowWarnings"
"ShowInfo"
"GrepEWI"
</group>
<group name="TCL commands">
"PreTCL"
</group>
<group name="Timing Report">
"from"
"rise_from"
"fall_from"
"to"
"rise_to"
"fall_to"
"through"
"rise_through"
"fall_through"
"delay_type"
"setup"
"hold"
"max_paths"
"nworst"
"unique_pins"
"path_type"
"input_pins"
"no_header"
"slack_lesser_than"
"slack_greater_than"
"group"
"sort_by"
"no_report_unconstrained"
"user_ignored"
"match_style"
"of_objects"
"significant_digits"
"rawfile"
"append"
"return_string"
"---"
"quiet"
"verbose"
</group>
<group name="Parser">
"NoFileProblem"
"Drc"
"Vivado_Tcl"
"Route"
"Memdata"
"Netlist"
"Opt"
"Project"
"Timing"
"Pwropt"
"OtherProblems"
"---"
"PatternErrors"
"PatternWarnings"
"PatternInfo"
</group>
</input>
<output>
<line name="vivado_run_timing"
dest="VivadoConsole"
mark="``"
sep=" "
prompt="@@FINISH@@"
failure="ERROR"
log=""
stdout="parser_VivadoTiming">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
<!-- Run pre-bitstream TCL commands (if specified) -->
<if SkipTCL="false">
<if-not PreTCL="">
"%PreTCL\n"
</if-not>
<if PreTCL="">
"puts \"No TCL commands specified\"\n"'
</if>
</if>
<!-- Run routing -->
"report_timing "
"%from"
"%rise_from"
"%fall_from"
"%to"
"%rise_to"
"%fall_to"
"%through"
"%rise_through"
"%fall_through"
"%delay_type"
"%setup"
"%hold"
"%max_paths"
"%nworst"
"%unique_pins"
"%path_type"
"%input_pins"
"%no_header"
"%slack_lesser_than"
"%slack_greater_than"
"%group"
"%sort_by"
"%no_report_unconstrained"
"%user_ignored"
"%match_style"
"%of_objects"
"%significant_digits"
"%file"
"%append"
"%return_string"
"%quiet"
"%verbose"
"\n"
"puts \"@@FINISH@@\"\n"
</line>
<line name="vivado_copy_after_timing">
"-c"
"mkdir -p %VivadoLocalResultDir ;"
"rsync -avr -e ssh"
"%RemoteUser@%RemoteHost:%VivadoProjectRoot/%VivadoRemoteDir/%rawfile"
"%VivadoLocalResultDir/"
</line>
<line name="parser_VivadoTiming"
errors= "PatternErrors"
warnings= "PatternWarnings"
info= "PatternInfo">
"-c"
"%GrepEWI"
"| %SedPaths"
<if NoBabyTalk="true">
"| grep --line-buffered -v \"license\""
</if>
"%Drc"
"%Vivado_Tcl"
"%Route"
"%Memdata"
"%Netlist"
"%Opt"
"%Project"
"%Timing"
"%Pwropt"
"%OtherProblems"
<!-- TODO: change Placement to Routing? or such -->
<if NoFileProblem="true">
<!-- Add [Placement:0000] to lines that do not have [file:line] - then "Placement" will appear in "Problems" location-->
"| sed -u 's@^[^\[]*\[[^\[]*$@&amp;\[TimingReport:0000\]@'"
</if>
</line>
</output>
</tool>
</vdt-project>
<?xml version="1.0" encoding="UTF-8"?>
<vdt-project>
<tool name="VivadoTimimgSummaryReportImplemented"
label="Report post-implementation timimg summary"
project="FPGA_project"
interface="VivadoReportTimingSummaryInterface"
package="FPGA_package"
inherits="VivadoReportTimingSummary"
shell="/bin/bash"
description="Report post-implementation timimg summary"
disable="DisableVivadoTimingSummary"
>
<depends-list>
<depends state="SnapshotSynth"/>
</depends-list>
<action-menu>
<action label="Report post-implementation timing summary" resource="" icon="clock_sum.png" />
</action-menu>
<parameter id="DisableVivadoTimingSummary" label="Disable" tooltip="Disable post-implementation timing summary report"
default="false" type= "Boolean" format="None"/>
<!-- TODO Add (copy from proto) parameters that should be different for post and pre routing.
Or add more derivative reports. -->
<parameter id="rawfile" label="Result filename" tooltip= "Write report to the specified file."
default="%%ProjectName.timing_summary_impl" visible="true" omit="" type="String" format="CopyValue"/>
<parameter id="append" label="Append to file" tooltip= "Append to the output file."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="return_string" label="Return string" tooltip= "Write result to TCL to be captured into variable."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="datasheet" label="Datasheet info" tooltip= "Generate datasheet information for the report."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<!-- Invisible (calculated) parameters -->
<!-- same value as %file, but will appear withou "-file" prefix -->
<parameter id="file" default="%VivadoRemoteDir/%rawfile" visible="false" omit="" type="String" format="Dash"/>
</tool>
</vdt-project>
......@@ -37,9 +37,13 @@
abstract="true"
>
<action-menu>
<action label="Report timing summary" resource="" icon="clock.png" />
<action label="Report timing summary" resource="" icon="clock_sum.png" />
</action-menu>
<parameter id="SkipTCL" label="Skip TCL commands" tooltip="Do not run pre-timing summary TCL commands"
default="false" type= "Boolean" format="None"/>
<parameter id="SkipTCL" label="Skip TCL commands" tooltip="Do not run pre-timing summary TCL commands"
default="false" type= "Boolean" format="None"/>
<!-- left from synthesis, may need update-->
......@@ -96,15 +100,15 @@
tooltip= "Report timing on unconstrained paths in the design."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="significant_digits" label="Number of digits" tooltip= "Number of significat digits ion the output."
default="3" visible="true" omit="1" type="Cardinal_0_3" format="Dash"/>
default="3" visible="true" omit="3" type="Cardinal_0_3" format="Dash"/>
<parameter id="no_header" label="No header" tooltip= "Do not add header information to the report."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="file" label="Result filename" tooltip= "Write report to the specified file."
<parameter id="rawfile" label="Result filename" tooltip= "Write report to the specified file."
default="%%ProjectName.timing_summary" visible="true" omit="" type="String" format="CopyValue"/>
<parameter id="append" label="Append to file" tooltip= "Append to the output file."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="return_string" label="Return string" tooltip= "Write result to TCL to be captured into variable."
default="" visible="true" omit="" type="String" format="CopyValue"/>
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="datasheet" label="Datasheet info" tooltip= "Generate datasheet information for the report."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="quiet" outid="quiet" label="Quiet" tooltip= "Ignore errors, return TCL_OK in any case"
......@@ -146,10 +150,9 @@
<parameter id="OtherProblems" label="Other problems" tooltip= "Other problem patterns (after opening '[') to be suppressed)"
default="" visible="true" omit="" type="Stringlist" format="GrepFilterProblemOtherSyntax"/>
<!-- hidden (calculated) parameters -->
<!-- not really used now, always "0" -->
<parameter id="VivadoTimingSummaryActionIndex" default="%%ChosenActionIndex"
type="String" format="CopyValue" visible="false" />
<!-- Invisible (calculated) parameters -->
<!-- same value as %file, but will appear withou "-file" prefix -->
<parameter id="file" default="%VivadoRemoteDir/%rawfile" visible="false" omit="" type="String" format="Dash"/>
<input>
<group name="General">
......@@ -176,7 +179,7 @@
"report_unconstrained"
"significant_digits"
"no_header"
"file"
"rawfile"
"append"
"return_string"
"datasheet"
......@@ -206,13 +209,13 @@
<line name="vivado_run_timing_summary"
dest="VivadoConsole"
mark="``"
sep=""
sep=" "
prompt="@@FINISH@@"
success="report_timing_summary completed successfully"
failure="ERROR"
log=""
stdout="parser_VivadoTimingSummary">
"cd ~/%VivadoProjectRoot\n"
"set outputDir ~/%VivadoProjectRoot/build\n"
"set outputDir ~/%VivadoProjectRoot/%VivadoRemoteDir\n"
"file mkdir $outputDir\n"
<!-- Run pre-bitstream TCL commands (if specified) -->
<if SkipTCL="false">
......@@ -248,11 +251,11 @@
"\n"
"puts \"@@FINISH@@\"\n"
</line>
<line name="vivado_copy_after_bitstream">
<line name="vivado_copy_after_timing_summary">
"-c"
"mkdir -p %VivadoLocalResultDir ;"
"rsync -avr -e ssh"
"%RemoteUser@%RemoteHost:%VivadoProjectRoot/build/%file"
"%RemoteUser@%RemoteHost:%VivadoProjectRoot/%VivadoRemoteDir/%rawfile"
"%VivadoLocalResultDir/"
</line>
<line name="parser_VivadoTimingSummary"
......
<?xml version="1.0" encoding="UTF-8"?>
<vdt-project>
<tool name="VivadoTimimgSummaryReportSynthesis"
label="Report post-synthesis timimg summary"
project="FPGA_project"
interface="VivadoReportTimingSummaryInterface"
package="FPGA_package"
inherits="VivadoReportTimingSummary"
shell="/bin/bash"
description="Report post-synthesis timimg summary"
disable="DisableVivadoTimingSummary"
>
<depends-list>
<depends state="SnapshotSynth"/>
</depends-list>
<action-menu>
<action label="Report post-synthesis timing summary" resource="" icon="clock_sum.png" />
</action-menu>
<parameter id="DisableVivadoTimingSummary" label="Disable" tooltip="Disable post-synthesis timing summary report"
default="false" type= "Boolean" format="None"/>
<!-- TODO Add (copy from proto) parameters that should be different for post and pre routing.
Or add more derivative reports. -->
<parameter id="rawfile" label="Result filename" tooltip= "Write report to the specified file."
default="%%ProjectName.timing_summary_synth" visible="true" omit="" type="String" format="CopyValue"/>
<parameter id="append" label="Append to file" tooltip= "Append to the output file."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="return_string" label="Return string" tooltip= "Write result to TCL to be captured into variable."
default="" visible="true" omit="" type="String" format="Dash"/>
<parameter id="datasheet" label="Datasheet info" tooltip= "Generate datasheet information for the report."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<!-- Invisible (calculated) parameters -->
<!-- same value as %file, but will appear withou "-file" prefix -->
<parameter id="file" default="%VivadoRemoteDir/%rawfile" visible="false" omit="" type="String" format="Dash"/>
</tool>
</vdt-project>
<?xml version="1.0" encoding="UTF-8"?>
<vdt-project>
<tool name="VivadoTimingReportSynthesis"
label="Report post-synthesis timimg"
project="FPGA_project"
interface="VivadoReportTimingInterface"
package="FPGA_package"
inherits="VivadoReportTiming"
shell="/bin/bash"
description="Report post-synthesis timimg"
disable="DisableVivadoTiming"
>
<depends-list>
<depends state="SnapshotSynth"/>
</depends-list>
<action-menu>
<action label="Report post-synthesis timing" resource="" icon="clock.png" />
</action-menu>
<parameter id="DisableVivadoTiming" label="Disable" tooltip="Disable post-synthesis timing report"
default="false" type= "Boolean" format="None"/>
<!-- TODO Add (copy from proto) parameters that should be different for post and pre routing.
Or add more derivative reports. -->
<parameter id="rawfile" label="Result filename" tooltip= "Write report to the specified file."
default="%%ProjectName.timing_synth" visible="true" omit="" type="String" format="CopyValue"/>
<parameter id="append" label="Append to file" tooltip= "Append to the output file."
default="false" visible="true" omit="false" type="Boolean" format="DashName"/>
<parameter id="return_string" label="Return string" tooltip= "Write result to TCL to be captured into variable."
default="" visible="true" omit="" type="String" format="Dash"/>
<!-- Invisible (calculated) parameters -->
<!-- same value as %file, but will appear withou "-file" prefix -->
<parameter id="file" default="%VivadoRemoteDir/%rawfile" visible="false" omit="" type="String" format="Dash"/>
</tool>
</vdt-project>
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