diff options
author | Alessandro Comodi <acomodi@antmicro.com> | 2021-05-10 14:03:44 +0200 |
---|---|---|
committer | Alessandro Comodi <acomodi@antmicro.com> | 2021-05-10 14:05:46 +0200 |
commit | beff2b912c2dfdd05334f642e1d86bbd197b16ef (patch) | |
tree | 71f1de5b732dc57caf05d1c3f201fa22abcf437a /fpga_interchange/site_routing_storage.h | |
parent | 432b9d8bde2faf9fbcc39ab0b82d02ce5115cdc8 (diff) | |
download | nextpnr-beff2b912c2dfdd05334f642e1d86bbd197b16ef.tar.gz nextpnr-beff2b912c2dfdd05334f642e1d86bbd197b16ef.tar.bz2 nextpnr-beff2b912c2dfdd05334f642e1d86bbd197b16ef.zip |
interchange: site router: fix illegal site thru paths
Signed-off-by: Alessandro Comodi <acomodi@antmicro.com>
Diffstat (limited to 'fpga_interchange/site_routing_storage.h')
-rw-r--r-- | fpga_interchange/site_routing_storage.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/fpga_interchange/site_routing_storage.h b/fpga_interchange/site_routing_storage.h index a8ea51f5..2fbc246e 100644 --- a/fpga_interchange/site_routing_storage.h +++ b/fpga_interchange/site_routing_storage.h @@ -45,14 +45,25 @@ struct RouteNode LEFT_SITE = 0, // Has this path entered the site? ENTERED_SITE = 1, + // Has this path left the site after entering it? + // This node should be discarded as being part of an illegal path + // which allows entering and exiting a site, situation that needs + // to be handled with a tile PIP. + LEFT_SITE_AFTER_ENTERING = 2, }; bool has_left_site() const { return (flags & (1 << LEFT_SITE)) != 0; } + bool has_left_site_after_entering() const { return (flags & (1 << LEFT_SITE_AFTER_ENTERING)) != 0; } + bool can_leave_site() const { return !has_left_site(); } + bool is_valid_node() const { return !has_left_site_after_entering(); } + void mark_left_site() { flags |= (1 << LEFT_SITE); } + void mark_left_site_after_entering() { flags |= (has_entered_site() << LEFT_SITE_AFTER_ENTERING); } + bool has_entered_site() const { return (flags & (1 << ENTERED_SITE)) != 0; } bool can_enter_site() const { return !has_entered_site(); } |