aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2021-02-16 11:52:16 +0000
committergatecat <gatecat@ds0.me>2021-02-16 13:31:36 +0000
commitc7c13cd95f7a25b2c8932ca00ad667ffca381c70 (patch)
tree222496d567bd217e6958660a1e1153a1b273ca36 /docs
parent815b57b9e1f0c0a7176d146a29cef763bebf343f (diff)
downloadnextpnr-c7c13cd95f7a25b2c8932ca00ad667ffca381c70.tar.gz
nextpnr-c7c13cd95f7a25b2c8932ca00ad667ffca381c70.tar.bz2
nextpnr-c7c13cd95f7a25b2c8932ca00ad667ffca381c70.zip
Remove isValidBelForCell
This Arch API dates from when we were first working out how to implement placement validity checking, and in practice is little used by the core parts of placer1/HeAP and the Arch implementation involves a lot of duplication with isBelLocationValid. In the short term; placement validity checking is better served by the combination of checkBelAvail and isValidBelForCellType before placement; followed by isBelLocationValid after placement (potentially after moving/swapping multiple cells). Longer term, removing this API makes things a bit cleaner for a new validity checking API. Signed-off-by: gatecat <gatecat@ds0.me>
Diffstat (limited to 'docs')
-rw-r--r--docs/archapi.md16
-rw-r--r--docs/coding.md2
2 files changed, 5 insertions, 13 deletions
diff --git a/docs/archapi.md b/docs/archapi.md
index 0f0e6181..fc943dfb 100644
--- a/docs/archapi.md
+++ b/docs/archapi.md
@@ -652,8 +652,8 @@ strict legality enforcement. It is not required that all bels within a bucket
are strictly equivelant.
Strict legality step will enforce those differences, along with additional
-local constraints. `isValidBelForCell`, `isValidBelForCellType`, and
-`isBelLocationValid` are used to enforce strict legality checks.
+local constraints. `isValidBelForCellType`, and `isBelLocationValid` are used
+to enforce strict legality checks.
### BelBucketRangeT getBelBuckets() const
@@ -702,18 +702,10 @@ return the same value regardless if other cells are placed within the fabric.
*BaseArch default: returns `cell_type == getBelType(bel)`*
-### bool isValidBelForCell(CellInfo \*cell, BelId bel) const
-
-Returns true if the given cell can be bound to the given bel, considering
-other bound resources. For example, this can be used if there is only
-a certain number of different clock signals allowed for a group of bels.
-
-*BaseArch default: returns true*
-
### bool isBelLocationValid(BelId bel) const
-Returns true if a bell in the current configuration is valid, i.e. if
-`isValidBelForCell()` would return true for the current mapping.
+Returns true if a bel in the current configuration is legal (for example,
+a flipflop's clock signal is correctly shared with all bels in a slice.)
*BaseArch default: returns true*
diff --git a/docs/coding.md b/docs/coding.md
index 355fe457..dc09bb3f 100644
--- a/docs/coding.md
+++ b/docs/coding.md
@@ -75,7 +75,7 @@ The job of the placer in nextpnr is to find a suitable bel for each cell in the
Placers might want to create their own indices of bels (for example, bels by type and location) to speed up the search.
-As nextpnr allows arbitrary constraints on bels for more advanced packer-free flows and complex real-world architectures; placements must be checked for legality using `isValidBelForCell` (before placement) or `isBelLocationValid` (after placement) and the placement rejected if invalid. For analytical placement algorithms; after creating a spread-out AP solution the legality of placing each cell needs to be checked. In practice, the cost of this is fairly low as the architecture should ensure these functions are as fast as possible.
+As nextpnr allows arbitrary constraints on bels for more advanced packer-free flows and complex real-world architectures; placements must be checked for legality using `isBelLocationValid` (after placement) and the placement rejected if invalid. For analytical placement algorithms; after creating a spread-out AP solution the legality of placing each cell needs to be checked. In practice, the cost of this is fairly low as the architecture should ensure these functions are as fast as possible.
There are several routes for timing information in the placer:
- sink `PortRef`s have a `budget` value annotated by calling `assign_budget` which is an estimate of the maximum delay that an arc may have