Skip to content

[TestCoverage] Failing VTR Benchmarks on the 7Series Architecture #3117

Closed
@AlexandreSinger

Description

@AlexandreSinger

Within VTR, we have 3 tests which are testing the 7series architecture (one nightly test and two strong tests):

  1. https://github.com/verilog-to-routing/vtr-verilog-to-routing/blob/master/vtr_flow/tasks/regression_tests/vtr_reg_nightly_test2/vtr_xilinx_qor/config/config.txt
  2. https://github.com/verilog-to-routing/vtr-verilog-to-routing/blob/master/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_xilinx_support/config/config.txt
  3. https://github.com/verilog-to-routing/vtr-verilog-to-routing/blob/master/vtr_flow/tasks/regression_tests/vtr_reg_strong_odin/strong_xilinx_support/config/config.txt

The issue is that none of these tests are actually running on CI since none of them were added to the appropriate task lists. As such, they appear to have regressed.

The two strong tests are actually ill-formed. It looks like they got mangled in an upgrade and lost their testcases. I believe they were just quick tests that tested on stereovision3, but I am not sure.

The NightlyTest2 test is the most important one. It runs the full (I think) 7series architecture on 6 large VTR benchmarks. I tried to revive this testcase on the CI, however all 6 of these circuits are failing.

All 6 circuits are failing at the same point in the Prepacking stage:

Image

The issue appears to be within the following function:

static void update_chain_root_pins(t_pack_patterns* chain_pattern,
const std::vector<t_pb_graph_pin*>& chain_input_pins) {
std::vector<std::vector<t_pb_graph_pin*>> primitive_input_pins;
std::unordered_set<t_pb_type*> pattern_blocks = get_pattern_blocks(*chain_pattern);
for (const auto pin_ptr : chain_input_pins) {
std::vector<t_pb_graph_pin*> connected_primitive_pins;
get_all_connected_primitive_pins(pin_ptr, pattern_blocks, connected_primitive_pins);
/**
* It is required that the chain pins are connected inside a complex
* block. Although it is allowed to have them disconnected in some
* modes of the block provided that there is always at least one mode
* that has them connected inside. The following assert checks for
* that.
*/
VTR_ASSERT(connected_primitive_pins.size());
primitive_input_pins.push_back(connected_primitive_pins);
}
chain_pattern->chain_root_pins = primitive_input_pins;
}

This seems to be related to a recent PR which changed the get_all_connected_pins function:

#3007

To debug this, we may need to view the version just before this PR was merged and try to figure out what changed and why it is not finding any connected primitive pins for this architecture.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions