Intel® Quartus® Prime Pro Edition User Guide: Design Compilation

ID 683236
Date 6/21/2022
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents
Give Feedback

2.3. Design Netlist Infrastructure (DNI)

Design Netlist Infrastructure (DNI) modernizes foundational aspects of the Intel® Quartus® Prime software. It enables new features that allow faster design convergence and a better user experience.

The following are some significant benefits of the DNI flow in the current release:

  • Access to a new productivity tool (RTL Analyzer (Beta)).
  • Uniform and comprehensive scripting interface.
  • More granular synthesis flow enabling faster iterations.
  • Access to Sweep Hints Viewer.

DNI will support more features and capabilities in the subsequent Intel® Quartus® Prime software releases.

DNI Flow (Beta)

The DNI flow (beta) provides a complete and unmodified view of your design early in the DNI-based compilation flow. It serves as a platform to better understand your design and improve it. With this Beta feature, the monolithic Analysis & Synthesis stage splits into Analysis & Elaboration and Synthesis stages.

To invoke the DNI flow, you must run the Intel® Quartus® Prime Pro Edition software with --dni option as follows:

quartus --dni <project>

Once you enable the flow, the compilation dashboard gets updated. You can now access the preview modes of the Analysis & Elaboration stage, as shown in the following image:

Figure 3. Analysis & Elaboration and Synthesis Stages

The following diagram illustrates the detailed breakdown of the Analysis & Synthesis stage:

Figure 4. Analysis & Synthesis in the DNI Flow

The Analysis & Elaboration stage is composed of a series of transformations, and you can preview your design at each stage as shown in Analysis & Elaboration and Synthesis Stages, where:

  1. Elaborated: Provides an unmodified preview of your design captured directly from RTL.
  2. Instrumented: Provides an instrumented preview with system-level debugging (debug fabric and Signal Tap logic analyzer inserted in your design).
  3. Constrained: Provides a design preview with SDC constraints.
  4. Swept: Provides a design preview with unnecessary logic removed from your design.

For information about the Synthesis stage, refer to Design Synthesis.

DNI Netlist Five-box Data Model

DNI introduces a conventional netlist five-box data model used in most Electronic Design Automation (EDA) tools and commonly uses Tcl commands to traverse the netlist. Consider the following two instances example:

module top (input PI_1,
            input PI_2,
            input PI_3,
            output PO_4);
 
    wire net_2;
    wire net_3;
 
    AND_OR inst_1(PI_1, PI_2, PI_3, net_2);
    AND_OR inst_2(PI_3, PI_2, PI_1, net_3);
    assign PO_4 = net_2 | net_3;
endmodule
 
module AND_OR (input in_1,
                input in_2,
                input in_3,
                output out_1);
 
    wire net_1;
 
    assign net_1 = in_1 & in_2;
    assign out_1 = net_1 | in_3;
 
endmodule

A DNI netlist consists of modules, instances, ports, instance ports, and nets, as shown in the following color-coded diagram:

Figure 5. DNI Netlist Five-box Data Model

The following table describes the core elements of this netlist data model:

Table 3.  Core Elements of the Netlist Data Model
Data Model Elements Description Tcl Command
Module A collection of connected netlist objects, such as instances, ports, nets, and instance ports. It is similar to the Verilog module or VHDL entity.

Each design has only a single top module.

Port A terminal of a module.

In the DNI Data Model, PI_1, PI_2, PI_3, and PO_4 are ports.

dni::get_ports
Instance

An instantiation of a module or primitive.

In the DNI Data Model, inst_1, inst_2, AND_1, OR_2, and OR_3 are instances.

Note: Multiple unique objects can reference an instance if it exists in a netlist instantiated more than once.
dni::get_cells
Instance port (inst_port) A terminal of an instance.

In the DNI Data Model, inst_1|in_1, inst_2|AND_1|in_1 are few examples of instance ports.

dni::get_pins
Net A wire that connects terminals of instantiations or a netlist. In the DNI Data Model, Net_1, Net_2, Net_3, Net_4 and so on are nets. dni::get_nets

Executing Tcl Commands

The Intel® Quartus® Prime software GUI (quartus) and Synthesis tool (quartus_syn) support Tcl commands.

Use one of the following suitable methods to execute your Tcl commands:

Intel® Quartus® Prime Software GUI (quartus)

Perform the following steps in the GUI after you have enabled the DNI flow:

  1. On the Compilation Dashboard, run Analysis & Synthesis > Analysis & Elaboration task to generate the DNI netlist.

  2. Click the magnifier icon to Invoke the RTL Analyzer.
  3. Execute your DNI Tcl command in the Tcl Console .

Synthesis Tool (quartus_syn)
  1. Enable the DNI flow for your project with the following command:
    quartus_syn --dni --analysis_and_elaboration <project_name>
  2. Load your design.
    > quartus_syn --dni -s
    <... Quartus Info Message...>
    tcl> project_open top
    tcl> dni::load_design -checkpoint elaborated
    dms_path::sandboxes::sandbox_1239_0::design
  3. Execute your DNI Tcl commands:
    tcl> foreach_in_collection p [dni::get_pins -of_objects [dni::get_cells inst_1|out_1]] {puts [dni::get_property -name name -object $p]}
    a[0]
    a[1]
    o
    tcl> foreach_in_collection p [dni::get_pins -of_objects [dni::get_cells inst_1|out_1]] {puts [dni::get_property -name direction -object $p]}
    input
    input
    output
    tcl>

Example Use of Tcl Commands

The following examples enumerate how you can easily script a few routine tasks by using different features of the get command, such as attribute-based object filtering, name-based searching, or traversing object relationships:

Retrieving Top-level Input Ports (highlighted in the schematic)

In some scenarios, you may need a list of top-level ports. For example, to ensure all input ports are constrained with set_input_delay, you must retrieve all ports in the design and filter based on direction using the dni::get_ports tcl command, as shown in the following:
dni::get_ports -filter direction==input

The tcl command returns a collection of input ports in the design, such as PI_1, PI_2, and PI_3. You can use the returned collection to pass or chain into other get_object commands. To access members of the collection, use collection iterators, such as foreach_in_collection. For example:

foreach_in_collection p [dni::get_ports -filter direction=input] { puts $p }
port::top::PI_1
port::top::PI_2
port::top::PI_3

Retrieving the inst_1 Instance

Within your design, you can search for a specific object (for example, instance) by name. To find an instance, use the dni::get_cells tcl command, as shown in the following:
dni::get_cells inst_1

The tcl command returns the inst_1 instance in the design. You can use the returned instance to pass or chain into other get_object commands. For example:

foreach_in_collection p [dni::get_ports -filter direction=input] { puts [dni::get_property -name name -object $p] }
inst_1

Retrieving the in_1 Instance Port of the inst_1 Instance

During connectivity traversal, you may want to find a specific instance pin of an instance. In such scenarios, use the -of_object interface of the dni::get_pins command to traverse instance-to-instance pin relationship as shown in the following:
dni::get_pins -of_objects [dni::get_cells inst_1] -filter name==in_1

The tcl command returns in_1 instance port of the inst_1 instance in the design. You can use the returned instance port to pass or chain into other get_object commands. For example:

foreach_in_collection p [dni::get_pins -of_objects [dni::get_cells inst_1] -filter name==in_1] { puts $p] }
inst_port::top::inst_1|in_1

Retrieving Nets of the inst_1|out1 Instance

During connectivity trace, you may want to traverse all nets connected to an instance. In such a scenario, use the -of_objects interface of the dni::get_nets command to traverse nets connected to an instance. For example:

dni::get_nets -of_objects [dni::get_cells inst_1|out_1]

The tcl command returns nets of the inst_1|out1 instance in the design. You can use the returned collection to pass or chain into other commands. For example:

foreach_in_collection p [dni::get_nets -of_objects [dni::get_cells inst_1|out_1] ] { puts $p] }
inst_port::top::inst_1|out_1|Net_7
inst_port::top::inst_1|out_1|Net_6
inst_port::top::inst_1|out_1|Net_8

Listing the Properties Available on the net Object Type

The DNI tcl interface allows you to access object schema via the dni::list_properties tcl command. You can use this command to list accessible properties of any object type as follows:
dni::list_properties -type net
name parent_name number_of_ports ports net_bus_name source_file source_line is_user_declared