blob: b24cc8c9775b62a117892ea9cca286ebcfd2598c [file] [log] [blame]
#ifndef ATOM_NETLIST_FWD_H
#define ATOM_NETLIST_FWD_H
#include "vtr_strong_id.h"
#include "netlist_fwd.h"
/*
* This header forward declares the AtomNetlist class, and defines common types by it
*/
//Forward declaration
class AtomNetlist;
class AtomLookup;
/*
* Ids
*
* The AtomNetlist uses unique IDs to identify any component of the netlist.
* To avoid type-conversion errors (e.g. passing an AtomPinId where an AtomNetId
* was expected), we use vtr::StrongId's to disallow such conversions. See
* vtr_strong_id.h for details.
*/
//Type tags for Ids
struct atom_block_id_tag;
struct atom_net_id_tag;
struct atom_port_id_tag;
struct atom_pin_id_tag;
//A unique identifier for a block/primitive in the atom netlist
typedef vtr::StrongId<atom_block_id_tag> AtomBlockId;
//A unique identifier for a net in the atom netlist
typedef vtr::StrongId<atom_net_id_tag> AtomNetId;
//A unique identifier for a port in the atom netlist
typedef vtr::StrongId<atom_port_id_tag> AtomPortId;
//A unique identifier for a pin in the atom netlist
typedef vtr::StrongId<atom_pin_id_tag> AtomPinId;
//A signal index in a port
typedef unsigned BitIndex;
//The type of a block in the AtomNetlist
enum class AtomBlockType : char {
INPAD, //A primary input
OUTPAD, //A primary output
BLOCK //A basic atom block (LUT, FF, blackbox etc.)
};
#endif