diff options
author | gatecat <gatecat@ds0.me> | 2022-02-06 14:19:26 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-06 14:19:26 +0000 |
commit | 74c99f9195eeb47d106ca74b7abb894cfd47cc03 (patch) | |
tree | d59b272fc25da002868ae676f337a05a62312205 /generic | |
parent | dad0ef4ab7f5b65bc19cb70e8bff83cc085bfae3 (diff) | |
parent | e5bfff6e9fbbbc743c504365ab41e4112aefb6d6 (diff) | |
download | nextpnr-74c99f9195eeb47d106ca74b7abb894cfd47cc03.tar.gz nextpnr-74c99f9195eeb47d106ca74b7abb894cfd47cc03.tar.bz2 nextpnr-74c99f9195eeb47d106ca74b7abb894cfd47cc03.zip |
Merge pull request #908 from YosysHQ/gatecat/generic-fanout-block
viaduct: Allow constraining only cascades without fanout
Diffstat (limited to 'generic')
-rw-r--r-- | generic/viaduct_helpers.cc | 4 | ||||
-rw-r--r-- | generic/viaduct_helpers.h | 3 |
2 files changed, 5 insertions, 2 deletions
diff --git a/generic/viaduct_helpers.cc b/generic/viaduct_helpers.cc index 36bdd6be..e9f7fa60 100644 --- a/generic/viaduct_helpers.cc +++ b/generic/viaduct_helpers.cc @@ -82,7 +82,7 @@ void ViaductHelpers::remove_nextpnr_iobs(const pool<CellTypePort> &top_ports) } int ViaductHelpers::constrain_cell_pairs(const pool<CellTypePort> &src_ports, const pool<CellTypePort> &sink_ports, - int delta_z) + int delta_z, bool allow_fanout) { int constrained = 0; for (auto &cell : ctx->cells) { @@ -96,6 +96,8 @@ int ViaductHelpers::constrain_cell_pairs(const pool<CellTypePort> &src_ports, co continue; if (!src_ports.count(CellTypePort(ci.type, port.first))) continue; + if (!allow_fanout && port.second.net->users.size() > 1) + continue; for (auto &usr : port.second.net->users) { if (!sink_ports.count(CellTypePort(usr))) continue; diff --git a/generic/viaduct_helpers.h b/generic/viaduct_helpers.h index 8cba8411..cac22304 100644 --- a/generic/viaduct_helpers.h +++ b/generic/viaduct_helpers.h @@ -70,7 +70,8 @@ struct ViaductHelpers // expects a set of top-level port types void remove_nextpnr_iobs(const pool<CellTypePort> &top_ports); // Constrain cells with certain port connection patterns together with a fixed z-offset - int constrain_cell_pairs(const pool<CellTypePort> &src_ports, const pool<CellTypePort> &sink_ports, int delta_z); + int constrain_cell_pairs(const pool<CellTypePort> &src_ports, const pool<CellTypePort> &sink_ports, int delta_z, + bool allow_fanout = true); // Replace constants with given driving cells void replace_constants(CellTypePort vcc_driver, CellTypePort gnd_driver, const dict<IdString, Property> &vcc_params = {}, |