AR# 51418


Vivado - Running pre Tcl script modifying HDL sources for Synthesis shows Synthesis out-of-date when it is actually complete


I have a Tcl script that interacts with my HDL source files (for example, it appends a comment in the file VHDL source files with the current date, time, version and build number).

I run this script automatically prior to running the Vivado Synthesis tool, using the pre Tcl option in the Synthesis settings.

The script runs correctly and synthesis completes. However, the synthesis status in the Vivado GUI is shown as "Out of Date" even though synthesis completed successfully.

This prevents me from running the implementation without manual intervention to force the Synthesis to complete status.

Why is the status being set to "Out of Date"? Can I run my script using the pre synthesis Tcl option and still avoid this issue?


The Vivado tcl.pre/ commands are designed to wrap the specific Tcl command as closely as possible. 

Consequently, the check for status is based on the state of the HDL source files at the beginning of the entire synthesis operation (including tcl.pre and script commands). 

The status of the command is set to "Out of Date" because the source files are changed after the start of the command.

For now, the following options are available, but are all manual:

  • From the Tcl Console, after Synthesis has completed, run the following: set_property needs_refresh false [get_runs synth_1]
  • From the Tcl Console, run a Tcl script containing the above command.
  • By clicking the "more info" link on the top right corner next to the string "Synthesis and Implementation Out-of-Date". Another small window opens where you can select "Force up-to-date".
  • IF you are OK with the timestamp not being changed on the source file even though you are making an edit, Vivado can be tricked into not recognizing that the file is out-of-date by preserving the original file timestamp
    1. Before making a source file change, capture the original timestamp.  For example: "set temp_time [file mtime $pkg_file]"
    2. Make the desired file change.
    3. Restore the original file timestamp. For example: "file mtime $pkg_file $temp_time"
    • Caution: If using this method, ensure that no functional change is made to the source file.  If you are viewing the file in the Vivado editor, you will not be prompted to reload the file after it has been updated.

Note: A post Tcl script will not work in the Synthesis Settings as this is all considered to be part of the Synthesis Step, so it cannot update the step; it is part of itself.

AR# 51418
Date 05/12/2017
Status Active
Type General Article
People Also Viewed