Ug892 Vivado Design Flows Overview
Ug892 Vivado Design Flows Overview
of this document
Chapter 1
The Vivado Design Suite offers multiple ways to accomplish the tasks involved in Xilinx device
design, implementation, and verification. You can use the traditional register transfer level (RTL)-
to-bitstream FPGA design flow, as described in RTL-to-Bitstream Design Flow. You can also use
system-level integration flows that focus on intellectual property (IP)-centric design and C-based
design, as described in Alternate RTL-to-Bitstream Design Flows.
Design analysis and verification is enabled at each stage of the flow. Design analysis features
include logic simulation, I/O and clock planning, power analysis, constraint definition and timing
analysis, design rule checks (DRC), visualization of design logic, analysis and modification of
implementation results, programming, and debugging.
The following documents and QuickTake videos provide additional information about Vivado
Design Suite flows:
The entire solution is integrated within a graphical user interface (GUI) known as the Vivado
Integrated Design Environment (IDE). The Vivado IDE provides an interface to assemble,
implement, and validate the design and the IP. In addition, all flows can be run using Tcl
commands. Tcl commands can be scripted or entered interactively using the Vivado Design Suite
Tcl shell or using the Tcl Console in the Vivado IDE. You can use Tcl scripts to run the entire
design flow, including design analysis, or to run only parts of the flow.
Related Information
• System and Solution Planning: Identifying the components, performance, I/O, and data
transfer requirements at a system level. Includes application mapping for the solution to PS,
PL, and AI Engine. Topics in this document that apply to this design process include:
• Design Flows
• RTL-to-Bitstream Design Flow
• Alternate RTL-to-Bitstream Design Flows
• Hardware, IP, and Platform Development: Creating the PL IP blocks for the hardware
platform, creating PL kernels, functional simulation, and evaluating the Vivado® timing,
resource use, and power closure. Also involves developing the hardware platform for system
integration. Topics in this document that apply to this design process include:
• System Integration and Validation: Integrating and validating the system functional
performance, including timing, resource use, and power closure. Topics in this document that
apply to this design process include:
• Board System Design: Designing a PCB through schematics and board layout. Also involves
power, thermal, and signal integrity considerations. Topics in this document that apply to this
design process include:
• Tcl
• AXI4, IP-XACT
The Vivado Design Suite solution is native Tcl based with support for SDC and Xilinx design
constraints (XDC) formats. Extensive Verilog, VHDL, and SystemVerilog support for synthesis
enables easier FPGA adoption. Vivado High-Level Synthesis (HLS) enables the use of native C, C+
+, or SystemC languages to define logic. Using standard IP interconnect protocol, such as AXI4
and IP-XACT, enables faster and easier system-level design integration. Support for these
industry standards also enables the electronic design automation (EDA) ecosystem to better
support the Vivado Design Suite. In addition, many new third-party tools are integrated with the
Vivado Design Suite.
Design Flows
The following figure shows the high-level design flow in the Vivado Design Suite. Xilinx® Design
Hubs provide links to documentation organized by design tasks and other topics. On the Xilinx
website, see the Design Hubs page.
Implementation
Logic Simulation
Logic Synthesis
Implementation
The UltraFast Design Methodology Guide for Xilinx FPGAs and SoCs (UG949) focuses on proper
coding and design techniques for defining hierarchical RTL sources and Xilinx design constraints
(XDC), as well as providing information on using specific features of the Vivado Design Suite, and
techniques for performance improvement of the programmed design.
IP Subsystem Design
The Vivado IP integrator environment enables you to stitch together various IP into IP
subsystems using the AMBA® AXI4 interconnect protocol. You can interactively configure and
connect IP using a block design style interface and easily connect entire interfaces by drawing
DRC-correct connections similar to a schematic. Connecting the IP using standard interfaces
saves time over traditional RTL-based connectivity. Connection automation is provided as well as
a set of DRCs to ensure proper IP configuration and connectivity. These IP block designs are then
validated, packaged, and treated as a single design source. Block designs can be used in a design
project or shared among other projects. The IP integrator environment is the main interface for
embedded design and the Xilinx evaluation board interface. For more information, see the Vivado
Design Suite User Guide: Designing IP Subsystems Using IP Integrator (UG994).
Synthesis
Vivado synthesis performs a global, or top-down synthesis of the overall RTL design. However,
by default, the Vivado Design Suite uses an out-of-context (OOC), or bottom-up design flow to
synthesize IP cores from the Xilinx IP Catalog and block designs from the Vivado IP integrator.
You can also choose to synthesize specific modules of a hierarchical RTL design as OOC modules.
This OOC flow lets you synthesize, implement, and analyze design modules of a hierarchical
design, IP cores, or block designs, out of the context of, or independent from the top-level
design. The OOC synthesized netlist is stored and used during top-level implementation to
preserve results and reduce runtime. The OOC flow is an efficient technique for supporting
hierarchical team design, synthesizing and implementing IP and IP subsystems, and managing
modules of large complex designs. For more information on the out-of-context design flow, see
Out-of-Context Design Flow.
The Vivado Design Suite also supports the use of third-party synthesized netlists, including EDIF
or structural Verilog. However, IP cores from the Vivado IP Catalog must be synthesized using
Vivado synthesis, and are not supported for synthesis with a third-party synthesis tool. There are
a few exceptions to this requirement, such as the memory IP for 7 series devices. Refer to the
data sheet for a specific IP for more information.
Note: The ISE Netlist format (NGC) is supported for 7 series devices. It is not supported for UltraScale™
and later devices.
Related Information
The Vivado simulator enables you to run behavioral and structural logic simulation of the design
at different stages of the design flow. The simulator supports Verilog and VHDL mixed-mode
simulation, and results can be displayed in a waveform viewer integrated in the Vivado IDE. You
can also use third-party simulators that can be integrated into and launched from the Vivado IDE.
Refer to Running Logic Simulation for more information.
Related Information
For challenging designs the Vivado IDE also provides advanced floorplanning capabilities to help
drive improved implementation results. These include the ability to constrain specific logic into a
particular area, or manually placing specific design elements and fixing them for subsequent
implementation runs. For more information, see the Vivado Design Suite User Guide: Design
Analysis and Closure Techniques (UG906).
Creating an embedded processor hardware design involves the IP integrator of the Vivado
Design Suite. In a Vivado IP integrator block design, you instantiate, configure, and assemble the
processor core and its interfaces. The IP Integrator enforces rules-based connectivity and
provides design assistance. After it is compiled through implementation, the hardware design is
exported to Xilinx Vitis™ for use in software development and validation. Simulation and debug
features allow you to simulate and validate the design across the two domains.
The Vitis Design Suite is Xilinx's unified software suite that includes compilers for all embedded
applications and accelerated applications on Xilinx platforms. Vitis supports developing in higher
level languages, leverages open source libraries, and supports domain specific development
environments.
VIDEO: For training videos on the Vivado IP integrator and the embedded processor design flow, see the
Vivado Design Suite QuickTake Video: Targeting Zynq Devices Using Vivado IP Integrator.
• Vivado Design Suite User Guide: Embedded Processor Hardware Design (UG898)
• Vivado Design Suite Tutorial: Embedded Processor Hardware Design (UG940)
• UltraFast Embedded Design Methodology Guide (UG1046)
HLS lets you simulate the generated RTL directly from its design environment using C-based test
benches and simulation. C-to-RTL synthesis transforms the C-based design into an RTL module
that can be packaged and implemented as part of a larger RTL design, or instantiated into an IP
integrator block design.
VIDEO: For various training videos on Vivado HLS, see the Vivado High-Level Synthesis video tutorials
available from the Vivado Design QuickTake Video Tutorials page on the Xilinx website.
The HLS tool flow and features are described in the following resources:
The DFx flow requires a strict design process to ensure that the reconfigurable modules are
designed properly to enable glitch-less operation during partial bitstream updates. This includes
reducing the number of interface signals into the reconfigurable module, floorplanning device
resources, and pin placement; as well as adhering to special DFx DRCs. The device programming
method must also be properly planned to ensure the configuration I/O pins are assigned
appropriately.
VIDEO: Information on the DFx flow is available from the Vivado Design Suite QuickTake Video: DFx.
The DFx tool flow and features are described in the following resources:
Hierarchical Design
Hierarchical Design (HD) flows enable you to partition a design into smaller, more manageable
modules to be processed independently. The hierarchical design flow involves proper module
interface design, constraint definition, floorplanning, and some special commands and design
techniques. For more information, see the Vivado Design Suite User Guide: Hierarchical Design
(UG905).
Using a modular approach to the hierarchical design lets you analyze modules independent of the
rest of the design, and reuse modules in the top-down design. A team of users can iterate on
specific sections of a design, achieving timing closure and other design goals, and reuse the
results.
There are several Vivado features that enable a hierarchical design approach, such as the
synthesis of a logic module outside of the context (OOC) of the top-level design. You can select
specific modules, or levels of the design hierarchy, and synthesize them OOC. Module-level
constraints can be applied to optimize and validate module performance. The module design
checkpoint (DCP) will then be applied during implementation to build the top-level netlist. This
method can help reduce top-level synthesis run time, and eliminate re-synthesis of completed
modules.
Chapter 2
Just as the Vivado supports many different design flows, the tools support several different use
models depending on how you want to manage your design and interact with the Vivado tools.
This section will help guide you through some of the decisions that you must make about the use
model you want to use for interacting with the Vivado tools.
• Are you a script or command-based user; or do you prefer working through a graphical user
interface (GUI)? See Working with the Vivado Integrated Design Environment (IDE) and
Working with Tcl.
• Do you want the Vivado Design Suite to manage the design sources, status, and results by
using a project structure; or would you prefer to quickly create and manage a design yourself?
See Understanding Project Mode and Non-Project Mode.
• Do you want to configure IP cores and contain them within a single design project for
portability; or establish a remote repository of configured IP cores outside of the project for
easier management across multiple projects?
• Are you managing your source files inside a revision control system? See Interfacing with
Revision Control Systems.
• Are you using third-party tools for synthesis or simulation? See Using Third-Party Design
Software Tools.
Related Information
When using Project Mode, the Vivado IDE provides an interface called Flow Navigator, that
supports a push-button design flow. You can open designs after RTL elaboration, synthesis, or
implementation and analyze the design, make changes to constraints, logic or device
configuration, and implementation results. You can also use design checkpoints to save the
current state of any design. For more information on the Vivado IDE, see the Vivado Design Suite
User Guide: Using the Vivado IDE (UG893).
VIDEO: For more information, see the Vivado Design QuickTake Video: Getting Started with the Vivado
IDE.
Note: You can also double-click the Vivado IDE shortcut icon on your desktop.
TIP: You can right-click the Vivado IDE shortcut icon, and select Properties to update the Start In field.
This makes it easier to locate the project file, log files, and journal files, which are written to the launch
directory.
vivado
When you enter this command, it automatically runs vivado -mode gui to launch the Vivado
IDE. If you need help, type vivado -help.
TIP: To add the Vivado tools path to your current shell/command prompt, run settings64.bat or
settings64.sh from the <install_path>/Vivado/<version> directory.
When launching the Vivado Design Suite from the command line, change directory to your
project directory so that the Vivado tool will write its log and journal files to your project
directory. This makes it easy to locate and review these files as needed.
RECOMMENDED: Launch the Vivado Design Suite from your project directory to make it easier to locate
the project file, log files, and journal files, which are written to the launch directory.
start_gui
If you prefer working directly with Tcl commands, you can interact with your design using a
Vivado Design Suite Tcl shell, using the Tcl Console from within the Vivado IDE. For more
information about using Tcl and Tcl scripting, see the Vivado Design Suite User Guide: Using Tcl
Scripting (UG894) and Vivado Design Suite Tcl Command Reference Guide (UG835). For a step-by-
step tutorial that shows how to use Tcl in the Vivado tools, see the Vivado Design Suite Tutorial:
Design Flows Overview (UG888).
For more information on using a Tcl-based approach using either the Project Mode or Non-
Project Mode, see Understanding Project Mode and Non-Project Mode.
Related Information
Note: On Windows, you can also select Start → All Programs → Xilinx Design Tools → Vivado <version> →
Vivado <version> Tcl Shell.
Note: When working in batch mode, the Vivado tools exit after running the specified script.
Related Information
• Xilinx/XilinxTclStore
• Xilinx/XilinxBoardStore
• Xilinx/XilinxCEDStore
Board Files
Board files define external connectivity for Vivado. Board files information is available in the IP
integrator when you select a board, as opposed to a part, when creating the project. Board
interfaces can be enabled in the IP integrator by selecting the appropriate interface in the Boards
tab in Vivado. For more information, see Vivado Design Suite User Guide: Designing IP Subsystems
using IP Integrator (UG994) and Integrated Interlaken up to 150G LogiCORE IP Product Guide
(PG169).
Example Design
Example designs are available in Vivado to demonstrate a particular functionality. By hosting
example designs on GitHub, they are updated asynchronously to the Vivado release. Example
designs are accessed through the new project wizard when installed through the Xilinx Vivado
Store.
Project Mode
The Vivado Design Suite takes advantage of a project based architecture to assemble, implement,
and track the state of a design. This is referred to as Project Mode. In Project Mode, Vivado tools
automatically manage your design flow and design data.
TIP: The key advantage of Project Mode is that the Vivado Design Suite manages the entire design process,
including dependency management, report generation, data storage, etc.
When working in Project Mode, the Vivado Design Suite creates a directory structure on disk in
order to manage design source files, either locally or remotely, and manage changes and updates
to the source files.
Note: Certain operating systems (for example, Microsoft Windows) restrict the number of characters (such
as 256) that can be used for the file path and file name. If your operating system has such a limitation,
Xilinx recommends that you create projects closer to the drive root to keep file paths and names as short
as possible.
The project infrastructure is also used to manage the automated synthesis and implementation runs, track
run status, and store synthesis and implementation results and reports. For example:
• If you modify an HDL source after synthesis, the Vivado Design Suite identifies the current results as
out-of-date, and prompts you for re-synthesis.
• If you modify design constraints, the Vivado tools prompt you to either re-synthesize, re-implement, or
both.
• After routing is completed, the Vivado tool automatically generates timing, DRC, methodology, and
power reports.
• The entire design flow can be run with a single click within the Vivado IDE.
For detailed information on working with projects, see Chapter 3: Using Project Mode.
Related Information
Non-Project Mode
Alternatively, you can choose an in-memory compilation flow in which you manage sources and
the design process yourself, known as Non-Project Mode. In-memory compilation enables
project settings to be applied to Non-Project based designs. In Non-Project Mode, you manage
design sources and the design process yourself using Tcl commands or scripts. The key advantage
is that you have full control over each step of the flow.
When working in Non-Project Mode, source files are read from their current locations, such as
from a revision control system, and the design is compiled through the flow in memory. You can
run each design step individually using Tcl commands. You can also use Tcl commands to set
design parameters and implementation options.
You can save design checkpoints and create reports at any stage of the design process. Each
implementation step can be tailored to meet specific design challenges, and you can analyze
results after each design step. In addition, you can open the Vivado IDE at any point for design
analysis and constraints assignment.
In Non-Project Mode, each design step is controlled using Tcl commands. For example:
• If you modify an HDL file after synthesis, you must remember to rerun synthesis to update the
in-memory netlist.
• If you want a timing report after routing, you must explicitly generate the timing report when
routing completes.
• Design parameters and implementation options are set using Tcl commands and parameters.
• You can save design checkpoints and create reports at any stage of the design process using
Tcl.
As the design flow progresses, the representation of the design is retained in memory in the
Vivado Design Suite. Non-Project Mode discards the in-memory design after each session and
only writes data to disk that you instruct it to. For more information on Non-Project Mode, see
Chapter 4: Using Non-Project Mode.
Related Information
Feature Differences
In Project Mode, the Vivado IDE tracks the history of the design and stores pertinent design
information. However, because many features are automated, you have less control in the default
flow. For example, only a standard set of report files is generated with each run. However,
through Tcl commands or scripting, you have access to customize the flow and features of the
tool in Project Mode.
The following automated features are only available when using Project Mode:
Non-Project Mode, is more of a compilation methodology where you have complete control over
every action executed through a Tcl command. This is a fully customizable design flow suited to
specific designers looking for control and batch processing. All of the processing is done in
memory, so no files or reports are generated automatically. Each time you compile the design,
you must define all of the sources, set all tool and design configuration parameters, launch all
implementation commands, and generate report files. This can be accomplished using a Tcl run
script, because a project is not created on disk, source files remain in their original locations and
design output is only created when and where you specify. This method provides you with all of
the power of Tcl commands and full control over the entire design process. Many users prefer
this batch compilation style interaction with the tools and the design data.
The following table summarizes the feature differences between Project Mode and Non-Project
Mode.
Command Differences
Tcl commands vary depending on the mode you use, and the resulting Tcl run scripts for each
mode are different. In Non-Project Mode, all operations and tool settings require individual Tcl
commands, including setting tool options, running implementation commands, generating
reports, and writing design checkpoints. In Project Mode, wrapper commands are used around
the individual synthesis, implementation, and reporting commands.
For example, in Project Mode, you add sources to the project for management using the
add_files Tcl commands. Sources can be copied into the project to maintain a separate version
within the project directory structure or can be referenced remotely. In Non-Project Mode, you
use the read_verilog, read_vhdl, read_xdc, and read_* Tcl commands to read the
various types of sources from their current location.
In Project Mode, the launch_runs command launches the tools with preconfigured run
strategies and generates standard reports. This enables consolidation of implementation
commands, standard reporting, use of run strategies, and run status tracking. However, you can
also run custom Tcl commands before or after each step of the design process. Run results are
automatically stored and managed within the project. In Non-Project Mode, individual commands
must be run, such as opt_design, place_design, and route_design.
Many Tcl commands can be used in either mode, such as the reporting commands. In some cases,
Tcl commands are specific to either Project Mode or Non-Project Mode. Commands that are
specific to one mode must not be mixed when creating scripts. For example, if you are using the
Project Mode you must not use base-level commands such as synth_design, because these
are specific to Non-Project Mode. If you use Non-Project Mode commands in Project Mode, the
database is not updated with status information and reports are not automatically generated.
Note: Project Mode includes GUI operations, which result in a Tcl command being executed in most cases.
The Tcl commands appear in the Vivado IDE Tcl Console and are also captured in the vivado.jou file.
You can use this file to develop scripts for use with either mode.
The following figure shows the difference between Project Mode and Non-Project Mode Tcl
commands.
create_project … read_verilog …
add_files … read_vhdl …
import_files … read_ip …
… read_xdc …
read_edif …
…
X12974-070621
All Xilinx IP and Block Designs use Vivado Synthesis. Use of third party synthesis for Xilinx IP or
IP integrator block designs is not supported, with a few exceptions, such as the memory IP for 7
series devices. Refer to the data sheet for a specific IP for more information.
VIDEO: For more information, see the Vivado Design Suite QuickTake Video: Simulating with Cadence IES
in Vivado and Vivado Design Suite QuickTake Video: Simulating with Synopsys VCS in Vivado.
Note: Some Xilinx IP provides RTL sources in only Verilog or VHDL format. After synthesis, structural
netlists can be created in either language.
The Vivado Design Suite has several methods to pass design information between the FPGA,
PCB, and system design domains. I/O pin configuration can be passed back and forth using a
comma separated value (CSV) spreadsheet, RTL header, or XDC file. The CSV spreadsheet
contains additional package and I/O information that can be used for a variety of PCB design
tasks, such as matched length connections and power connections. An I/O Buffer Information
Specification (IBIS) model can also be exported from the Vivado IDE for use in signal integrity
analysis on the PCB.
• Vivado Design Suite User Guide: I/O and Clock Planning (UG899)
• Vivado Design Suite QuickTake Video: I/O Planning Overview
Chapter 3
In the Vivado IDE, you can use the Flow Navigator (shown in the following figure) to launch
predefined design flow steps, such as synthesis and implementation. When you click Generate
Bitstream or Generate Device Image for Versal® ACAP, the Vivado IDE ensures that the design is
synthesized and implemented with the most current design sources and generates a bitstream
file. The environment provides an intuitive push button design flow and also offers advanced
design management and analysis features. Runs are launched with wrapper Tcl scripts that
consolidate the various implementation commands and automatically generates standard reports.
You can use various run strategies to address different design challenges, such as routing density
and timing closure. You can also simultaneously launch multiple implementation runs to see
which will achieve the best results.
Note: Run strategies only apply to Project Mode. In Non-Project Mode, all directives and command options
must be set manually.
You can run Project Mode using the Vivado IDE or using Tcl commands or scripts. In addition,
you can alternate between using the Vivado IDE and Tcl within a project. When you open or
create projects in the Vivado IDE, you are presented with the current state of the design, run
results, and previously generated reports and messages. You can create or modify sources, apply
constraints and debug information, configure tool settings, and perform design tasks.
RECOMMENDED: Project Mode is the easiest way to get acquainted with features of the Vivado tools
and Xilinx® recommendations.
Vivado has the unique capability to open the design at various stages of the design flow. You can
open designs for analysis and constraints definition after RTL elaboration, synthesis, and
implementation. When you open a design, the Vivado tools compile the netlist and constraints
against the target device and show the design in the Vivado IDE. After you open the design, you
can use a variety of analysis and reporting features to analyze the design using different criteria
and viewpoints. You can also apply and save constraint and design changes. For more
information, see Vivado Design Suite User Guide: Design Analysis and Closure Techniques (UG906).
• Automatically manages project status, HDL sources, constraint files, IP cores and block
designs.
• Generates and stores synthesis and implementation results
• Includes advanced design analysis capabilities, including cross probing from implementation
results to RTL source files
• Automates setting command options using run strategies and generates standard reports
• Supports the creation of multiple runs to configure and explore available constraint or
command options
Creating Projects
The Vivado Design Suite supports different types of projects for different design purposes. For
example, you can create a project with RTL sources or synthesized netlists from third-party
synthesis providers. You can also create empty I/O planning projects to enable device exploration
and early pin planning. The Vivado IDE only displays commands relevant to the selected project
type.
In the Vivado IDE, the Create Project wizard walks you through the process of creating a project.
The wizard enables you to define the project, including the project name, the location in which to
store the project, the project type (for example, RTL, netlist, and so forth), and the target part.
You can add different types of sources, such as RTL, IP, Block designs, XDC or SDC constraints,
simulation test benches, DSP modules from System Generator as IP, or Vivado High-Level
Synthesis (HLS), and design documentation. When you select sources, you can determine
whether to reference the source in its original location or to copy the source into the project
directory. The Vivado Design Suite tracks the time and date stamp of each file and report status.
If files are modified, you are alerted to out-of-date source or design status. For more information,
see this link in the Vivado Design Suite User Guide: System-Level Design Entry (UG895).
CAUTION! The Windows operating system has a 260 character limit for path lengths which can affect the
Vivado tools. To avoid this issue, use the shortest possible names and directory locations when creating
projects, defining IP or managed IP projects, or creating block designs.
• RTL Project: You can add RTL source files and constraints, configure IP with the Vivado IP
catalog, create IP subsystems with the Vivado IP integrator, synthesize and implement the
design, and perform design planning and analysis.
• Post-Synthesis Project: You can import third-party netlists, implement the design, and
perform design planning and analysis.
• I/O Planning Project: You can create an empty project for use with early I/O planning and
device exploration prior to having RTL sources.
• Imported Project: You can import existing project sources from the ISE Design Suite, Xilinx
Synthesis Technology (XST), or Synopsys Synplify.
• Example Project: You can explore several example projects, including example Zynq®-7000
SoC or MicroBlaze™ embedded designs with available Xilinx evaluation boards.
• DFx: You can dynamically reconfigure an operating FPGA design by loading a partial bitstream
file to modify reconfigurable regions of the device.
When adding sources, you can reference sources from remote locations or copy sources locally
into the project directory structure. Sources can be read from any network accessible location.
With either approach, the Vivado IDE tracks the time and date stamps on the files to check for
updates. If source files are modified, the Vivado IDE changes the project status to indicate
whether synthesis or implementation runs are out of date. Sources with read-only permissions
are processed accordingly.
When adding sources in the Vivado IDE, RTL files can optionally be scanned to look for include
files or other global source files that might be in the source directory. All source file types within
a specified directory or directory tree can be added with the File → Add Sources command. The
Vivado IDE scans directories and subdirectories and imports any file with an extension matching
the set of known sources types.
After sources are added to a project, the compilation order and logic hierarchy is derived and
displayed in the Sources window. This can help you to identify malformed RTL or missing
modules. The Messages window shows messages related to the RTL compilation, and you can
cross probe from the messages to the RTL sources. In addition, source files can be enabled and
disabled to allow for control over configuration.
Archiving Projects
In the Vivado IDE, the File → Project → Archive command creates a ZIP file for the entire project,
including the source files, IP, design configuration, and optionally the run result data. If the
project uses remote sources, the files are copied into the project locally to ensure that the
archived project includes all files.
VIDEO: For information on best practices when using revision control systems with the Vivado tools, see
the Vivado Design Suite QuickTake Video: Using Vivado Design Suite with Revision Control.
The Flow Navigator (shown in the following figure) differs when working with projects created
with third-party netlists. For example, system-level design entry, IP, and synthesis options are not
available.
As the design tasks complete, you can open the resulting designs to analyze results and apply
constraints. In the Flow Navigator, click Open Elaborated Design, Open Synthesized Design, or
Open Implemented Design. For more information, see Opening Designs to Perform Design
Analysis and Constraints Definition.
When you open a design, the Flow Navigator shows a set of commonly used commands for the
applicable phase of the design flow. Selecting any of these commands in the Flow Navigator
opens the design, if it is not already opened, and performs the operation. For example, the
following figure shows the commands related to synthesis.
Related Information
TIP: If you explicitly set a module as the top module, the module is retained and passed to synthesis.
However, if you do not explicitly set a top module, the Vivado tools select the best possible top module
from the available source files in the project. If a file includes syntax errors and does not elaborate, this file
is not selected as the top module by the Vivado tools.
Constraints and simulation sources are organized into sets. You can use constraint sets to
experiment with and manage constraints. You can launch different simulation sessions using
different simulation source sets. You can add, remove, disable, or update any of the sources. For
more information on constraints, see the Vivado Design Suite User Guide: Using Constraints
(UG903). For more information on simulation, see the Vivado Design Suite User Guide: Logic
Simulation (UG900).
RTL Development
The Vivado IDE includes helpful features to assist with RTL development:
For more information on RTL development and analysis features, see the Vivado Design Suite User
Guide: System-Level Design Entry (UG895). For more information on RTL-based I/O planning, see
the Vivado Design Suite User Guide: I/O and Clock Planning (UG899).
TIP: The Vivado Design Suite only supports Synopsys design constraints (SDC) and Xilinx design
constraints (XDC). It does not support Xilinx user constraints files (UCF) used with the ISE Design Suite nor
does it directly support Synplicity design constraints. For information on migrating from UCF format to
XDC format, see this link in the ISE to ISE to Vivado Design Suite Migration Guide (UG911).
Working with IP
The Vivado Design Suite provides an IP-centric design flow that lets you configure, implement,
verify, and integrate IP modules to your design from various design sources. The tool also
provides an extensible IP catalog that includes Xilinx LogiCORE™ IP that can be configured and
verified as a standalone module or within the context of a system-level design. For more
information, see the Vivado Design Suite User Guide: Designing with IP (UG896).
You can also package custom IP using the IP-XACT protocol and make it available through the
Vivado IP catalog. Xilinx IP uses the AMBA® AXI4 interconnect standard to enable faster system-
level integration. Existing IP can be added to a design as either RTL source or a netlist.
• Use the managed IP flow to customize IP and generate output products, including a
synthesized design checkpoint (DCP) to preserve the customization for use in the current and
future releases. For more information, see this link in the Vivado Design Suite User Guide:
Design Flows Overview (UG892).
• Use IP in either Project or Non-Project modes by importing or reading the created Xilinx core
instance (XCI) file. This is the recommended method for large projects with many team
members.
• Access the IP catalog from a project to customize and add IP to a design. Store the IP files
either local to the project, or save them externally from the project. This is the recommended
method for small team projects.
Configuring IP
The Vivado IP catalog (shown in the following figure) lets you browse the available IP for the
target device in the current project. The catalog shows version and licensing information about
each IP and provides the applicable data sheet.
The Vivado IP catalog displays either Included or Purchase under the License column in the IP
catalog. The following definitions apply to IP offered by Xilinx:
• Included: The Xilinx End User License Agreement includes Xilinx LogiCORE™ IP cores that are
licensed within the Xilinx Vivado Design Suite software tools at no additional charge.
• Purchase: The Core License Agreement applies to fee-based Xilinx LogiCORE IP, and the Core
Evaluation License Agreement applies to the evaluation of fee-based Xilinx IP.
This license status information is available for IP cores used in a project using Report IP Status by
selecting Reports → Report IP Status. For additional information on how to obtain IP licenses, see
the Xilinx IP Licensing page.
Xilinx and its partners provide additional IP cores that are not shipped as part of the default
Vivado IP Catalog. For more information on the available IP, see the Intellectual Property page on
the Xilinx website.
You can double-click any IP to launch the Configuration wizard to instantiate an IP into your
design. After configuring the IP, a Xilinx Core Instance (.xci) file is created. This file contains all
the customization options for the IP. From this file the tool can generate all output products for
the IP. These output products consist of HDL for synthesis and simulation, constraints, possibly a
test bench, C modules, example designs, etc. The tool creates these files based upon the
customization options used.
• Instantiation template
• RTL source files and XDC constraints
• Synthesized design checkpoint (default)
• Third-party simulation sources
• Third-party synthesis sources
• Example design (for applicable IP)
• Test bench (for applicable IP)
• C Model (for applicable IP)
TIP: In Project Mode, missing output products are automatically generated during synthesis, including a
synthesized design checkpoint (DCP) file for the out-of-context flow. In Non-Project Mode, the output
products must be manually generated prior to global synthesis.
For each IP customized in your design, you should generate all available output products,
including a synthesized design checkpoint. Doing so provides you with a complete representation
of the IP that can be archived or placed in revision control. If future Vivado Design Suite versions
do not include that IP, or if the IP has changed in undesirable ways (such as interface changes),
you have all the output products required to simulate, and to use for synthesis and
implementation with future Vivado Design Suite releases.
IP cores that are added to a design from the Vivado IP catalog default to use the out-of-context
flow. For more information, see this link in the Vivado Design Suite User Guide: Designing with IP
(UG896). Block designs created in the Vivado IP integrator also default to the OOC flow when
generating output products. For more information, see this link in the Vivado Design Suite User
Guide: Designing IP Subsystems Using IP Integrator (UG994).
The Vivado Design Suite also supports global synthesis and implementation of a design, in which
all modules, block designs, and IP cores, are synthesized as part of the integrated top-level
design. You can mark specific modules or IP for out-of-context synthesis, and other modules for
inclusion in the global synthesis of the top-level design. In the case of a block design from Vivado
IP integrator, the entire block design can be specified for OOC synthesis, or you can specify OOC
synthesis for each individual IP, or per IP used in the block design. When run in global mode,
Vivado synthesis has full visibility of design constraints. When run in OOC mode, estimated
constraints are used during synthesis.
The Vivado synthesis tool also provides a cache to preserve OOC synthesis results for reuse in
other designs that use the same IP customization. This can significantly speed synthesis of large
complex designs.
A design checkpoint (DCP) is created for OOC IP or modules, which contains the synthesized
netlist and design constraints. OOC modules are seen as black boxes in the top-level design until
the synthesized design is open and all the elements are assembled. Before the top-level
synthesized design is opened, resource utilization and analysis of the top-level design may not
include netlist or resource information from the OOC modules, or black boxes, and so will not
provide a complete view of the design.
IMPORTANT! To obtain more accurate reports, you should open and analyze the top-level synthesized
design, which will include all the integrated OOC modules.
The OOC flow is supported in Vivado synthesis, implementation, and analysis. For more
information refer to this link in the Vivado Design Suite User Guide: Synthesis (UG901). OOC
synthesis can also be used to define a hierarchical design methodology and a team design
approach as defined in the Vivado Design Suite User Guide: Hierarchical Design (UG905).
IP Constraints
Many IP cores contain XDC constraint files that are used during Vivado synthesis and
implementation. These constraints are applied automatically in both Project Mode and Non-
Project Mode if the IP is customized from the Vivado IP catalog.
Many IP cores reference their input clocks in these XDC files. These clocks can come either from
the user through the top level design, or from other IP cores in the design. By default, the Vivado
tools process any IP clock creation and any user-defined top-level clock creation early. This
process makes these clocks available to the IP cores that require them. Refer to this link in Vivado
Design Suite User Guide: Designing with IP (UG896) for more information.
Validating the IP
You can verify Vivado IP by synthesizing the IP and using behavioral or structural logic
simulation, and by implementing the IP module to validate timing, power, and resource
utilization. Typically, a small example design is used to validate the standalone IP. You can also
validate the IP within the context of the top-level design project. Because the IP creates
synthesized design checkpoints, this bottom-up verification strategy works well either
standalone or within a project.
Many of the Xilinx IP delivered in the Vivado IP catalog have an example design. You can
determine if an IP comes with an example design by selecting the IP from the IP Sources area of
the Manage IP or RTL project and see if the Open IP Example Design is selectable, as shown in
the following figure. This can also be done using Tcl by examining the SUPPORTED_TARGETS
property of the IP.
Use the Open IP Example Design right-click menu command for a selected IP to create an
example design to validate the standalone IP within the context of the example design project.
For more details on working with example designs and IP output products, refer to the Vivado
Design Suite User Guide: Designing with IP (UG896).
Some IP deliver test benches with the example design, which you can use to validate the
customized IP functionality. You can run behavioral, post synthesis, or post-implementation
simulations. You can run either functional or timing simulations. In order to perform timing/
functional simulations you will need to synthesize/implement the example design. For specific
information on simulating an IP, refer to the product guide for the IP. For more detail on
simulation, refer to the Vivado Design Suite User Guide: Logic Simulation (UG900).
Using Memory IP
Additional I/O pin planning steps are required when using Xilinx memory IP. After the IP is
customized, you then assign the top-level I/O ports to physical package pins in either the
elaborated or synthesized design in the Vivado IDE.
All of the ports associated with each memory IP are grouped together into an I/O Port Interface
for easier identification and assignment. A Memory Bank/Byte Planner is provided to assist you
with assigning Memory I/O pin groups to Byte lanes on the physical device pins.
For more information, see this link in the Vivado Design Suite User Guide: I/O and Clock Planning
(UG899).
• For details on simulation, see the UltraScale Architecture-Based FPGAs Memory IP LogiCORE IP
Product Guide (PG150).
• For an example of simulating memory IP with a MicroBlaze™ processor design, see the
Reference System: Kintex-7 MicroBlaze System Simulation Using IP Integrator (XAPP1180).
The location of the packaged IP can be added to the IP Repository section of the Settings dialog
box which can be accessed through Tools → Settings menu in the Vivado IDE. After a repository
of one or more IP has been added, the IP core(s) from the repository will be shown in the IP
Catalog.
TIP: Before packaging your IP HDL, ensure its correctness by simulating and synthesizing to validate the
design.
There are multiple ways to configure the IP and make it available for use within the Vivado IP
catalog and IP integrator. For example, the Create and Package IP wizard takes you step-by-step
through IP packaging and lets you package IP from a project, a block design, or a specified
directory. You can also create and package a new template AXI4 peripheral for use in embedded
processor designs.
IMPORTANT! Ensure that the desired list of supported device families is defined properly while creating
the custom IP definition. This is especially important if you want your IP to be used with multiple device
families.
For more information, see the Vivado Design Suite User Guide: Creating and Packaging Custom IP
(UG1118) and Vivado Design Suite Tutorial: Creating, Packaging Custom IP (UG1119).
Upgrading IP
With each release of the Vivado Design Suite, new IP versions are introduced. It is recommended
that you upgrade the IP used in your designs at each new release. However, you can also use the
older version as a static IP that is already configured and synthesized to avoid introducing any
unnecessary changes into your design. To use the static version of an existing IP, all of the output
products must have been previously generated for the IP, and no changes to those generated
output files will be possible. For more information refer to this link in the Vivado Design Suite User
Guide: Designing with IP (UG896).
To report on the current status of the IP in a design, you can use the report_ip_status Tcl
command. If changes are needed, you can selectively upgrade the IP in the design to the latest
version. A change log for each IP details the changes made and lists any design updates that are
required. For example, top-level port changes are occasionally made in newer IP versions, so
some design modification might be required. If the IP version has changed in the latest release,
the version used in the design becomes locked and must be used as a static IP with the available
output products, or must be updated to support the current release. Locked IP are reported as
locked, and appear with a lock symbol in the Sources window of the Vivado IDE.
Using Vivado IP integrator you can drag and drop IP onto the design canvas, connect AXI
interfaces with one wire, and place ports and interface ports to connect the IP subsystem to the
top-level design. These IP block designs can also be packaged as sources (.bd) and reused in
other designs. For more information, see the Vivado Design Suite User Guide: Designing IP
Subsystems Using IP Integrator (UG994) or Vivado Design Suite User Guide: Embedded Processor
Hardware Design (UG898).
Related Information
Building IP Subsystems
The interactive block design capabilities of the Vivado IP integrator make the job of configuring
and assembling groups of IP easy.
TIP: If you prefer to work with a Tcl script, it is suggested to create the block design interactively using the
Vivado IDE and then capture and edit the script as needed to recreate the block design. The IP integrator
can create a Tcl script to re-create the current block design in memory.
Designer Assistance
To expedite the creation of a subsystem or a design, the IP integrator offers Block Automation
and Connection Automation. The Block Automation feature can be used to configure a basic
processor-based design and some complex IP subsystems, while the Connection Automation
feature can be used to automatically make repetitive connections to different pins or ports of the
design. IP integrator also supports all the Xilinx evaluation boards in the Platform Board Flow, as
described below in Using the Platform Board Flow. This lets the Connection Automation feature
connect the I/O ports of the design to components on the target board. Designer assistance also
helps with defining and connecting clocks and resets. Using Designer Assistance not only
expedites the design process but also helps prevent unintended design errors.
Related Information
The IP integrator shows all the component interfaces on the target board in a separate tab called
the Board tab. You can use this tab to connect to the desired components through the Designer
Assistance feature. All the I/O constraints are automatically generated as a part of using this
feature.
You can also generate board files for custom boards and add the repository that contains the
board file to a project. For more information on generating a custom board file, see this link in the
Vivado Design Suite User Guide: System-Level Design Entry (UG895).
Validating IP Subsystems
IP integrator runs basic design rule checks in real time as the design is being assembled.
However, there is still a potential for design errors, such as the frequency on a clock pin may be
set incorrectly. The tool can catch these types of errors by running a more thorough design
validation. You can run design validation by selecting Tools → Validate Design or through the Tcl
command validate_bd_design.
The Validate Design command applies design rule checks on the block design and reports
warnings and/or errors found in the design. You can cross-probe the warnings and/or errors from
the Messages window to locate objects in the block diagram. Xilinx recommends validating a
block design to catch errors that would otherwise be found later in the design flow.
Running design validation also runs Parameter Propagation on the block design. Parameter
Propagation enables IP integrator to automatically update the parameters associated with a
given IP based on its context and its connections in the design. You can package custom IP with
specific parameter propagation rules, and IP integrator applies these rules as the block diagram is
generated and validated. See this link in Vivado Design Suite User Guide: Designing IP Subsystems
Using IP Integrator (UG994) for more information.
There are two modes of OOC supported for block designs in the Vivado Design Suite: Out of
context per Block design and Out of context per IP. Refer to Out-of-Context Design Flow for
more information.
Related Information
You can perform a higher-level instantiation of the block design by selecting the block design in
the Vivado IDE Sources window and selecting Create HDL Wrapper. This generates a top-level
HDL file for the IP Integrator sub-system. See this link in the Vivado Design Suite User Guide:
Designing IP Subsystems Using IP Integrator (UG994) for more information.
Logic Simulation
The Vivado Design Suite has several logic simulation options for verifying designs or IP. The
Vivado simulator, integrated into the Vivado IDE, allows you to simulate the design, add and view
signals in the waveform viewer, and examine and debug the design as needed.
RTL Simulation
Design (Recommended before
Entry proceeding to Synthesis
and implementation)
Simprim
(verilog Unisim
only)
Unifast
SecureIP
X14050-
010320
You can use the Vivado simulator to perform behavioral and structural simulation of designs as
well as full timing simulation of implemented designs. The previous figure shows all the places
where Vivado simulation could be used for functional and timing simulation. You can also use
third-party simulators by writing Verilog or VHDL netlists, and SDF files from the elaborated,
synthesized, or implemented design. The Vivado IDE lets you configure and launch simulators
from Mentor Graphics, Synopsys, Cadence, and Aldec. For more information, see this link in the
Vivado Design Suite User Guide: Logic Simulation (UG900).
1. Run behavioral simulation before proceeding with synthesis and implementation. Issues
identified early will save time and money.
2. Infer logic wherever possible. Instantiating primitives adds significant simulation runtime cost.
3. Always set the Target Language to Mixed unless you do not have a mixed mode license for
your simulator.
4. Turn off the waveform viewer when not in use to improve simulation performance.
5. In the Vivado simulator, turn off debug during xelab for a performance boost.
6. In the Vivado simulator, turn on multi-threading to speed up compile time.
7. When using third-party simulators, always target supported versions. For more information,
see the Vivado Design Suite User Guide: Release Notes, Installation, and Licensing (UG973).
8. Make sure incremental compile is turned on when using third-party simulators.
9. Use the Xilinx Tcl command export_simulation to generate batch scripts for selected
simulators.
10. Generate simulation scripts for individual IP, BDs, and hierarchical modules as well as for the
top-level design.
11. If you are targeting a 7 series device, use UNIFAST libraries to improve simulation
performance.
Note: The UNIFAST libraries are not supported for UltraScale device primitives.
When using third-party simulators, you must compile Xilinx simulation libraries prior to running
simulation, as explained in the Vivado Design Suite User Guide: Logic Simulation (UG900). This is
especially true if your design instantiates VHDL primitives or Xilinx IP, the majority of which are
in VHDL form. The simulation tool will return “library binding” failures if you do not precompile
simulation libraries.
You can run the compile_simlib Tcl command to compile the Xilinx simulation libraries for
the target simulator. You can also issue this command from the Vivado IDE by selecting Tools →
Compile Simulation Libraries.
IMPORTANT! Simulation libraries are pre-compiled and provided for use with the Vivado simulator.
However, you must manually compile the libraries for use with a third-party simulator. Refer to this link in
the Vivado Design Suite User Guide: Logic Simulation (UG900) for more information.
TIP: Because most of the simulation time is spent in delta cycles, there is no significant simulator
performance gain by using coarser resolution with the Xilinx simulation models.
There is no need to use a finer resolution, such as femtoseconds (fs) as some simulators will
round the numbers while others will truncate the numbers.
With larger hierarchical designs, you can simulate individual IP, block designs, or hierarchical
modules before testing your complete design. This simulation process makes it easier to debug
your code in smaller portions before examining the larger design. When each module simulates
as expected, create a top-level design test bench to verify that your entire design functions as
planned. Use the same test bench again for the final timing simulation to confirm that your
design functions as expected under worst-case delay conditions.
You should use synthesizable HDL constructs for the initial design creation. Do not instantiate
specific components unless necessary. This allows for:
TIP: You might need to instantiate components if the components cannot be inferred.
For netlist simulation, you can use one or more of the libraries shown in the following table.
The UNIFAST library is an optional library that you can use during functional simulation to speed
up simulation runtime. UNIFAST libraries are supported for 7 series devices only. UltraScale and
later device architectures do not support UNIFAST libraries, because all the optimizations are
incorporated in the UNISIM libraries by default. For more information on Xilinx simulation
libraries, see this link in the Vivado Design Suite User Guide: Logic Simulation (UG900).
Primitives/elements of the UNISIM library do not have any timing information except the clocked
elements. To prevent race conditions during functional simulation, clocked elements have a
clock-to-out delay of 100 ps. Waveform views might show spikes and glitches for combinatorial
signals, due to lack of any delay in the UNISIM elements.
Timing Simulation
Xilinx supports timing simulation in Verilog only. You can export a netlist for timing simulation
from an open synthesized or implemented design using the File → Export → Export Netlist
command in the Vivado IDE, or by using the write_verilog Tcl command.
The Verilog system task $sdf_annotate within the simulation netlist specifies the name of the
standard delay format (SDF) file to be read for timing delays. This directive is added to the
exported netlist when the -sdf_anno option is enabled on the Netlist tab of the Simulation
Settings dialog box in the Vivado IDE. The SDF file can be written with the write_sdf
command. The Vivado simulator automatically reads the SDF file during the compilation step.
TIP: The Vivado simulator supports mixed-language simulation, which means that if you are a VHDL user,
you can generate a Verilog simulation netlist and instantiate it from the VHDL test bench.
Many users do not run timing simulation due to high run time. However, you should consider
using full timing simulation because it is the closest method of modeling hardware behavior. If
your design does not work on hardware, it is much easier to debug the failure in simulation, as
long as you have a timing simulation that can reproduce the failure.
If you decide to skip timing simulation, you should make sure of the following:
• Ensure that your STA constraints are absolutely correct. Pay special attention to exceptions.
• Ensure that your netlist is exactly equivalent to what you intended through your RTL. Pay
special attention to any inference-related information provided by the synthesis tool.
Simulation Flow
The Vivado Design Suite supports both integrated simulation, which allows you to run the
simulator from within the Vivado IDE, and batch simulation, which allows you to generate a
script from the Vivado tools to run simulation on an external verification environment.
Integrated Simulation
The Vivado IDE provides full integration with the Vivado simulator, and all supported third-party
simulators. In this flow, the simulator is called from within the Vivado IDE, and you can compile
and simulate the design easily with a push of a button, or with the launch_simulation Tcl
command.
For information on the steps involved in setting up the integrated simulation flow, see this link in
the Vivado Design Suite User Guide: Logic Simulation (UG900).
Batch Simulation
RECOMMENDED: If your verification environment has a self-checking test bench, run simulation in batch
mode. There is a significant runtime cost when you view simulator waveforms using the integrated
simulation.
For batch simulation, the Vivado Design Suite provides the export_simulation Tcl command
to generate simulation scripts for supported simulators, including the Vivado simulator. You can
use the scripts generated by export_simulation directly or use the scripts as a reference for
building your own custom simulation scripts.
The export_simulation command creates separate scripts for each stage of the simulation
process (compile, elaborate, and simulate) so that you can easily incorporate the generated
scripts in your own verification flow. For more information about generating scripts for batch
simulation, see this link in the Vivado Design Suite User Guide: Logic Simulation (UG900).
You can launch multiple synthesis runs concurrently or serially. On a Linux system, you can
launch runs locally or on remote servers. With multiple synthesis runs, Vivado synthesis creates
multiple netlists that are stored with the Vivado Design Suite project. You can open different
versions of the synthesized netlist in the Vivado IDE to perform device and design analysis. You
can also create constraints for I/O pin planning, timing, floorplanning, and implementation. The
most comprehensive list of DRCs is available after a synthesized netlist is produced, when clock
and clock logic are available for analysis and placement.
For more information, see the Vivado Design Suite User Guide: Synthesis (UG901).
Note: Launching multiple jobs simultaneously on the same machine can exhaust memory, resulting in
random Vivado crashes. Ensure to reserve enough memory for all jobs running on a single machine.
Implementation
Vivado implementation enables you to configure, launch, and monitor implementation runs. You
can experiment with different implementation options and create your own reusable strategies
for implementation runs. For example, you can create strategies for quick run times, improved
system performance, or area optimization. As the runs complete, implementation run results
display and report files are available.
You can launch multiple implementation runs either simultaneously or serially. On a Linux system,
you can use remote servers. You can create constraint sets to experiment with various timing
constraints, physical constraints, or alternate devices. For more information, see the Vivado
Design Suite User Guide: Implementation (UG904) and Vivado Design Suite User Guide: Using
Constraints (UG903).
TIP: You can add Tcl scripts to be sourced before and after synthesis, any stage of implementation, or
bitstream generation using the tcl.pre and tcl.post files. For more information, see the Vivado
Design Suite User Guide: Using Tcl Scripting (UG894).
Note: Launching multiple jobs simultaneously on the same machine can exhaust memory, resulting in
random Vivado crashes. Ensure to reserve enough memory for all jobs running on a single machine.
For information on modifying settings, see this link to the Vivado Design Suite User Guide:
Synthesis (UG901) and see this link in the Vivado Design Suite User Guide: Implementation (UG904).
TIP: You can create an out-of-context module run to synthesize the Vivado Design Suite IP in the project. If
you generate a design checkpoint for the IP, the default behavior is to create an out-of-context run for
each IP in the design.
• In the Flow Navigator, select Run Synthesis, Run Implementation, or Generate Bitstream or
Generate Device Image for Versal ACAP.
• In the Design Runs window, select a run, right-click, and select Launch Runs. Alternatively,
you can click the Launch Selected Runs button.
• Select Flow → Run Synthesis, Flow → Run Implementation, or Flow → Generate Bitstream or
Generate Device Image for Versal ACAP.
You can create multiple synthesis or implementation runs to experiment with constraints or tool
settings. To create additional runs:
If more than one synthesis run exists, you can also select the netlist when creating
implementation runs. You can then create one or more runs with varying strategies, constraint
sets, or devices. There are several launch options available when multiple runs exist. You can
launch selected runs sequentially or in parallel on multiple local processors.
TIP: You can configure and use remote hosts on Linux systems only.
The Vivado IDE opens the active design by default when you select Open Synthesized Design or
Open Implemented Design in the Flow Navigator. You can make a run the active run using the
Make Active popup menu command. The Vivado IDE updates results to reflect the information
about the newly designated active run. Double-click any synthesized or implemented run to open
the design in the Vivado IDE.
Resetting Runs
In the Flow Navigator, you can right-click Synthesis or Implementation, and use the following
popup menu commands to reset runs. For more information, see this link in the Vivado Design
Suite User Guide: Implementation (UG904).
• Reset Runs resets the run to its original state and optionally deletes generated files from the
run directory.
• Reset to Previous Step resets the run to the listed step.
TIP: To stop an in-process run, click the Cancel button in the upper right corner of the Vivado IDE.
You can specify the Set Incremental Compile option in the Implementation Settings dialog box in
the Vivado IDE, or by using the Set Incremental Compile command from the right-click menu of
the Design Runs window. You can also use the read_checkpoint Tcl command with the -
incremental option, and point to a routed design checkpoint to use as a reference. For more
information, see this link in the Vivado Design Suite User Guide: Implementation (UG904).
The advantage of the ECO flow is fast turn-around time by taking advantage of the incremental
place and route features of the Vivado tool. The Vivado IDE provides a predefined layout to
support the ECO flow. Refer to this link in the Vivado Design Suite User Guide: Implementation
(UG904) for more information.
Viewing Messages
In the Messages window (shown in the following figure), messages are categorized according to
design step and severity level: Errors, Critical Warnings, Warnings, Info, and Status. To filter
messages, select the appropriate check boxes in the window header. You can expand the
message categories to view specific messages. You can click the Collapse All icon to show only
the main design steps. This enables better navigation to specific messages. Many messages
include links that take you to logic lines in the RTL files. For more information, including
advanced filtering techniques, see this link in the Vivado Design Suite User Guide: Using the Vivado
IDE (UG893).
Viewing Reports
In the Reports window (shown in the following figure), several standard reports are generated
using the launch_runs Tcl commands. You can double-click any report to display it in the
Vivado IDE Text Editor. You can also create custom reports using Tcl commands in the Tcl
Console or using report strategies. For more information, see this link and this link in the Vivado
Design Suite User Guide: Using the Vivado IDE (UG893) and see this link and this link in Vivado
Design Suite User Guide: Design Analysis and Closure Techniques (UG906).
Note: The Edit → Device Properties is only available when a design is open.
When you open the design, the Vivado IDE compiles the netlist and applies physical and timing
constraints against a target part. You can open, save, and close designs. When you open a new
design, you are prompted to close any previously opened designs in order to preserve memory.
However, you are not required to close the designs, because multiple designs can be opened
simultaneously. When you open a synthesized design, the Vivado IDE displays the netlist and
constraints. When you open an implemented design, the Vivado IDE displays the netlist,
constraints, and implementation results. The design data is presented in different forms in
different windows, and you can cross probe and coordinate data between windows.
After opening a design, many analysis and reporting features are available in the Vivado IDE. For
example, you can analyze device resources in the graphical windows of the internal device and
the external physical package. You can also apply and analyze timing and physical constraints in
the design using the Netlist, Device, Schematic, or Hierarchy windows. For more information, see
the Vivado Design Suite User Guide: Design Analysis and Closure Techniques (UG906) and Vivado
Design Suite User Guide: Using Constraints (UG903).
Note: If you make constraint changes while the design is open, you are prompted to save the changes to
the original XDC source files or to create a new constraint set. For more information, see this link in the
Vivado Design Suite User Guide: System-Level Design Entry (UG895).
The Vivado Design Suite includes linting DRCs and checking tools that enable you to analyze
your design for logic correctness. You can make sure that there are no logic compilation issues,
no missing modules, and no interface mismatches. In the Messages window, you can click links in
the messages to display the problem lines in the RTL files in the Vivado IDE Text Editor. In the
Schematic window, you can explore the logic interconnects and hierarchy in a variety of ways.
The Schematic window displays RTL interconnects using RTL-based logic constructs. You can
select logic in the Schematic window and see specific lines in the RTL files in the Vivado IDE Text
Editor. For more information, see this link in the Vivado Design Suite User Guide: System-Level
Design Entry (UG895).
Constraints that are defined on specific logic instances within the logic hierarchy, such as
registers, might not be resolvable during RTL elaboration. The logic names and hierarchy
generated during elaboration might not match those generated during synthesis. For this reason,
you might see constraint mapping warnings or errors when elaborating the RTL design, if you
have these types of constraints defined. However, when you run synthesis on the design, these
issues are resolved.
Using the I/O planning capabilities of the Vivado IDE, you can interactively configure and assign
I/O Ports in the elaborated RTL design and run DRCs. When possible, it is recommended that
you perform I/O planning after synthesis. This ensures proper clock and logic constraint
resolution, and the DRCs performed after synthesis are more extensive. For more information,
see Vivado Design Suite User Guide: I/O and Clock Planning (UG899).
TIP: When you select the Report DRC command, the Vivado IDE invokes a set of RTL and I/O DRCs to
identify logic issues such as asynchronous clocks, latches, and so forth. For more information, see this link
in the Vivado Design Suite User Guide: System-Level Design Entry (UG895).
• In the RTL Analysis section of the Flow Navigator, select Open Elaborated Design.
• In the Flow Navigator, right-click RTL Analysis, and select New Elaborated Design from the
popup menu.
• Select Flow → Open Elaborated Design.
The following figure shows the default view layout for an open elaborated RTL design. Notice the
logic instance that was cross-selected from the schematic to the specific instance in the RTL
source file and within the elaborated RTL netlist.
In a synthesized design, you can perform many design tasks, including early timing, power, and
utilization estimates that can help you determine if your design is converging on desired targets.
You can explore the design in a variety of ways using the windows in the Vivado IDE. Objects are
always cross-selected in all other windows. You can cross probe to problem lines in the RTL files
from various windows, including the Messages, Schematic, Device, Package, and Find windows.
The Schematic window allows you to interactively explore the logic interconnect and hierarchy.
You can also apply timing constraints and perform further timing analysis. In addition, you can
interactively define physical constraints for I/O ports, floorplanning, or design configuration. For
more information, see the Vivado Design Suite User Guide: Design Analysis and Closure Techniques
(UG906).
Using the I/O planning capabilities of the Vivado IDE, you can interactively configure and assign
I/O ports in the synthesized design and run DRCs. Select the Run DRC command to invoke a
comprehensive set of DRCs to identify logic issues. For more information, see this link in the
Vivado Design Suite User Guide: I/O and Clock Planning (UG899) and see this link in Vivado Design
Suite User Guide: Design Analysis and Closure Techniques (UG906).
You can configure and implement debug core logic in the synthesized design to support test and
debug of the programmed device. In the Schematic or Netlist windows, interactively select
signals for debug. Debug cores are then configured and inserted into the design. The core logic
and interconnect is preserved through synthesis updates of the design when possible. For more
information, see this link in the Vivado Design Suite User Guide: Programming and Debugging
(UG908).
• In the Synthesis section of the Flow Navigator, select Open Synthesized Design.
• In the Flow Navigator, right-click Synthesis, and select New Synthesized Design from the
popup menu.
• Select Flow → Open Synthesized Design.
• In the Design Runs view, double-click the run name.
The following figure shows the default view layout for an open synthesized design.
In an implemented design, you can perform many design tasks, including timing analysis, power
analysis, and generation of utilization statistics, which can help you determine if your design
converged on desired performance targets. You can explore the design in a variety of ways using
the windows in the Vivado IDE. Selected objects are always cross-selected in all related
windows. You can cross probe to lines in the source RTL files from various windows, including
the Messages, Schematic, Device, Package, and Find windows. The Schematic window allows
you to interactively explore the logic interconnect and hierarchy. You can also apply timing
constraints and perform further timing analysis. In addition, you can interactively apply
floorplanning or design configuration constraints and save the constraints for future runs. For
more information, see the Vivado Design Suite User Guide: Design Analysis and Closure Techniques
(UG906).
In the Device window, you can explore the placement or the routing results by toggling the
Routing Resources button . As you zoom, the amount of detail shown in the Device window
increases. You can interactively alter placement and routing as well as design configuration, such
as look-up table (LUT) equations and random access memory (RAM) initialization. You can also
select results in the Device or Schematic windows to cross probe back to problem lines in the
RTL files. In the Schematic window, you can interactively explore the logic interconnect and
hierarchy. For more information, see the Vivado Design Suite User Guide: Design Analysis and
Closure Techniques (UG906).
• In the Implementation section of the Flow Navigator, click Open Implemented Design.
• Select Flow → Open Implemented Design.
• In the Design Runs view, double-click the run name.
TIP: Because the Flow Navigator reflects the state of the active run, the Open Implemented Design
command might be disabled or greyed out if the active run is not implemented. In this case, use the
Implementation popup menu in the Flow Navigator to open an implemented design from any of the
completed implementation runs.
The following figure shows the default layout view for an open implemented design.
Note: The Device window might display placement only or routing depending on the state the window was
in when it was last closed. In the Device window, click the Routing Resources button to toggle the view to
display only placement or routing.
From the design window banner, use any of the following actions to resolve an out-of-date
design:
• Click More Info, and click the Force up-to-date link in the Out-of-Date Due to window that
appears.
Force up-to-date resets the NEEDS_REFRESH property on the active synthesis or
implementation runs as needed to force the runs into an up-to-date state. The associated Tcl
command is shown in the following sample code:
set_property NEEDS_REFRESH false [get_runs synth_2]
Note: Use this command to force designs up to date when a minor design change was made, and you do
not want to refresh the design.
• Click Reload to refresh the in-memory view of the current design, eliminating any unsaved
changes you made to the design data.
• Click Close Design to close the out-of-date design.
Note: Default view layouts are available only when a design is open.
The Save Constraints command saves any changes made to the constraints, debug cores and
configuration, and design configuration settings made in the open design. The Vivado IDE
attempts to maintain the original file format as much as possible. Additional constraints are
added at the end of the file. Changes to existing constraints remain in their original file locations.
This saves any changes while preserving your original constraints source files. The new constraint
set includes all design constraints, including all changes. This is one way to maintain your original
XDC source files. You can also make the new constraint set the active constraint set, so that it is
automatically applied to the next run or when opening designs.
Closing Designs
You can close designs to reduce the number of designs in memory and to prevent multiple
locations where sources can be edited. In some cases, you are prompted to close a design prior
to changing to another design representation. To close individual designs, do either of the
following:
IMPORTANT! Changes are made on the in-memory version of the implemented design only. Resetting the
run causes changes to be lost. To save the changes, use the Save Checkpoint command, as described in
Saving Design Changes to Design Checkpoints.
Related Information
In addition, the Vivado IDE has many timing analysis options available through the Tcl Console
and SDC constraint options. Many standard report Tcl commands are available to provide
information about the clock structure, logic relationships, and constraints applied to your design.
For more information, see the Vivado Design Suite Tcl Command Reference Guide (UG835), or type
help report_*.
In the Vivado IDE, report results are provided with links to select problem areas or offending
objects. In addition, many reports can write an RPX file to save the report results in an interactive
report file that can be reloaded into memory, with links to design objects. Reloading the report
reconnects the object links so that cross-selection between the report in the Vivado IDE and the
design is enabled. For more information, see the Vivado Design Suite User Guide: Design Analysis
and Closure Techniques (UG906), or refer to the report_xxx commands in the Vivado Design
Suite Tcl Command Reference Guide (UG835).
Report strategies enable you to define groups of reports and associate all the reports with a
particular run. Report strategies can be created by using Tools→Settings→Strategies→Report
Strategies. Individual reports can be specified for each step of a run. Report strategy is a property
of a run. Setting report strategy on the run generates all specified reports when the run is
launched.
TIP: The best way to understand the Tcl commands involved in a design task is to run the command in the
Vivado IDE and inspect the syntax in the Tcl Console or the vivado.jou file.
Command Description
create_project Creates the Vivado Design Suite project. Arguments include project name and location, design
top module name, and target part.
add_files Adds source files to the project. These include Verilog (.v), VHDL (.vhd or .vhdl), SystemVerilog
(.sv), IP and System Generator modules (.xco or .xci), IP Integrator subsystems (.bd), and
XDC constraints (.xdc or .sdc).
Individual files can be added, or entire directory trees can be scanned for legal sources and
automatically added to the project.
set_property Used for multiple purposes in the Vivado Design Suite. For projects, it can be used to define VHDL
libraries for sources, simulation-only sources, target constraints files, tool settings, and so forth.
import_files Imports the specified files into the current file set, effectively adding them into the project
infrastructure. It is also used to assign XDC files into constraints sets.
launch_runs Starts either synthesis or implementation and bitstream generation. This command encompasses
launch_runs -to_step the individual implementation commands as well as the standard reports generated after the run
completes. It is used to launch all of the steps of the synthesis or implementation process in a
single command, and to track the tools progress through that process. The -to_step option is
used to launch the implementation process, including bitstream generation, in incremental steps.
wait_on_run Ensures the run is complete before processing the next commands in a Tcl script.
open_run Opens either the synthesized design or implemented design for reporting and analysis. A design
must be opened before information can be queried using Tcl for reports, analysis, and so forth.
close_design Closes the in-memory design.
start_gui Opens or closes the Vivado IDE with the current design in memory.
stop_gui
Note: This document is not a complete reference for the available Tcl commands. Instead, see the
<install_dir>/Vivado/2020.2/examples/Vivado_Tutorial
You can source these scripts from the Vivado Tcl shell, or the Tcl Console inside of the Vivado
IDE.
open_run impl_1
report_timing_summary -delay_type min_max -report_unconstrained -
check_timing_verbose \
-max_paths 10 -input_pins -file ./Tutorial_Created_Data/project_bft/
imp_timing.rpt
report_power -file ./Tutorial_Created_Data/project_bft/imp_power.rpt
# comment out the for batch mode
start_gui
Chapter 4
In Non-Project Mode, you use Tcl commands to compile a design through the entire flow. In this
mode, an in-memory project is created to let the Vivado® tools manage various properties of a
design, but the project file is not written to disk, and the project status is not preserved.
TIP: An in-memory project is also generated in Non-Project Mode for the Vivado tool to use. However, it is
not preserved as part of the design.
Tcl commands provide the flexibility and power to set up and run your designs and perform
analysis and debugging. Tcl commands can be run in batch mode, from the Vivado Design Suite
Tcl shell, or through the Vivado IDE Tcl Console. Non-Project Mode enables you to have full
control over each design flow step, but you must manually manage source files, reports, and
intermediate results known as design checkpoints. You can generate a variety of reports, perform
DRCs, and write design checkpoints at any stage of the implementation process.
Unlike Project Mode, Non-Project Mode does not include features such as runs infrastructure,
source file management, or design state reporting. Each time a source file is updated, you must
rerun the design manually. Default reports and intermediate files are not created automatically in
this mode. However, you can create a wide variety of reports and design checkpoints as needed
using Tcl commands. In addition, you can still access the GUI-based design analysis and
constraints assignment features of the Vivado IDE. You can open either the current design in
memory or any saved design checkpoint in the Vivado IDE.
When you launch the Vivado IDE in Non-Project Mode, the Vivado IDE does not include Project
Mode features such as the Flow Navigator, Project Summary, or Vivado IP catalog. In Non-
Project Mode, you cannot access or modify synthesis or implementation runs in the Vivado IDE.
However, if the design source files reside in their original locations, you can cross probe to design
objects in the different windows of the Vivado IDE. For example, you can select design objects
and then use the Go To Instantiation, Go To Definition, or Go To Source commands to open the
associated RTL source file and highlight the appropriate line.
IMPORTANT! Some of the features of Project Mode, such as source file and run results management,
saving design and tool configuration, design status, and IP integration, are not available in Non-Project
Mode.
You must write reports or design checkpoints to save the in-memory design as it progresses. The
design checkpoint (DCP) refers to a file that is an exact representation of the in-memory design.
You can save a design checkpoint after each step in the design flow, such as post synthesis, post
optimization, post placement. The DCP file can be read back into the Vivado Design Suite to
restore the design to the state captured in the checkpoint file.
You can also open a DCP in the Vivado IDE to perform interactive constraints assignment and
design analysis. Because you are viewing the active design in memory, any changes are
automatically passed forward in the flow. You can also save updates to new constraint files or
design checkpoints for future runs.
While most Non-Project Mode features are also available in Project Mode, some Project Mode
features are not available in Non-Project Mode. These features include source file and run results
management, saving design and tool configuration, design status, and IP integration. On the
other hand, you can use Non-Project mode to skip certain processes, thereby reducing the
memory footprint of the design, and saving disk space related to projects.
Related Information
The Vivado Design Suite includes an entire suite of Vivado Tcl commands to create, configure,
implement, analyze, and manage designs as well as IP. In Non-Project Mode, you can use Tcl
commands to do the following:
TIP: Because there is no project structure to add the files or import the files into, you should not use the
add_files or import_files Tcl commands to add files to a non-project based design.
Working with revision control software is simple when using the Non-Project mode. The designer
checks out the needed source files into a local directory structure. The sources are then
instantiated into a top-level design to create the design. New source files might also need to be
created and read into the design using various read_* Tcl commands. The design files are
passed to the Vivado synthesis and implementation tools. However, the source files remain in
their original locations. The checked-out sources can be modified interactively, or with Tcl
commands during the design session using appropriate code editors. Source files are then
checked back into the source control system as needed. Design results, such as design
checkpoints, analysis reports, and bitstream files, can also be checked in for revision
management. For more information on working with revision control software, see Chapter 5:
Source Management and Revision Control Recommendations.
VIDEO: For information on best practices when using revision control systems with the Vivado tools, see
the Vivado Design Suite QuickTake Video: Using Vivado Design Suite with Revision Control.
In Non-Project Mode, you can add IP to your design using any of the following methods:
• IP generated using the Vivado IP catalog (.xci format or .xcix format for core container)
If the out-of-context design checkpoint file exists in the IP directory, it is used for
implementation and a black box is inserted for synthesis. If a design checkpoint file does not
exist in the IP directory, the RTL and constraints sources are used for global synthesis and
implementation.
• Use Tcl commands to configure and generate the IP or block design.
Using Tcl ensures that the IP is configured, generated, and synthesized with each run.
IMPORTANT! When using IP in Project Mode or Non-Project Mode, always use the XCI file not the DCP
file. This ensures that IP output products are used consistently during all stages of the design flow. If the IP
was synthesized out-of-context and already has an associated DCP file, the DCP file is automatically used
and the IP is not re-synthesized. For more information, see this link in the Vivado Design Suite User Guide:
Designing with IP (UG896).
For more information, see this link in the Vivado Design Suite User Guide: Designing with IP
(UG896), or this link in the Vivado Design Suite User Guide: Designing IP Subsystems Using IP
Integrator (UG994).
You can also use third-party simulators to write the Verilog, VHDL netlists, and SDF format files
from the open design. You can launch the Mentor Graphics ModelSim and Questa simulators
from the Vivado IDE. For more information, see this link in the Vivado Design Suite User Guide:
Logic Simulation (UG900).
It is important to write design checkpoints after critical design steps for design analysis and
constraints definition. With the exception of generating a bitstream, design checkpoints are not
intended to be used as starting points to continue the design process. They are merely snapshots
of the design for analysis and constraint definition.
TIP: After each design step, you can launch the Vivado IDE to enable interactive graphical design analysis
and constraints definition on the active design, as described in Performing Design Analysis Using the
Vivado IDE.
Related Information
Generating Reports
With the exception of the vivado.log and vivado.jou reports, reports must be generated
manually with a Tcl command. You can generate various reports at any point in the design
process. For more information, see the Vivado Design Suite Tcl Command Reference Guide (UG835)
or Vivado Design Suite User Guide: Implementation (UG904).
You can write design checkpoints at different points in the flow. It is important to write design
checkpoints after critical design steps for design analysis and constraints definition. You can read
design checkpoints to restore the design, which might be helpful for debugging issues. The
design checkpoint represents a full save of the design in its current implementation state. You
can run the design through the remainder of the flow using Tcl commands. However, you cannot
add new sources to the design.
Note: You can also use the write_checkpoint <file_name>.dcp and read_checkpoint
<file_name>.dcp Tcl commands to write and read design checkpoints. To view a checkpoint in the
Vivado IDE, use the open_checkpoint <file_name>.dcp Tcl command. For more information, see
the Vivado Design Suite Tcl Command Reference Guide (UG835).
• start_gui opens the Vivado IDE with the active design in memory.
• stop_gui closes the Vivado IDE and returns to the Vivado Design Suite Tcl shell.
CAUTION! If you exit the Vivado Design Suite from the GUI, the Vivado Design Suite Tcl shell closes and
does not save the design in memory. To return to the Vivado Design Suite Tcl shell with the active design
intact, use the stop_gui Tcl command rather than the exit command.
After each stage of the design process, you can open the Vivado IDE to analyze and operate on
the current design in memory (shown in the following figure). In Non-Project Mode, some of the
project features are not available in the Vivado IDE, such as the Flow Navigator, Project
Summary, source file access and management, and runs. However, many of the analysis and
constraint modification features are available in the Tools menu.
IMPORTANT! Be aware that any changes made in the Vivado IDE are made to the active design in
memory and are automatically applied to downstream tools.
Note: When you export constraints, the write_xdc Tcl command is run. For more information, see the
Vivado Design Suite Tcl Command Reference Guide (UG835).
• Select File → Checkpoint → Save to save changes made to the current design checkpoint.
• Select File → Checkpoint → Write to save the current state of the design checkpoint to a new
design checkpoint.
Note: This document is not a complete reference for the available Tcl commands. Instead, see the Vivado
Design Suite Tcl Command Reference Guide (UG835) and Vivado Design Suite User Guide: Using Tcl Scripting
(UG894).
Command Description
read_edif Imports an EDIF or NGC netlist file into the Design Source fileset of the current project.
read_verilog Reads the Verilog (.v) and System Verilog (.sv) source files for the Non-Project Mode session.
read_vhdl Reads the VHDL (.vhd or .vhdl) source files for the Non-Project Mode session.
read_ip Reads existing IP (.xci or .xco) project files for the Non-Project Mode session. For Vivado IP
(.xci), the design checkpoint (.dcp) synthesized netlist is used to implement the IP if the netlist
is in the IP directory. If not, the IP RTL sources are used for synthesis with the rest of the top-level
design. The .ngc netlist is used from the .xco IP project.
read_bd Reads existing IP Integrator block designs (.bd) for the Non-Project session.
set_param Used for multiple purposes. For example, it can be used to define design configuration, tool
set_property settings, and so forth.
link_design Compiles the design for synthesis if netlist sources are used for the session.
synth_design Launches Vivado synthesis with the design top module name and target part as arguments.
opt_design Performs high-level design optimization.
power_opt_design Performs intelligent clock gating to reduce overall system power. This is an optional step.
place_design Places the design.
phys_opt_design Performs physical logic optimization to improve timing or routability. This is an optional step.
route_design Routes the design.
report_* Runs a variety of standard reports, which can be run at different stages of the design process.
write_bitstream Generates a bitstream file and runs DRCs.
write_checkpoint Saves the design at any point in the flow. A design checkpoint consists of the netlist and
constraints with any optimizations at that point in the flow as well as implementation results.
start_gui Opens or closes the Vivado IDE with the current design in memory.
stop_gui
Related Information
<install_dir>/Vivado/2020.2/examples/Vivado_Tutorial
You can source the script from the Vivado Tcl shell, or the Tcl Console inside of the Vivado IDE.
# run_bft_kintex7_batch.tcl
# bft sample design
# A Vivado script that demonstrates a very simple RTL-to-bitstream non-
project batch flow
#
# NOTE: typical usage would be "vivado -mode tcl -source
run_bft_kintex7_batch.tcl"
#
# STEP#0: define output directory area.
#
set outputDir ./Tutorial_Created_Data/bft_output
file mkdir $outputDir
#
# STEP#1: setup design sources and constraints
#
read_vhdl -library bftLib [ glob ./Sources/hdl/bftLib/*.vhdl ]
read_vhdl ./Sources/hdl/bft.vhdl
read_verilog [ glob ./Sources/hdl/*.v ]
read_xdc ./Sources/bft_full_kintex7.xdc
#
# STEP#2: run synthesis, report utilization and timing estimates, write
checkpoint design
#
synth_design -top bft -part xc7k70tfbg484-2
write_checkpoint -force $outputDir/post_synth
report_timing_summary -file $outputDir/post_synth_timing_summary.rpt
report_power -file $outputDir/post_synth_power.rpt
#
# STEP#3: run placement and logic optimzation, report utilization and
timing estimates, write checkpoint design
#
opt_design
place_design
phys_opt_design
write_checkpoint -force $outputDir/post_place
report_timing_summary -file $outputDir/post_place_timing_summary.rpt
#
# STEP#4: run router, report actual utilization and timing, write
checkpoint design, run drc, write verilog and xdc out
#
route_design
write_checkpoint -force $outputDir/post_route
report_timing_summary -file $outputDir/post_route_timing_summary.rpt
report_timing -sort_by group -max_paths 100 -path_type summary -file
$outputDir/post_route_timing.rpt
report_clock_utilization -file $outputDir/clock_util.rpt
report_utilization -file $outputDir/post_route_util.rpt
report_power -file $outputDir/post_route_power.rpt
report_drc -file $outputDir/post_imp_drc.rpt
write_verilog -force $outputDir/bft_impl_netlist.v
write_xdc -no_fixed_only -force $outputDir/bft_impl.xdc
#
# STEP#5: generate a bitstream
#
write_bitstream -force $outputDir/bft.bit
Chapter 5
Vivado generates many intermediate files as it compiles a design. This chapter defines the
minimum set of files necessary to recreate the design. In some cases, you might want to keep
intermediate files to improve compile time or simplify their analysis. You can always optionally
manage additional files.
1. Create the project and add all the sources to the project
2. Manage project.xpr file
3. Manage project.srcs directory
4. Test your methodology. Revision control holds good depending on how well you test and
maintain your methodology. Ideally, to ensure no files are missed and the design rebuilds
completely from design sources using a script, the design would be regressed at a regular
cadence. By rebuilding the design regularly, any issues with the revision control methodology
can be caught and addressed in a timely manner.
The project can be re-created by restoring the project.srcs directory and project.xpr file.
Opening the project.xpr file and proceeding with synthesis and implementation flows.
Separating the output IP and BD output products from the project.srcs directory.
1. Use a scripted flow for revision control. Scripted flows enable repeatability, the design can be
recreated by sourcing the Tcl script.
2. Keep source files external to the project. Ideally, the source files are kept outside of the
Vivado build directory. This helps to ensure separation of the source files and the tool
generated files.
3. Revision control the source repository. All sources should be managed by the revision control
system. It is important to note that when Vivado is using the source files, they should be
writable.
4. Generate a script to recreate the design. Non-project flows are, by definition, scripted flows
because the design is compiled strictly using Tcl commands. You would manually create this
Tcl script. A project flow can be driven from the Vivado IDE or through a project based Tcl
script. The recommendation is to use Tcl commands to recreate a project flow.
5. Revision control the script. Once the script is created, it is important to manage this file as a
source too. As the design changes, this script is updated accordingly to accommodate new
sources or to capture new design configurations. It is important that this script is managed
like any other design source.
6. Test your methodology. Revision control holds good depending on how well you test and
maintain your methodology. Ideally, to ensure no files are missed and the design rebuilds
completely from design sources using a script, the design would be regressed at a regular
cadence. By rebuilding the design regularly, any issues with the revision control methodology
can be caught and addressed in a timely manner.
The subsequent sections of this chapter describe how this revision control philosophy should be
applied to the scripted project flows. Non-project flow users should be aware of exactly which
files are sources and which files are generated by the flow. They are also, rebuilding the design
from scratch on each design iteration.
Note: write_project_tcl recreates the design as originally created by the user. For designs using IP
integrator, propagated parameters do not reflect in the recreated design until validate_bd_design is
run.
Note: Projects created prior to 2020.2, the IP output products are written to the project.srcs directory
where the XCI file is residing. In order to facilitate a clear delineation between project sources and output
products, for any new projects created using 2020.2, a project.gen directory is automatically created in
parallel to the project.srcs directory. All IP output products are written to the project.gen
directory.
Note: Projects created prior to 2020.2, the BD output products are written to the project.srcs
directory where the BD file is residing. In order to help facilitate a clear delineation between project
sources and output products, for any new projects created using 2020.2, a project.gen directory is
automatically be created in parallel to the project.srcs directory. All BD output products are written to
the project.gen directory. In turn, this significantly reduces the size of the BD directory from previous
Vivado releases.
In the case of block design containers, there is a BD directory in the project.srcs directory
for each BD source in the design. If there are several instances of a block design container on a
parent BD, each instance of the block design container is generated in the project.gen
directory. Each block design container instance, even though derived from the same source BD,
can be unique due to parameter propagation. Therefore, the instances of the each block design
containers reside in the project.gen directory, but the source from which they are all derived
reside in the project.srcs directory. Any BD directories that reside in the project.srcs
directory should be fully revision controlled.
Note: Projects created in 2020.2, IP and BD output products are no longer written to the project.srcs
directory. The project.srcs directory should contain the bare minimum number of sources necessary
to recreate the project with the exception of files that are referenced from directories external to the
project. The cleanup of the project.srcs directory should tremendously improve the delimitation
between files that are necessary to be revision controlled and tool generated files.
Note: To view the differences between two versions of a block diagram, see Vivado Design Suite User Guide:
Designing IP Subsystems using IP Integrator (UG994) to learn more about the diffbd (check spelling) utility.
Archiving Designs
The archive_design command can compress your entire project into a zip file. This command
has several options for storing sources and to run results. Essentially, the entire project is copied
locally in the memory and then zipped into a file on the disk while leaving the original project
intact. This command also copies any remote source into the archive.
This feature is useful for sending your design description to another person or to store as a self
contained entity. You might also need to send your version of vivado_init.tcl if you are
using this file to set specific parameters or variables that affect the design. For more information,
see the following resources:
Appendix A
Xilinx Resources
For support resources such as Answers, Documentation, Downloads, and Forums, see Xilinx
Support.
Solution Centers
See the Xilinx Solution Centers for support on devices, software tools, and intellectual property
at all stages of the design cycle. Topics include design assistance, advisories, and troubleshooting
tips.
Xilinx Design Hubs provide links to documentation organized by design tasks and other topics,
which you can use to learn key concepts and address frequently asked questions. To access the
Design Hubs:
Note: For more information on DocNav, see the Documentation Navigator page on the Xilinx website.
References
These documents provide supplemental material useful with this guide:
Training Resources
Xilinx provides a variety of training courses and QuickTake videos to help you learn more about
the concepts presented in this document. Use these links to explore related training resources:
Revision History
The following table shows the revision history for this document.
Copyright
© Copyright 2012-2022 Xilinx, Inc. Xilinx, the Xilinx logo, Alveo, Artix, Kintex, Kria, Spartan,
Versal, Vitis, Virtex, Vivado, Zynq, and other designated brands included herein are trademarks of
Xilinx in the United States and other countries. AMBA, AMBA Designer, Arm, ARM1176JZ-S,
CoreSight, Cortex, PrimeCell, Mali, and MPCore are trademarks of Arm Limited in the EU and
other countries. MATLAB and Simulink are registered trademarks of The MathWorks, Inc. All
other trademarks are the property of their respective owners.