Update docs with API changes

Signed-off-by: D. Shah <dave@ds0.me>
This commit is contained in:
D. Shah 2021-02-08 11:08:45 +00:00
parent 9deb9e6e85
commit 697c4fd08b

View File

@ -1,6 +1,35 @@
Each architecture must implement the following types and APIs. Each architecture must implement the following types and APIs.
The syntax `const_range<T>` is used to denote anything that has a `begin()` and `end()` method that return const forward iterators. This can be a `std::list<T>`, `std::vector<T>`, a (const) reference to those, or anything else that behaves in a similar way. Architectures can either inherit from `ArchAPI<ArchRanges>`, which is a pure virtual description of the architecture API; or `BaseArch<ArchRanges>` which provides some default implementations described below.
`ArchRanges` is a `struct` of `using`s that allows arches to return custom range types. These ranges can be anything that has a `begin()` and `end()` method that return const forward iterators. This can be a `std::list<T>`, `std::vector<T>`, a (const) reference to those, or anything else that behaves in a similar way.
The contents of `ArchRanges` is as follows:
| Type | Range of |
|---------------------------|----------------------------------|
|`ArchArgsT` | N/A (struct of device params) |
|`AllBelsRangeT` | `BelId` |
|`TileBelsRangeT` | `BelId` |
|`BelAttrsRangeT` | std::pair<IdString, std::string> |
|`BelPinsRangeT` | `IdString` |
|`AllWiresRangeT` | `WireId` |
|`DownhillPipRangeT` | `PipId` |
|`UphillPipRangeT` | `PipId` |
|`WireBelPinRangeT` | `BelPin` |
|`AllPipsRangeT` | `PipId` |
|`PipAttrsRangeT` | std::pair<IdString, std::string> |
|`AllGroupsRangeT` | `GroupId` |
|`GroupBelsRangeT` | `BelId` |
|`GroupWiresRangeT` | `WireId` |
|`GroupPipsRangeT` | `PipId` |
|`GroupGroupsRangeT` | `GroupId` |
|`DecalGfxRangeT` | `GraphicElement` |
|`CellTypeRangeT` | `IdString` |
|`BelBucketRangeT` | `BelBucketRange` |
|`BucketBelRangeT` | `BelId` |
The functions that return a particular type are described below
archdefs.h archdefs.h
========== ==========
@ -84,6 +113,8 @@ Return the `ArchArgs` used to construct this object.
Return an internal IdString representation of the ArchArgs that was used to construct this object. Return an internal IdString representation of the ArchArgs that was used to construct this object.
*BaseArch default: returns empty IdString*
### int getGridDimX() const ### int getGridDimX() const
Get grid X dimension. All bels and pips must have Y coordinates in the range `0 .. getGridDimX()-1` (inclusive). Get grid X dimension. All bels and pips must have Y coordinates in the range `0 .. getGridDimX()-1` (inclusive).
@ -100,17 +131,23 @@ Get Z dimension for the specified tile for bels. All bels with at specified X an
Get Z dimension for the specified tile for pips. All pips with at specified X and Y coordinates must have a Z coordinate in the range `0 .. getTileDimZ(X,Y)-1` (inclusive). Get Z dimension for the specified tile for pips. All pips with at specified X and Y coordinates must have a Z coordinate in the range `0 .. getTileDimZ(X,Y)-1` (inclusive).
*BaseArch default: returns 1*
### char getNameDelimiter() const ### char getNameDelimiter() const
Returns a delimiter that can be used to build up bel, wire and pip names out of hierarchical components (such as tiles and sites) to avoid the high memory usage of storing full names for every object. Returns a delimiter that can be used to build up bel, wire and pip names out of hierarchical components (such as tiles and sites) to avoid the high memory usage of storing full names for every object.
*BaseArch default: returns ' '*
Cell Methods Cell Methods
----------- -----------
### const\_range\<IdString\> getCellTypes() const ### CellTypeRangeT getCellTypes() const
Get list of cell types that this architecture accepts. Get list of cell types that this architecture accepts.
*BaseArch default: returns list derived from bel types set up by `init_cell_types()`*
Bel Methods Bel Methods
----------- -----------
@ -130,7 +167,7 @@ Get the X/Y/Z location of a given bel. Each bel must have a unique X/Y/Z locatio
Lookup a bel by its X/Y/Z location. Lookup a bel by its X/Y/Z location.
### const\_range\<BelId\> getBelsByTile(int x, int y) const ### TileBelsRangeT getBelsByTile(int x, int y) const
Return a list of all bels at the give X/Y location. Return a list of all bels at the give X/Y location.
@ -138,35 +175,49 @@ Return a list of all bels at the give X/Y location.
Returns true if the given bel is a global buffer. A global buffer does not "pull in" other cells it drives to be close to the location of the global buffer. Returns true if the given bel is a global buffer. A global buffer does not "pull in" other cells it drives to be close to the location of the global buffer.
*BaseArch default: returns false*
### uint32\_t getBelChecksum(BelId bel) const ### uint32\_t getBelChecksum(BelId bel) const
Return a (preferably unique) number that represents this bel. This is used in design state checksum calculations. Return a (preferably unique) number that represents this bel. This is used in design state checksum calculations.
*BaseArch default: returns `std::hash` of `BelId` cast to `uint32_t`*
### void bindBel(BelId bel, CellInfo \*cell, PlaceStrength strength) ### void bindBel(BelId bel, CellInfo \*cell, PlaceStrength strength)
Bind a given bel to a given cell with the given strength. Bind a given bel to a given cell with the given strength.
This method must also update `cell->bel` and `cell->belStrength`. This method must also update `cell->bel` and `cell->belStrength`.
*BaseArch default: binds using `base_bel2cell`*
### void unbindBel(BelId bel) ### void unbindBel(BelId bel)
Unbind a bel. Unbind a bel.
This method must also update `CellInfo::bel` and `CellInfo::belStrength`. This method must also update `CellInfo::bel` and `CellInfo::belStrength`.
*BaseArch default: unbinds using `base_bel2cell`*
### bool checkBelAvail(BelId bel) const ### bool checkBelAvail(BelId bel) const
Returns true if the bel is available. A bel can be unavailable because it is bound, or because it is exclusive to some other resource that is bound. Returns true if the bel is available. A bel can be unavailable because it is bound, or because it is exclusive to some other resource that is bound.
*BaseArch default: returns `getBoundBelCell(bel) == nullptr`*
### CellInfo \*getBoundBelCell(BelId bel) const ### CellInfo \*getBoundBelCell(BelId bel) const
Return the cell the given bel is bound to, or nullptr if the bel is not bound. Return the cell the given bel is bound to, or nullptr if the bel is not bound.
*BaseArch default: returns entry in `base_bel2cell`*
### CellInfo \*getConflictingBelCell(BelId bel) const ### CellInfo \*getConflictingBelCell(BelId bel) const
If the bel is unavailable, and unbinding a single cell would make it available, then this method must return that cell. If the bel is unavailable, and unbinding a single cell would make it available, then this method must return that cell.
### const\_range\<BelId\> getBels() const *BaseArch default: returns `getBoundBelCell(bel)`*
### AllBelsRangeT getBels() const
Return a list of all bels on the device. Return a list of all bels on the device.
@ -174,11 +225,13 @@ Return a list of all bels on the device.
Return the type of a given bel. Return the type of a given bel.
### const\_range\<std\:\:pair\<IdString, std::string\>\> getBelAttrs(BelId bel) const ### BelAttrsRangeT getBelAttrs(BelId bel) const
Return the attributes for that bel. Bel attributes are only informal. They are displayed by the GUI but are otherwise Return the attributes for that bel. Bel attributes are only informal. They are displayed by the GUI but are otherwise
unused. An implementation may simply return an empty range. unused. An implementation may simply return an empty range.
*BaseArch default: returns default-constructed range*
### WireId getBelPinWire(BelId bel, IdString pin) const ### WireId getBelPinWire(BelId bel, IdString pin) const
Return the wire connected to the given bel pin. Return the wire connected to the given bel pin.
@ -187,7 +240,7 @@ Return the wire connected to the given bel pin.
Return the type (input/output/inout) of the given bel pin. Return the type (input/output/inout) of the given bel pin.
### const\_range\<IdString\> getBelPins(BelId bel) const ### BelPinsRangeT getBelPins(BelId bel) const
Return a list of all pins on that bel. Return a list of all pins on that bel.
@ -208,15 +261,21 @@ Get the type of a wire. The wire type is purely informal and
isn't used by any of the core algorithms. Implementations may isn't used by any of the core algorithms. Implementations may
simply return `IdString()`. simply return `IdString()`.
### const\_range\<std\:\:pair\<IdString, std::string\>\> getWireAttrs(WireId wire) const *BaseArch default: returns empty IdString*
### WireAttrsRangeT getWireAttrs(WireId wire) const
Return the attributes for that wire. Wire attributes are only informal. They are displayed by the GUI but are otherwise Return the attributes for that wire. Wire attributes are only informal. They are displayed by the GUI but are otherwise
unused. An implementation may simply return an empty range. unused. An implementation may simply return an empty range.
*BaseArch default: returns default-constructed range*
### uint32\_t getWireChecksum(WireId wire) const ### uint32\_t getWireChecksum(WireId wire) const
Return a (preferably unique) number that represents this wire. This is used in design state checksum calculations. Return a (preferably unique) number that represents this wire. This is used in design state checksum calculations.
*BaseArch default: returns `std::hash` of `WireId` cast to `uint32_t`*
### void bindWire(WireId wire, NetInfo \*net, PlaceStrength strength) ### void bindWire(WireId wire, NetInfo \*net, PlaceStrength strength)
Bind a wire to a net. This method must be used when binding a wire that is driven by a bel pin. Use `binPip()` Bind a wire to a net. This method must be used when binding a wire that is driven by a bel pin. Use `binPip()`
@ -224,39 +283,51 @@ when binding a wire that is driven by a pip.
This method must also update `net->wires`. This method must also update `net->wires`.
*BaseArch default: binds using `base_wire2net`*
### void unbindWire(WireId wire) ### void unbindWire(WireId wire)
Unbind a wire. For wires that are driven by a pip, this will also unbind the driving pip. Unbind a wire. For wires that are driven by a pip, this will also unbind the driving pip.
This method must also update `NetInfo::wires`. This method must also update `NetInfo::wires`.
*BaseArch default: unbinds using `base_wire2net`*
### bool checkWireAvail(WireId wire) const ### bool checkWireAvail(WireId wire) const
Return true if the wire is available, i.e. can be bound to a net. Return true if the wire is available, i.e. can be bound to a net.
*BaseArch default: returns `getBoundWireNet(wire) == nullptr`*
### NetInfo \*getBoundWireNet(WireId wire) const ### NetInfo \*getBoundWireNet(WireId wire) const
Return the net a wire is bound to. Return the net a wire is bound to.
*BaseArch default: returns entry in `base_wire2net`*
### WireId getConflictingWireWire(WireId wire) const ### WireId getConflictingWireWire(WireId wire) const
If this returns a non-WireId(), then unbinding that wire If this returns a non-WireId(), then unbinding that wire
will make the given wire available. will make the given wire available.
*BaseArch default: returns `wire`*
### NetInfo \*getConflictingWireNet(WireId wire) const ### NetInfo \*getConflictingWireNet(WireId wire) const
If this returns a non-nullptr, then unbinding that entire net If this returns a non-nullptr, then unbinding that entire net
will make the given wire available. will make the given wire available.
*BaseArch default: returns `getBoundWireNet(wire)`*
### DelayInfo getWireDelay(WireId wire) const ### DelayInfo getWireDelay(WireId wire) const
Get the delay for a wire. Get the delay for a wire.
### const\_range\<WireId\> getWires() const ### AllWiresRangeT getWires() const
Get a list of all wires on the device. Get a list of all wires on the device.
### const\_range\<BelPin\> getWireBelPins(WireId wire) const ### WireBelPinRangeT getWireBelPins(WireId wire) const
Get a list of all bel pins attached to a given wire. Get a list of all bel pins attached to a given wire.
@ -283,11 +354,15 @@ Get the name for a pip. (Pip names must be unique.)
Get the type of a pip. Pip types are purely informal and Get the type of a pip. Pip types are purely informal and
implementations may simply return `IdString()`. implementations may simply return `IdString()`.
### const\_range\<std\:\:pair\<IdString, std::string\>\> getPipAttrs(PipId pip) const *BaseArch default: returns empty IdString*
### PipAttrsRangeT getPipAttrs(PipId pip) const
Return the attributes for that pip. Pip attributes are only informal. They are displayed by the GUI but are otherwise Return the attributes for that pip. Pip attributes are only informal. They are displayed by the GUI but are otherwise
unused. An implementation may simply return an empty range. unused. An implementation may simply return an empty range.
*BaseArch default: returns default-constructed range*
### Loc getPipLocation(PipId pip) const ### Loc getPipLocation(PipId pip) const
Get the X/Y/Z location of a given pip. Pip locations do not need to be unique, and in most cases they aren't. So Get the X/Y/Z location of a given pip. Pip locations do not need to be unique, and in most cases they aren't. So
@ -297,18 +372,24 @@ for pips a X/Y/Z location refers to a group of pips, not an individual pip.
Return a (preferably unique) number that represents this pip. This is used in design state checksum calculations. Return a (preferably unique) number that represents this pip. This is used in design state checksum calculations.
*BaseArch default: returns `std::hash` of `WireId` cast to `uint32_t`*
### void bindPip(PipId pip, NetInfo \*net, PlaceStrength strength) ### void bindPip(PipId pip, NetInfo \*net, PlaceStrength strength)
Bid a pip to a net. This also bind the destination wire of that pip. Bid a pip to a net. This also bind the destination wire of that pip.
This method must also update `net->wires`. This method must also update `net->wires`.
*BaseArch default: binds using `base_pip2net` and `base_wire2net`*
### void unbindPip(PipId pip) ### void unbindPip(PipId pip)
Unbind a pip and the wire driven by that pip. Unbind a pip and the wire driven by that pip.
This method must also update `NetInfo::wires`. This method must also update `NetInfo::wires`.
*BaseArch default: unbinds using `base_pip2net` and `base_wire2net`*
### bool checkPipAvail(PipId pip) const ### bool checkPipAvail(PipId pip) const
Returns true if the given pip is available to be bound to a net. Returns true if the given pip is available to be bound to a net.
@ -317,21 +398,29 @@ Users must also check if the pip destination wire is available
with `checkWireAvail(getPipDstWire(pip))` before binding the with `checkWireAvail(getPipDstWire(pip))` before binding the
pip to a net. pip to a net.
*BaseArch default: returns `getBoundPipNet(pip) == nullptr`*
### NetInfo \*getBoundPipNet(PipId pip) const ### NetInfo \*getBoundPipNet(PipId pip) const
Return the net this pip is bound to. Return the net this pip is bound to.
*BaseArch default: returns entry in `base_pip2net`*
### WireId getConflictingPipWire(PipId pip) const ### WireId getConflictingPipWire(PipId pip) const
If this returns a non-WireId(), then unbinding that wire If this returns a non-WireId(), then unbinding that wire
will make the given pip available. will make the given pip available.
*BaseArch default: returns empty `WireId()`*
### NetInfo \*getConflictingPipNet(PipId pip) const ### NetInfo \*getConflictingPipNet(PipId pip) const
If this returns a non-nullptr, then unbinding that entire net If this returns a non-nullptr, then unbinding that entire net
will make the given pip available. will make the given pip available.
### const\_range\<PipId\> getPips() const *BaseArch default: returns empty `getBoundPipNet(pip)`*
### AllPipsRangeT getPips() const
Return a list of all pips on the device. Return a list of all pips on the device.
@ -350,11 +439,11 @@ anti-parallel pips.
Get the delay for a pip. Get the delay for a pip.
### const\_range\<PipId\> getPipsDownhill(WireId wire) const ### DownhillPipRangeT getPipsDownhill(WireId wire) const
Get all pips downhill of a wire, i.e. pips that use this wire as source wire. Get all pips downhill of a wire, i.e. pips that use this wire as source wire.
### const\_range\<PipId\> getPipsUphill(WireId wire) const ### DownhillPipRangeT getPipsUphill(WireId wire) const
Get all pips uphill of a wire, i.e. pips that use this wire as destination wire. Get all pips uphill of a wire, i.e. pips that use this wire as destination wire.
@ -365,30 +454,44 @@ Group Methods
Lookup a group by its name, which is a list of IdStrings joined by `getNameDelimiter()`. Lookup a group by its name, which is a list of IdStrings joined by `getNameDelimiter()`.
*BaseArch default: returns `GroupId()`*
### IdStringList getGroupName(GroupId group) const ### IdStringList getGroupName(GroupId group) const
Get the name for a group. (Group names must be unique.) Get the name for a group. (Group names must be unique.)
### const\_range\<GroupId\> getGroups() const *BaseArch default: returns `IdStringList()`*
### AllGroupsRangeT getGroups() const
Get a list of all groups on the device. Get a list of all groups on the device.
### const\_range\<BelId\> getGroupBels(GroupId group) const *BaseArch default: returns default-constructed range*
### GroupBelsRangeT getGroupBels(GroupId group) const
Get a list of all bels within a group. Get a list of all bels within a group.
### const\_range\<WireId\> getGroupWires(GroupId group) const *BaseArch default: asserts false as unreachable due to there being no groups*
### GroupWiresRangeT getGroupWires(GroupId group) const
Get a list of all wires within a group. Get a list of all wires within a group.
### const\_range\<PipId\> getGroupPips(GroupId group) const *BaseArch default: asserts false as unreachable due to there being no groups*
### GroupPipsRangeT getGroupPips(GroupId group) const
Get a list of all pips within a group. Get a list of all pips within a group.
### const\_range\<GroupId\> getGroupGroups(GroupId group) const *BaseArch default: asserts false as unreachable due to there being no groups*
### GroupGroupsRangeT getGroupGroups(GroupId group) const
Get a list of all groups within a group. Get a list of all groups within a group.
*BaseArch default: asserts false as unreachable due to there being no groups*
Delay Methods Delay Methods
------------- -------------
@ -437,6 +540,8 @@ Convert a `delay_t` to an integer for checksum calculations.
Overwrite or modify (in-place) the timing budget for a given arc. Returns a bool to indicate whether this was done. Overwrite or modify (in-place) the timing budget for a given arc. Returns a bool to indicate whether this was done.
*BaseArch default: returns false*
Flow Methods Flow Methods
------------ ------------
@ -455,29 +560,39 @@ run the router.
Graphics Methods Graphics Methods
---------------- ----------------
### const\_range\<GraphicElement\> getDecalGraphics(DecalId decal) const ###DecalGfxRangeT getDecalGraphics(DecalId decal) const
Return the graphic elements that make up a decal. Return the graphic elements that make up a decal.
The same decal must always produce the same list. If the graphics for The same decal must always produce the same list. If the graphics for
a design element changes, that element must return another decal. a design element changes, that element must return another decal.
*BaseArch default: asserts false as unreachable due to there being no decals*
### DecalXY getBelDecal(BelId bel) const ### DecalXY getBelDecal(BelId bel) const
Return the decal and X/Y position for the graphics representing a bel. Return the decal and X/Y position for the graphics representing a bel.
*BaseArch default: returns `DecalXY()`*
### DecalXY getWireDecal(WireId wire) const ### DecalXY getWireDecal(WireId wire) const
Return the decal and X/Y position for the graphics representing a wire. Return the decal and X/Y position for the graphics representing a wire.
*BaseArch default: returns `DecalXY()`*
### DecalXY getPipDecal(PipId pip) const ### DecalXY getPipDecal(PipId pip) const
Return the decal and X/Y position for the graphics representing a pip. Return the decal and X/Y position for the graphics representing a pip.
*BaseArch default: returns `DecalXY()`*
### DecalXY getGroupDecal(GroupId group) const ### DecalXY getGroupDecal(GroupId group) const
Return the decal and X/Y position for the graphics representing a group. Return the decal and X/Y position for the graphics representing a group.
*BaseArch default: returns `DecalXY()`*
Cell Delay Methods Cell Delay Methods
------------------ ------------------
@ -486,18 +601,24 @@ Cell Delay Methods
Returns the delay for the specified path through a cell in the `&delay` argument. The method returns Returns the delay for the specified path through a cell in the `&delay` argument. The method returns
false if there is no timing relationship from `fromPort` to `toPort`. false if there is no timing relationship from `fromPort` to `toPort`.
*BaseArch default: returns false*
### TimingPortClass getPortTimingClass(const CellInfo \*cell, IdString port, int &clockInfoCount) const ### TimingPortClass getPortTimingClass(const CellInfo \*cell, IdString port, int &clockInfoCount) const
Return the _timing port class_ of a port. This can be a register or combinational input or output; clock input or Return the _timing port class_ of a port. This can be a register or combinational input or output; clock input or
output; general startpoint or endpoint; or a port ignored for timing purposes. For register ports, clockInfoCount is set output; general startpoint or endpoint; or a port ignored for timing purposes. For register ports, clockInfoCount is set
to the number of associated _clock edges_ that can be queried by getPortClockingInfo. to the number of associated _clock edges_ that can be queried by getPortClockingInfo.
*BaseArch default: returns `TMG_IGNORE`*
### TimingClockingInfo getPortClockingInfo(const CellInfo \*cell, IdString port, int index) const ### TimingClockingInfo getPortClockingInfo(const CellInfo \*cell, IdString port, int index) const
Return the _clocking info_ (including port name of clock, clock polarity and setup/hold/clock-to-out times) of a Return the _clocking info_ (including port name of clock, clock polarity and setup/hold/clock-to-out times) of a
port. Where ports have more than one clock edge associated with them (such as DDR outputs), `index` can be used to obtain port. Where ports have more than one clock edge associated with them (such as DDR outputs), `index` can be used to obtain
information for all edges. `index` must be in [0, clockInfoCount), behaviour is undefined otherwise. information for all edges. `index` must be in [0, clockInfoCount), behaviour is undefined otherwise.
*BaseArch default: asserts false as unreachable*
Bel Buckets Methods Bel Buckets Methods
------------------- -------------------
@ -521,30 +642,42 @@ Strict legality step will enforce those differences, along with additional
local constraints. `isValidBelForCell`, `isValidBelForCellType`, and local constraints. `isValidBelForCell`, `isValidBelForCellType`, and
`isBelLocationValid` are used to enforce strict legality checks. `isBelLocationValid` are used to enforce strict legality checks.
### const\_range\<BelBucketId\> getBelBuckets() const ### BelBucketRangeT getBelBuckets() const
Return a list of all bel buckets on the device. Return a list of all bel buckets on the device.
*BaseArch default: the list of buckets created by calling `init_bel_buckets()`, based on calls to `getBelBucketForBel` for all bels*
### IdString getBelBucketName(BelBucketId bucket) const ### IdString getBelBucketName(BelBucketId bucket) const
Return the name of this bel bucket. Return the name of this bel bucket.
*BaseArch default: `bucket`, if `BelBucketId` is a typedef of `IdString`*
### BelBucketId getBelBucketByName(IdString bucket\_name) const ### BelBucketId getBelBucketByName(IdString bucket\_name) const
Return the BelBucketId for the specified bucket name. Return the BelBucketId for the specified bucket name.
*BaseArch default: `bucket_name`, if `BelBucketId` is a typedef of `IdString`*
### BelBucketId getBelBucketForBel(BelId bel) const ### BelBucketId getBelBucketForBel(BelId bel) const
Returns the bucket for a particular bel. Returns the bucket for a particular bel.
*BaseArch default: `getBelBucketForCellType(getCellType(bel))`*
### BelBucketId getBelBucketForCell(IdString cell\_type) const ### BelBucketId getBelBucketForCell(IdString cell\_type) const
Returns the bel bucket for a particular cell type. Returns the bel bucket for a particular cell type.
### const\_range\<BelId\> getBelsInBucket(BelBucketId bucket) const *BaseArch default: `getBelBucketByName(cell_type)`*
### BucketBelRangeT getBelsInBucket(BelBucketId bucket) const
Return the list of bels within a bucket. Return the list of bels within a bucket.
*BaseArch default: the list of bels in the bucket created by calling `init_bel_buckets()`*
Placer Methods Placer Methods
-------------- --------------
@ -554,17 +687,23 @@ Returns true if the given cell can be bound to the given bel. This check
should be fast, compared with isValidBelForCell. This check should always should be fast, compared with isValidBelForCell. This check should always
return the same value regardless if other cells are placed within the fabric. 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 ### bool isValidBelForCell(CellInfo \*cell, BelId bel) const
Returns true if the given cell can be bound to the given bel, considering 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 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. a certain number of different clock signals allowed for a group of bels.
*BaseArch default: returns true*
### bool isBelLocationValid(BelId bel) const ### bool isBelLocationValid(BelId bel) const
Returns true if a bell in the current configuration is valid, i.e. if Returns true if a bell in the current configuration is valid, i.e. if
`isValidBelForCell()` would return true for the current mapping. `isValidBelForCell()` would return true for the current mapping.
*BaseArch default: returns true*
### static const std::string defaultPlacer ### static const std::string defaultPlacer
Name of the default placement algorithm for the architecture, if Name of the default placement algorithm for the architecture, if