Meaning of a FASM line

Simplified SetFasmFeature

YYYY.XXXXX

[A:B]

= C

Feature

FeatureAddress

FeatureValue

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.