Visible to Intel only — GUID: tkt1652968138985
Ixiasoft
Visible to Intel only — GUID: tkt1652968138985
Ixiasoft
2.3. Design Netlist Infrastructure (DNI)
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:
The following diagram illustrates the detailed breakdown of the Analysis & Synthesis stage:
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:
- Elaborated: Provides an unmodified preview of your design captured directly from RTL.
- Instrumented: Provides an instrumented preview with system-level debugging (debug fabric and Signal Tap logic analyzer inserted in your design).
- Constrained: Provides a design preview with SDC constraints.
- 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:
The following table describes the core elements of this 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:
- On the Compilation Dashboard, run Analysis & Synthesis > Analysis & Elaboration task to generate the DNI netlist.
- Click the magnifier icon to Invoke the RTL Analyzer.
- Execute your DNI Tcl command in the Tcl Console .
- Enable the DNI flow for your project with the following command:
quartus_syn --dni --analysis_and_elaboration <project_name>
- 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
- 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)
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
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
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
dni::list_properties -type net
name parent_name number_of_ports ports net_bus_name source_file source_line is_user_declared