verilog-to-routing / vtr-verilog-to-routing

Verilog to Routing -- Open Source CAD Flow for FPGA Research
https://verilogtorouting.org
Other
979 stars 378 forks source link

[WIP] 3D Placement Constraints #2623

Open soheilshahrouz opened 1 week ago

soheilshahrouz commented 1 week ago

This PR enhances the supoort for 3D placement constraints to allow the user to specify a layer range for each floorplanning constraint.

Related Issue

Motivation and Context

Each floorplan constraint is limited to a single layer. If the user wants to define a cubic floorplan constraint, she/he has to define multiple rectangular floorplan constraint with the same (x,y) coordinates but for different layers. This PR lets user defne a single floorplan region spanning across multiple layers.

How Has This Been Tested?

Types of changes

Checklist:

vaughnbetz commented 6 days ago

The FASM unit test failure seems to be due to a change in the default layers returned for placement constraints on a 2D device: 2024-06-24T20:23:40.5141020Z /home/runner/work/vtr-verilog-to-routing/vtr-verilog-to-routing/vpr/test/test_vpr_constraints.cpp:51: FAILED: 2024-06-24T20:23:40.5143053Z  REQUIRE( def_region.get_region_bounds().get_layer_range() == std::make_pair(-1, -1) ) 2024-06-24T20:23:40.5144059Z with expansion: 2024-06-24T20:23:40.5144514Z  {?} == {?}

Updating the REQUIRE to pair(0,0) should work.

@soheilshahrouz also tells me that if we make a custom printer class/method for std::pair catch2 will print objects instead of {?} in the failure.