Netlist mapping

As shown in the previous section, there are multiple levels of abstraction (multiple netlists) in VPR which are the ClusteredNetlist and the AtomNetlist. To fully use these netlists, we provide some functions to map between them.

In this section, we will state how to map between the atom and clustered netlists.

Block Id

Atom block Id to Cluster block Id

To get the block Id of a cluster in the ClusteredNetlist from the block Id of one of its atoms in the AtomNetlist:

  • Using AtomLookUp class

ClusterBlockId clb_index = g_vpr_ctx.atom().lookup.atom_clb(atom_blk_id);
  • Using re_cluster_util.h helper functions

ClusterBlockId clb_index = atom_to_cluster(atom_blk_id);

Cluster block Id to Atom block Id

To get the block Ids of all the atoms in the AtomNetlist that are packed in one cluster block in ClusteredNetlist:

  • Using ClusterAtomLookup class

ClusterAtomsLookup cluster_lookup;
std::vector<AtomBlockId> atom_ids = cluster_lookup.atoms_in_cluster(clb_index);
  • Using re_cluster_util.h helper functions

std::vector<AtomBlockId> atom_ids = cluster_to_atoms(clb_index);

Net Id

Atom net Id to Cluster net Id

To get the net Id in the ClusteredNetlist from its Id in the AtomNetlist, use AtomLookup class as follows

ClusterNetId clb_net = g_vpr_ctx.atom().lookup.clb_net(atom_net);

Cluster net Id to Atom net Id

To get the net Id in the AtomNetlist from its Id in the ClusteredNetlist, use AtomLookup class as follows

ClusterNetId atom_net = g_vpr_ctx.atom().lookup.atom_net(clb_net);