vpr/src/tileable_rr_graph/openfpga_rr_graph_utils.cpp
/************************************************************************
 * Check if an OPIN of a rr_graph is directly driving an IPIN
 * To meet this requirement, the OPIN must:
 *   - Have only 1 fan-out
 *   - The only fan-out is an IPIN
 ***********************************************************************/
Check if an OPIN of a rr_graph is directly driving an IPIN
To meet this requirement, the OPIN must:
- Have only 1 fan-out
- The only fan-out is an IPIN
Check if an OPIN of a rr_graph is directly driving an IPIN To meet this requirement the OPIN must : - Have only 1 fan - out - The only fan - out is an IPIN
bool is_opin_direct_connected_ipin(const RRGraph& rr_graph,
                                   const RRNodeId& node) {
  VTR_ASSERT(OPIN == rr_graph.node_type(node));
  if (1 != rr_graph.node_out_edges(node).size()) {
    return false;
  }
  VTR_ASSERT(1 == rr_graph.node_out_edges(node).size());
  for (const RREdgeId& edge: rr_graph.node_out_edges(node)) {
    const RRNodeId& sink_node = rr_graph.edge_sink_node(edge);
    if (IPIN != rr_graph.node_type(sink_node)) {
      return false;
    }
  }
  return true;
}
bool is_opin_direct_connected_ipin ( const RRGraph & rr_graph , const RRNodeId & node ) { VTR_ASSERT ( OPIN == rr_graph . node_type ( node ) ) ; if ( 1 != rr_graph . node_out_edges ( node ) . size ( ) ) { return false ; } VTR_ASSERT ( 1 == rr_graph . node_out_edges ( node ) . size ( ) ) ; for ( const RREdgeId & edge : rr_graph . node_out_edges ( node ) ) { const RRNodeId & sink_node = rr_graph . edge_sink_node ( edge ) ; if ( IPIN != rr_graph . node_type ( sink_node ) ) { return false ; } } return true ; }
Check if an OPIN of a rr_graph is directly driving an IPIN
 To meet this requirement, the OPIN must:
   - Have only 1 fan-out
   - The only fan-out is an IPIN
Check if an OPIN of a rr_graph is directly driving an IPIN To meet this requirement the OPIN must : - Have only 1 fan - out - The only fan - out is an IPIN
/* We only accept OPIN */