Skip to content

Commit e205b4d

Browse files
committed
vpr: utils: use primary or secondary pins
Signed-off-by: Pawel Czarnecki <pczarnecki@antmicro.com>
1 parent f8cc12c commit e205b4d

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

vpr/src/util/vpr_utils.cpp

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)