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.

Visible to Intel only — GUID: tkt1652968138985

Ixiasoft

Document Table of Contents

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