# Netlist

A netlist is a textual description of an electronic circuit that lists its components and the connections, or nets, between them, serving as the machine-readable form of a design that schematic diagrams, hardware description languages, and synthesis tools all converge on. In digital design a netlist names cell instances, pins, and nets; in analog simulation it lists device instances and their nodes; in printed circuit board (PCB) design it records which component pin connects to which. The word covers both the in-memory data structure that tools manipulate and the files, in formats such as EDIF, Verilog, or SPICE, that carry the design between tools.

| Key fact | Detail |
|---|---|
| Core content | Cell instances, pins, and nets; nets connect groups of pins, and both hierarchical and leaf pins can appear on one net<sup>[1](https://openroad.readthedocs.io/en/latest/main/src/sta/doc/StaApi.html)</sup> |
| Digital origin | Produced by logic synthesis from RTL; in the OpenROAD flow, Yosys synthesis takes RTL, SDC, .lib, and .lef inputs and outputs a netlist plus SDC constraints<sup>[2](https://github.com/The-OpenROAD-Project/OpenROAD)</sup> |
| Common formats | EDIF (Electronic Design Interchange Format) and vendor formats such as XNF (Xilinx Netlist Format)<sup>[3](https://ewh.ieee.org/r10/calcutta/eds/doc/EDS_VOL1_NO1_2016.pdf)</sup> |
| PCB form | Reference designators, pin numbers, and signal keywords, for example "U12 pin 2 connects to Q24 pin 3"<sup>[4](https://resources.pcb.cadence.com/blog/2019-schematic-vs-netlist-for-pcb-integration-effects-and-advantages)</sup> |
| SPICE form | Each element line gives the instance name, the circuit nodes it connects to, and parameter values; the first letter of the instance name specifies the element type<sup>[5](https://ngspice.sourceforge.io/docs/ngspice-39-manual.pdf)</sup> |
| Simulation variants | Vivado can write functional netlists (no timing) and timing netlists with SDF delay data via `write_verilog`, `write_vhdl`, and `write_sdf`<sup>[6](https://docs.amd.com/api/khub/documents/CeGzIZAc~17mQPWJcpytfA/content)</sup> |

## What a netlist contains

A netlist describes structure, not behavior. It says what instances exist and how their pins are wired, leaving the behavior of each instance to a library or model referenced by name. In the static timing analysis engine used by [OpenROAD](https://www.edgepedia.org/openroad), netlists are built out of cell instances, pins, and nets: a net connects a group of pins, pins join an instance to a net corresponding to a port, and instances are calls of cells in the design hierarchy, with hierarchical instances containing children and leaf instances referencing library cells that carry timing models<sup>[1](https://openroad.readthedocs.io/en/latest/main/src/sta/doc/StaApi.html)</sup>.

Hierarchy is a central property. A netlist can be folded, storing one copy of each repeated hierarchical block, or unfolded, repeating the sub-tree for every instance. The unfolded representation allows optimization tools to specialize individual instances of a hierarchical block, while a folded representation requires all copies to have identical sub-trees<sup>[1](https://openroad.readthedocs.io/en/latest/main/src/sta/doc/StaApi.html)</sup>. Vivado's functional simulation netlist is described as a hierarchical, folded netlist expanded to the primitive module or entity level, with primitives and macro primitives at the lowest level<sup>[7](https://docs.amd.com/r/2024.1-English/ug900-vivado-logic-simulation/Generating-a-Functional-Netlist)</sup>.

Buses, or signal vectors, are handled differently by different tools. In Yosys's internal RTLIL format, a bus is a single wire object with a width greater than 1 rather than a set of individual signals; this supports coarse-grain synthesis in which target-architecture cells operate on entire vectors instead of single-bit wires. RTLIL fixes bit 0 as the least significant bit, while preserving the original HDL bounds so buses are indexed correctly in error messages and backend output<sup>[8](https://yosys.readthedocs.io/_/downloads/en/latest/pdf/)</sup>.

## Netlists in digital synthesis

Synthesis is the step that produces a gate-level netlist from register-transfer level (RTL) source. In Yosys, a module contains RTLIL::Cell and RTLIL::Wire objects, and these are the objects used to model netlists; the goal of synthesis is to convert every module to a state where its functionality is implemented only by cells from a given cell library and the wires connecting them. RTLIL::Process objects, which represent decision trees and synchronization from Verilog always blocks, and RTLIL::Memory objects must be replaced by cells and wires by synthesis passes before the design is a netlist<sup>[8](https://yosys.readthedocs.io/_/downloads/en/latest/pdf/)</sup>. A cell carries a name, a type, attributes, parameters for parametric cells, and the connections of its ports to wires and constants<sup>[8](https://yosys.readthedocs.io/_/downloads/en/latest/pdf/)</sup>.

The synthesized netlist then becomes the working object for everything downstream. In the [Vivado](https://www.edgepedia.org/vivado) flow, multiple synthesis runs produce multiple netlists stored with the project, and different versions can be opened for device and design analysis; the most comprehensive list of design rule checks becomes available once a synthesized netlist exists and clock logic is available for analysis and placement<sup>[9](https://docs.amd.com/r/2024.1-English/ug892-vivado-design-flows-overview/Logic-Synthesis)</sup>. A post-synthesis project starts from a synthesized netlist together with generated IP and constraints, and can then be analyzed, floorplanned, and implemented; such projects accept netlist files in structural Verilog, SystemVerilog, EDIF, or NGC form<sup>[10](https://docs.amd.com/r/2023.2-English/ug895-vivado-system-level-design-entry/Creating-a-Post-Synthesis-Project)</sup>. Third-party synthesis flows hand off the same way: a netlist from an external synthesis tool, plus IP customizations and top-level constraints, is brought into the implementation environment as an EDIF file<sup>[11](https://docs.amd.com/r/2022.1-English/ug939-vivado-designing-with-ip-tutorial/Step-7-Create-a-Netlist-Project)</sup>.

The netlist also changes after synthesis. During physical synthesis, the placer performs optimizations such as LUT decomposition and fanout-based replication that modify the netlist based on initial placement, committing a change when timing improves<sup>[12](https://docs.amd.com/r/2020.2-English/ug904-vivado-implementation/Physical-Synthesis-Phase)</sup>. OpenROAD's database provides ECO methods for capturing netlist changes during engineering change orders<sup>[13](https://openroad.readthedocs.io/en/latest/doxygen_output/html/classodb_1_1dbDatabase.html)</sup>.

## Netlists in simulation and timing analysis

Simulation uses two distinct netlist forms. A functional netlist, written without timing information, checks that the structural netlist's behavior matches the expected RTL simulation, often with the same testbench used for behavioral simulation<sup>[7](https://docs.amd.com/r/2024.1-English/ug900-vivado-logic-simulation/Generating-a-Functional-Netlist)</sup>. A timing netlist is paired with a Standard Delay Format (SDF) file; SDF values are only estimates early in the flow, for example during synthesis, and become more accurate as placement and routing information accumulates in the database<sup>[6](https://docs.amd.com/api/khub/documents/CeGzIZAc~17mQPWJcpytfA/content)</sup>.

[Static timing analysis](https://www.edgepedia.org/static-timing-analysis) (STA) reads the netlist through a network API. The STA's Verilog netlist reader implements this API, and external tools such as placers adapt their own databases to it; a placement tool integrates the STA this way because the DEF file includes netlist connectivity<sup>[1](https://openroad.readthedocs.io/en/latest/main/src/sta/doc/StaApi.html)</sup>. [Timing closure](https://www.edgepedia.org/timing-closure) work is tied closely to synthesis so that the generated gate-level netlist is likely to meet the desired timing, and signoff timing analysis runs on the netlist description of the design<sup>[14](https://semiengineering.com/rapid-timing-constraints-signoff-with-automated-constraint-management/)</sup>.

## Netlists in PCB and analog design

In PCB design, the netlist is the textual counterpart of the schematic. A schematic shows connectivity graphically and is the source of truth for connectivity, signal naming, and functional intent; compiling it produces the connectivity data from which the netlist is extracted<sup>[15](https://www.cadence.com/ja_JP/home/explore/what-is-schematic.html)</sup>. The netlist itself lists [reference designators](https://www.edgepedia.org/reference-designator), pin numbers, and signal keywords, and serves as a verification tool: the final output files for a circuit should match the netlist, and the netlist should match the schematic. Manufacturers prefer to receive the final netlist to ensure the board is produced to exact specifications<sup>[4](https://resources.pcb.cadence.com/blog/2019-schematic-vs-netlist-for-pcb-integration-effects-and-advantages)</sup>.

Analog simulation takes the netlist as its primary input. In SPICE-family simulators such as ngspice, the user enters the circuit as a netlist, and the output is graphs of currents, voltages, and other electrical quantities. Each element line names the instance, lists the circuit nodes it connects to, and gives the parameter values; the first letter of the instance name encodes the element type, so a resistor name must begin with R<sup>[5](https://ngspice.sourceforge.io/docs/ngspice-39-manual.pdf)</sup>. ngspice provides no schematic entry of its own, relying on file-based netlist input or third-party interfaces such as KiCAD<sup>[16](https://ngspice.sourceforge.io/?source=navbar)</sup>.

## Formats

Netlist interchange formats are standardized or vendor-specific. EDIF, the Electronic Design Interchange Format, is a common interchange format, alongside vendor formats such as XNF, the Xilinx Netlist Format<sup>[3](https://ewh.ieee.org/r10/calcutta/eds/doc/EDS_VOL1_NO1_2016.pdf)</sup>. Structural Verilog and VHDL netlists are also widely exchanged, and Vivado can write both for simulation<sup>[6](https://docs.amd.com/api/khub/documents/CeGzIZAc~17mQPWJcpytfA/content)</sup>. For timing, the SDF file annotates delays onto the netlist, and parasitic data travels in SPEF or SPF files read by delay calculation<sup>[1](https://openroad.readthedocs.io/en/latest/main/src/sta/doc/StaApi.html)</sup>.

## References

1. [STA API, OpenROAD documentation](https://openroad.readthedocs.io/en/latest/main/src/sta/doc/StaApi.html)
2. [The-OpenROAD-Project/OpenROAD, GitHub](https://github.com/The-OpenROAD-Project/OpenROAD)
3. [IEEE EDS Kolkata Chapter Technical Magazine, Vol. 1 No. 1, January 2016](https://ewh.ieee.org/r10/calcutta/eds/doc/EDS_VOL1_NO1_2016.pdf)
4. [Schematic vs Netlist for PCB Integration, Cadence](https://resources.pcb.cadence.com/blog/2019-schematic-vs-netlist-for-pcb-integration-effects-and-advantages)
5. [Ngspice User's Manual, version 39](https://ngspice.sourceforge.io/docs/ngspice-39-manual.pdf)
6. [Vivado Design Suite User Guide: Logic Simulation (UG900), AMD](https://docs.amd.com/api/khub/documents/CeGzIZAc~17mQPWJcpytfA/content)
7. [generating a functional netlist - generating a functional netlist - 2024.1 english - ug900](https://docs.amd.com/r/2024.1-English/ug900-vivado-logic-simulation/Generating-a-Functional-Netlist)
8. [YosysHQ Yosys documentation](https://yosys.readthedocs.io/_/downloads/en/latest/pdf/)
9. [Vivado Design Suite User Guide: Design Flows Overview (UG892), AMD](https://docs.amd.com/r/2024.1-English/ug892-vivado-design-flows-overview/Logic-Synthesis)
10. [Creating a Post-Synthesis Project (UG895), AMD](https://docs.amd.com/r/2023.2-English/ug895-vivado-system-level-design-entry/Creating-a-Post-Synthesis-Project)
11. [Designing with IP Tutorial (UG939), AMD](https://docs.amd.com/r/2022.1-English/ug939-vivado-designing-with-ip-tutorial/Step-7-Create-a-Netlist-Project)
12. [Physical Synthesis Phase (UG904), AMD](https://docs.amd.com/r/2020.2-English/ug904-vivado-implementation/Physical-Synthesis-Phase)
13. [odb::dbDatabase Class Reference, OpenROAD](https://openroad.readthedocs.io/en/latest/doxygen_output/html/classodb_1_1dbDatabase.html)
14. [Rapid Timing Constraints Signoff With Automated Constraint Management, Semiconductor Engineering](https://semiengineering.com/rapid-timing-constraints-signoff-with-automated-constraint-management/)
15. [What is a PCB Schematic?, Cadence](https://www.cadence.com/ja_JP/home/explore/what-is-schematic.html)
16. [Ngspice, the open source Spice circuit simulator](https://ngspice.sourceforge.io/?source=navbar)

---
*Topic: Encyclopedia › Technology and the built world › Computing and digital systems › Computer hardware › Semiconductor devices & fabrication › Integrated circuits and chip families*

*Initially written Sep 17, 2026 · Reviewed: Oct 15, 2026 · Edited: Oct 15, 2026; Oct 21, 2026 · Last review: Oct 15, 2026*

*Copyright 2026 EdgeChat AI, a subsidiary of Biostate AI.*

License: Edgepedia Community License 1.0, https://www.edgepedia.org/edgepedia/license
