@@ -1021,20 +1021,32 @@ t_pb_graph_pin* get_pb_graph_node_pin_from_model_port_pin(const t_model_ports* m
10211021
10221022 if (model_port->dir == IN_PORT) {
10231023 if (model_port->is_clock == false ) {
1024+ t_pb_graph_pin** input_pins;
1025+ if (model_port->trigg_edge == TriggeringEdge::FALLING_EDGE)
1026+ input_pins = pb_graph_node->input_pins_sec ;
1027+ else
1028+ input_pins = pb_graph_node->input_pins ;
1029+
10241030 for (i = 0 ; i < pb_graph_node->num_input_ports ; i++) {
1025- if (pb_graph_node-> input_pins [i][0 ].port ->model_port == model_port) {
1031+ if (input_pins[i][0 ].port ->model_port == model_port) {
10261032 if (pb_graph_node->num_input_pins [i] > model_pin) {
1027- return &pb_graph_node-> input_pins [i][model_pin];
1033+ return &input_pins[i][model_pin];
10281034 } else {
10291035 return nullptr ;
10301036 }
10311037 }
10321038 }
10331039 } else {
1040+ t_pb_graph_pin** clock_pins;
1041+ if (model_port->trigg_edge == TriggeringEdge::FALLING_EDGE)
1042+ clock_pins = pb_graph_node->clock_pins_sec ;
1043+ else
1044+ clock_pins = pb_graph_node->clock_pins ;
1045+
10341046 for (i = 0 ; i < pb_graph_node->num_clock_ports ; i++) {
1035- if (pb_graph_node-> clock_pins [i][0 ].port ->model_port == model_port) {
1047+ if (clock_pins[i][0 ].port ->model_port == model_port) {
10361048 if (pb_graph_node->num_clock_pins [i] > model_pin) {
1037- return &pb_graph_node-> clock_pins [i][model_pin];
1049+ return &clock_pins[i][model_pin];
10381050 } else {
10391051 return nullptr ;
10401052 }
@@ -1043,10 +1055,16 @@ t_pb_graph_pin* get_pb_graph_node_pin_from_model_port_pin(const t_model_ports* m
10431055 }
10441056 } else {
10451057 VTR_ASSERT (model_port->dir == OUT_PORT);
1058+ t_pb_graph_pin** output_pins;
1059+ if (model_port->trigg_edge == TriggeringEdge::FALLING_EDGE)
1060+ output_pins = pb_graph_node->output_pins_sec ;
1061+ else
1062+ output_pins = pb_graph_node->output_pins ;
1063+
10461064 for (i = 0 ; i < pb_graph_node->num_output_ports ; i++) {
1047- if (pb_graph_node-> output_pins [i][0 ].port ->model_port == model_port) {
1065+ if (output_pins[i][0 ].port ->model_port == model_port) {
10481066 if (pb_graph_node->num_output_pins [i] > model_pin) {
1049- return &pb_graph_node-> output_pins [i][model_pin];
1067+ return &output_pins[i][model_pin];
10501068 } else {
10511069 return nullptr ;
10521070 }
@@ -1096,7 +1114,14 @@ const t_pb_graph_pin* find_pb_graph_pin(const AtomNetlist& netlist, const AtomLo
10961114 VTR_ASSERT (pb_gnode);
10971115
10981116 // The graph node and pin/block should agree on the model they represent
1099- VTR_ASSERT (netlist.block_model (blk_id) == pb_gnode->pb_type ->model );
1117+ if (strcmp (netlist.block_model (blk_id)->name , MODEL_LATCH) == 0 ) {
1118+ if (netlist.block_model (blk_id)->inputs ->trigg_edge == TriggeringEdge::FALLING_EDGE)
1119+ VTR_ASSERT (netlist.block_model (blk_id) == pb_gnode->pb_type ->model_sec );
1120+ else
1121+ VTR_ASSERT (netlist.block_model (blk_id) == pb_gnode->pb_type ->model );
1122+ } else {
1123+ VTR_ASSERT (netlist.block_model (blk_id) == pb_gnode->pb_type ->model );
1124+ }
11001125
11011126 // Get the pin index
11021127 AtomPortId port_id = netlist.pin_port (pin_id);
0 commit comments