Meaning of a FASM line¶
YYYY.XXXXX |
[A:B] |
= C |
---|---|---|
|
|
|
Required |
Optional |
Optional |
Each line of a FASM file that enables a feature is defined by a SetFasmFeature
. Table 1 provides a simplified version of SetFasmFeature
parse. A SetFasmFeature
parse has three parts, the feature to be set (Feature
), the address within the feature to be set (FeatureAddress
) and the value of the feature (FeatureValue
). Both the FeatureAddress
and FeatureValue
are optional.
When a FASM file declares that a feature is to be enabled or disabled, then specific bits in the bitstream will be cleared or set.
This section describes how the state of the bits are determined.
Feature¶
The Feature
should uniquely specify a feature within the bitstream. If the feature is repeated across FPGA elements, a prefix identifier is required to uniquely identify where a feature is located.
For example all SLICEL tiles have ALUT.INIT feature, however each tile CLBLL_L tile actually have two SLICEL, and there are many CLBLL_L tiles with a 7-series FPGA. So a unique path would required to both clarify which tile is being set, and which SLICEL within the tile is being set.
FeatureAddress and FeatureValue¶
If the FeatureAddress
is not specified, then the address selected is 0.
If the FeatureValue
is not specified, then the value is 1.
If the FeatureAddress
is specified as a specific bit rather than a range (e.g. “[5]”), then the FeatureValue
width must be 1-bit wide (e.g. 0 or 1). If the FeatureAddress
is a range (e.g. “[15:0]”), then the FeatureValue
width must be equal or less than the FeatureAddress
width. It is invalid to specific a FeatureValue
wider than the FeatureAddress
.
For example, if the FeatureAddress
was [15:0], then the address width is 16 bits, and the FeatureValue
must be 16 bits or less. So a FeatureValue
of 16’hFFFF is valid, but a FeatureValue
of 17’h10000 is invalid.
When the FeatureAddress
is wider than 1 bit, the FeatureValue
is shifted and masked for each specific address before enabling or disabling the feature. So for a FeatureAddress
of [7:4], the feature at address 4 is set with a value of (FeatureValue
>> 0) & 1, and the feature at address 5 is set with a value of (FeatureValue
>> 1) & 1, etc.
If the value of a feature is 1, then the output bitstream must clear and set all bits as specified. If the value of a feature is 0, then no change to the “default” bitstream is made.
Note that the absence of a FASM feature line does not imply that the feature is set to 0. It only means that the relevant bits are used from the implementation specific “default” bitstream.