Verilog to Routing - VPR
|
This file defines the AtomNetlist class used to store and manipulate the primitive (or atom) netlist. More...
#include <vector>
#include <unordered_map>
#include "vtr_range.h"
#include "vtr_logic.h"
#include "vtr_vector_map.h"
#include "logic_types.h"
#include "netlist.h"
#include "atom_netlist_fwd.h"
#include "atom_lookup.h"
Go to the source code of this file.
Data Structures | |
class | AtomNetlist |
This file defines the AtomNetlist class used to store and manipulate the primitive (or atom) netlist.
The AtomNetlist is derived from the Netlist class, and contains information on the primitives. This includes basic components (Blocks, Ports, Pins, & Nets), and physical descriptions (t_model) of the primitives.
Most of the functionality relevant to components and their accessors/cross-accessors is implemented in the Netlist class. Refer to netlist.(h|tpp) for more information.
There are 4 components in the Netlist: Blocks, Ports, Pins, and Nets. Each component has a unique ID in the netlist, as well as various associations to their related components (e.g. A pin knows which port it belongs to, and what net it connects to)
Blocks refer to the atoms (AKA primitives) that are in the the netlist. Each block contains input/output/clock ports. Blocks have names, and various functionalities (LUTs, FFs, RAMs, ...) Each block has an associated t_model, describing the physical properties.
Ports are composed of a set of pins that have specific directionality (INPUT, OUTPUT, or CLOCK). The ports in the AtomNetlist are respective to the atoms. (i.e. the AtomNetlist does not contain ports of a Clustered Logic Block). Each port has an associated t_model_port, describing the physical properties.
Pins are single-wire input/outputs. They are part of a port, and are connected to a single net.
Nets in the AtomNetlist track the wiring connections between the atoms.
There are two main models, the primitive itself (t_model) and the ports of that primitive (t_model_ports). The models are created from the architecture file, and describe the physical properties of the atom.
The AtomNetlist also contains a TruthTable for each block, which indicates what the LUTs contain.
For all create_* functions, the AtomNetlist will wrap and call the Netlist's version as it contains additional information that the base Netlist does not know about.
All functions with suffix *_impl() follow the Non-Virtual Interface (NVI) idiom. They are called from the base Netlist class to simplify pre/post condition checks and prevent Fragile Base Class (FBC) problems.
Refer to netlist.h for more information.