aboutsummaryrefslogtreecommitdiffstats
path: root/ice40/chains.cc
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-09-30 16:29:26 +0100
committerDavid Shah <davey1576@gmail.com>2018-09-30 16:29:26 +0100
commita27c7b45dee834dbf7342df0acff257aab946f25 (patch)
tree7990187ff0eb0d7a66e2b4e82ebac0b7dea71dfe /ice40/chains.cc
parent6afc2c75fdf73493d63c511322ce06dbaa4ab0d7 (diff)
downloadnextpnr-a27c7b45dee834dbf7342df0acff257aab946f25.tar.gz
nextpnr-a27c7b45dee834dbf7342df0acff257aab946f25.tar.bz2
nextpnr-a27c7b45dee834dbf7342df0acff257aab946f25.zip
Refactor chain finder to its own file
Signed-off-by: David Shah <davey1576@gmail.com>
Diffstat (limited to 'ice40/chains.cc')
-rw-r--r--ice40/chains.cc40
1 files changed, 1 insertions, 39 deletions
diff --git a/ice40/chains.cc b/ice40/chains.cc
index e8a7ab17..fb361d2d 100644
--- a/ice40/chains.cc
+++ b/ice40/chains.cc
@@ -21,6 +21,7 @@
#include <algorithm>
#include <vector>
#include "cells.h"
+#include "chain_utils.h"
#include "design_utils.h"
#include "log.h"
#include "place_common.h"
@@ -28,45 +29,6 @@
NEXTPNR_NAMESPACE_BEGIN
-struct CellChain
-{
- std::vector<CellInfo *> cells;
-};
-
-// Generic chain finder
-template <typename F1, typename F2, typename F3>
-std::vector<CellChain> find_chains(const Context *ctx, F1 cell_type_predicate, F2 get_previous, F3 get_next,
- size_t min_length = 2)
-{
- std::set<IdString> chained;
- std::vector<CellChain> chains;
- for (auto cell : sorted(ctx->cells)) {
- if (chained.find(cell.first) != chained.end())
- continue;
- CellInfo *ci = cell.second;
- if (cell_type_predicate(ctx, ci)) {
- CellInfo *start = ci;
- CellInfo *prev_start = ci;
- while (prev_start != nullptr) {
- start = prev_start;
- prev_start = get_previous(ctx, start);
- }
- CellChain chain;
- CellInfo *end = start;
- while (end != nullptr) {
- chain.cells.push_back(end);
- end = get_next(ctx, end);
- }
- if (chain.cells.size() >= min_length) {
- chains.push_back(chain);
- for (auto c : chain.cells)
- chained.insert(c->name);
- }
- }
- }
- return chains;
-}
-
class ChainConstrainer
{
private: