Skip to content

Commit e4ddd25

Browse files
committed
[vpr] add a new option to enable perimeter cbx and cby
1 parent a7b8546 commit e4ddd25

File tree

5 files changed

+6
-1
lines changed

5 files changed

+6
-1
lines changed

libs/libarchfpga/src/physical_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2009,6 +2009,7 @@ struct t_arch {
20092009

20102010
/* Xifan Tang: options for tileable routing architectures */
20112011
bool tileable;
2012+
bool perimeter_cb;
20122013
bool shrink_boundary;
20132014
bool through_channel;
20142015
bool opin2all_sides;

libs/libarchfpga/src/read_xml_arch_file.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2535,6 +2535,7 @@ static void ProcessLayout(pugi::xml_node layout_tag, t_arch* arch, const pugiuti
25352535
//expect_only_attributes(layout_tag, {}, loc_data);
25362536

25372537
arch->tileable = get_attribute(layout_tag, "tileable", loc_data, ReqOpt::OPTIONAL).as_bool(false);
2538+
arch->perimeter_cb = get_attribute(layout_tag, "perimeter_cb", loc_data, ReqOpt::OPTIONAL).as_bool(false);
25382539
arch->shrink_boundary = get_attribute(layout_tag, "shrink_boundary", loc_data, ReqOpt::OPTIONAL).as_bool(false);
25392540
arch->through_channel = get_attribute(layout_tag, "through_channel", loc_data, ReqOpt::OPTIONAL).as_bool(false);
25402541
arch->opin2all_sides = get_attribute(layout_tag, "opin2all_sides", loc_data, ReqOpt::OPTIONAL).as_bool(false);
@@ -4903,4 +4904,4 @@ static T* get_type_by_name(const char* type_name, std::vector<T>& types) {
49034904

49044905
archfpga_throw(__FILE__, __LINE__,
49054906
"Could not find type: %s\n", type_name);
4906-
}
4907+
}

vpr/src/base/SetupVPR.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ static void SetupRoutingArch(const t_arch& Arch,
423423

424424
/* Copy the tileable routing setting */
425425
RoutingArch->tileable = Arch.tileable;
426+
RoutingArch->perimeter_cb = Arch.perimeter_cb;
426427
RoutingArch->shrink_boundary = Arch.shrink_boundary;
427428
RoutingArch->through_channel = Arch.through_channel;
428429
RoutingArch->opin2all_sides = Arch.opin2all_sides;

vpr/src/base/vpr_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1576,6 +1576,7 @@ struct t_det_routing_arch {
15761576

15771577
/* Xifan Tang: tileable routing */
15781578
bool tileable;
1579+
bool perimeter_cb;
15791580
bool shrink_boundary;
15801581
bool through_channel;
15811582
bool opin2all_sides;

vpr/src/route/rr_graph.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -721,6 +721,7 @@ void create_rr_graph(const t_graph_type graph_type,
721721
directs, num_directs,
722722
&det_routing_arch->wire_to_rr_ipin_switch,
723723
det_routing_arch->shrink_boundary, /* Shrink to the smallest boundary, no routing wires for empty zone */
724+
det_routing_arch->perimeter_cb, /* Now I/O or any programmable blocks on perimeter can have full cb access (both cbx and cby) */
724725
router_opts.trim_obs_channels || det_routing_arch->through_channel, /* Allow/Prohibit through tracks across multi-height and multi-width grids */
725726
det_routing_arch->opin2all_sides, /* Allow opin of grid to directly drive routing tracks at all sides of a switch block */
726727
det_routing_arch->concat_wire, /* Allow end-point tracks to be wired to a starting point track on the opposite in a switch block. It means a wire can be continued in the same direction to another wire */

0 commit comments

Comments
 (0)