aboutsummaryrefslogtreecommitdiffstats
path: root/fpga_interchange/arch.h
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2021-09-27 17:50:55 +0100
committerGitHub <noreply@github.com>2021-09-27 17:50:55 +0100
commit535b2490c422f2343e97404c7c304c71b549e3a3 (patch)
tree0c9a4e687fccf488fd8a0f4df58103f4de8eea8a /fpga_interchange/arch.h
parent9782a46a9b4edb24cc73ea65f1ad7697ed74ab41 (diff)
parentea489f6d934ac6e649bcd81e10856e809f6b30d2 (diff)
downloadnextpnr-535b2490c422f2343e97404c7c304c71b549e3a3.tar.gz
nextpnr-535b2490c422f2343e97404c7c304c71b549e3a3.tar.bz2
nextpnr-535b2490c422f2343e97404c7c304c71b549e3a3.zip
Merge pull request #812 from antmicro/MacroCells
Convert macros to clusters for better placement
Diffstat (limited to 'fpga_interchange/arch.h')
-rw-r--r--fpga_interchange/arch.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/fpga_interchange/arch.h b/fpga_interchange/arch.h
index 7873a8ec..482bf911 100644
--- a/fpga_interchange/arch.h
+++ b/fpga_interchange/arch.h
@@ -720,6 +720,7 @@ struct Arch : ArchAPI<ArchRanges>
// Clusters
void pack_cluster();
void prepare_cluster(const ClusterPOD *cluster, uint32_t index);
+ void prepare_macro_cluster(const ClusterPOD *cluster, uint32_t index);
dict<ClusterId, Cluster> clusters;
// User constraints
@@ -857,8 +858,7 @@ struct Arch : ArchAPI<ArchRanges>
return true;
}
const TileStatus &tile_status = iter->second;
- const CellInfo *cell = tile_status.boundcells[bel.index];
-
+ CellInfo *cell = tile_status.boundcells[bel.index];
auto &bel_data = bel_info(chip_info, bel);
auto &site_status = get_site_status(tile_status, bel_data);
@@ -899,6 +899,10 @@ struct Arch : ArchAPI<ArchRanges>
ArcBounds getClusterBounds(ClusterId cluster) const override;
Loc getClusterOffset(const CellInfo *cell) const override;
bool isClusterStrict(const CellInfo *cell) const override;
+ bool normal_cluster_placement(const Context *, const Cluster &, const ClusterPOD &, CellInfo *, BelId,
+ std::vector<std::pair<CellInfo *, BelId>> &) const;
+ bool macro_cluster_placement(const Context *, const Cluster &, const ClusterPOD &, CellInfo *, BelId,
+ std::vector<std::pair<CellInfo *, BelId>> &) const;
bool getClusterPlacement(ClusterId cluster, BelId root_bel,
std::vector<std::pair<CellInfo *, BelId>> &placement) const override;