@@ -1319,7 +1319,7 @@ std::vector<vtr::Matrix<int>> alloc_and_load_actual_fc(const std::vector<t_physi
13191319 } else {
13201320 // General case indicating that this pin connects to general-purpose routing
13211321
1322- // Calculate how many connections there should be across all the pins in this fc_spec
1322+ // Calculate how many connections there should be across all the pins in this fc_spec
13231323 int total_connections = 0 ;
13241324 if (fc_spec.fc_value_type == e_fc_value_type::FRACTIONAL) {
13251325 float conns_per_pin = fac * sets_per_seg_type[iseg] * fc_spec.fc_value ;
@@ -1328,14 +1328,14 @@ std::vector<vtr::Matrix<int>> alloc_and_load_actual_fc(const std::vector<t_physi
13281328 } else {
13291329 VTR_ASSERT (fc_spec.fc_value_type == e_fc_value_type::ABSOLUTE);
13301330
1331- if (std::fmod (fc_spec.fc_value , fac) != 0 .) {
1331+ if (std::fmod (fc_spec.fc_value , fac) != 0 . && segment_inf[iseg]. parallel_axis != e_parallel_axis::Z_AXIS ) {
13321332 VPR_FATAL_ERROR (VPR_ERROR_ROUTE, " Absolute Fc value must be a multiple of %d (was %f) between block pin '%s' and wire segment '%s'" ,
13331333 fac, fc_spec.fc_value ,
13341334 block_type_pin_index_to_name (&type, fc_spec.pins [0 ], is_flat).c_str (),
13351335 segment_inf[iseg].name .c_str ());
13361336 }
13371337
1338- if (fc_spec.fc_value < fac) {
1338+ if (fc_spec.fc_value < fac && segment_inf[iseg]. parallel_axis != e_parallel_axis::Z_AXIS ) {
13391339 VPR_FATAL_ERROR (VPR_ERROR_ROUTE, " Absolute Fc value must be at least %d (was %f) between block pin '%s' to wire segment %s" ,
13401340 fac, fc_spec.fc_value ,
13411341 block_type_pin_index_to_name (&type, fc_spec.pins [0 ], is_flat).c_str (),
0 commit comments