FPGA Assembly

FASM 是一种文件格式,用于指定 FPGA 比特流中需要置1或清0的位。FASM 的设计初衷是提供一个中间层,令 FPGA 布局布线工具无需关心实际运行的 FPGA 比特流文件格式而工作。FASM 文件格式具有以下特性:

  • 从文件中删除任意一行都不会影响其有效性(注:这里的“有效性”指的是能正常运作,即删除的一行不会影响其他行的功能,其他基于行的操作也不会影响有效性,如连接和排序等)。
  • 允许创建带有人或计算机可读注释(comment)的注解(annotation)。
  • 拥有用于表示查找表初始位/内存/其他大型数据数组的语法糖。
  • 拥有书写规范格式。
  • 不依赖于任何特定的比特流文件格式。
workflow

FASM 的语法特性

下面从 FASM 的行、注解、语法规则、格式规范四个方面介绍 FASM 的语法特性。

FASM 的行

根据 FASM 文件格式的定义,FASM 不支持跨行的表示。下面给出几个例子。

启用特性的规范

# Set a single feature bit to 1 (with an implicit 1)
INT_L_X10Y146.SW6BEG0.WW2END0
CLBLL_L_X12Y124.SLICEL_X0.BLUT.INIT[17]

推荐的比特数组

# Setting a bitarray
CLBLL_R_X13Y132.SLICEL_X0.ALUT.INIT[63:32] = 32'b11110000111100001111000011110000

允许的高级变化

# The bitarray syntax also allows explicit 1 and explicit 0, if verbosity is desired.
# An explicit 1 is the same as an implicit 1.
INT_L_X10Y146.SW6BEG0.WW2END0 = 1
CLBLL_L_X12Y124.SLICEL_X0.BLUT.INIT[17] = 1
# Explicit bit range to 1
INT_L_X10Y146.SW6BEG0.WW2END0[0:0] = 1'b1
CLBLL_L_X12Y124.SLICEL_X0.BLUT.INIT[17:17] = 1'b1

# An explicit 0 has no effect on the bitstream output.
INT_L_X10Y146.SW6BEG0.WW2END0 = 0
CLBLL_L_X12Y124.SLICEL_X0.BLUT.INIT[17] = 0
# Explicit bit range to 0
INT_L_X10Y146.SW6BEG0.WW2END0[0:0] = 1'b0
CLBLL_L_X12Y124.SLICEL_X0.BLUT.INIT[17:17] = 1'b0

FASM 的注解

注解不会改变 FASM 的输出结果。注解可以与 FASM 特性一起放在一行中,也可以单独放在一行中。与 FASM 特性在同一行的注解与该特性相关联,其他地方的注解与 FASM 文件相关联。下面是注解的实例。

# Annotation on a FASM feature
INT_L_X10Y146.SW6BEG0.WW2END0 { .attr = "" }
INT_L_X10Y146.SW6BEG0.WW2END0 { .filename = "/a/b/c.txt" }
INT_L_X10Y146.SW6BEG0.WW2END0 { module = "top", file = "/a/b/d.txt", line_number = "123" }

# Annotation by itself
{ .top_module = "/a/b/c/d.txt" }

# Annotation with FASM feature and comment
INT_L_X10Y146.SW6BEG0.WW2END0 { .top_module = "/a/b/c/d.txt" } # This is a comment

FASM 的语法规则

Identifier ::= [a-zA-Z] [0-9a-zA-Z]*
Feature ::= Identifier ( '.' Identifier )*
S ::= #x9 | #x20

DecimalValue ::= [0-9_]*
HexidecimalValue ::= [0-9a-fA-F_]+
OctalValue ::= [0-7_]+
BinaryValue ::= [01_]+

VerilogValue ::= (( DecimalValue? S* "'" ( 'h' S* HexidecimalValue | 'b' S* BinaryValue | 'd' S*  DecimalValue | 'o' S* OctalValue ) | DecimalValue )

FeatureAddress ::= '[' DecimalValue (':' DecimalValue)? ']'

Any ::= [^#xA#]
Comment ::= '#' Any*

AnnotationName ::= [.a-zA-Z] [_0-9a-zA-Z]*
NonEscapeCharacters ::= [^\"]
EscapeSequences ::= '\\' | '\"'
Annotation ::= AnnotationName S* '=' S* '"' (NonEscapeCharacters | EscapeSequences)* '"'
Annotations ::= '{' S* Annotation ( ',' S* Annotation )* S* '}'

SetFasmFeature ::= Feature FeatureAddress? S* ('=' S* VerilogValue)?
FasmLine ::= S* SetFasmFeature? S* Annotations? S* Comment?

FASM 的格式规范

  1. 扁平化任何大于1的FeatureAddress
    • 对于FeatureAddress宽度大于1的 SetFasmFeature行,SetFasmFeature为原FeatureAdress的宽度。
    • 当扁平化时,如果扁平化后的地址为0,则不发出该地址。
  2. 移除所有的注释和注解。
  3. 如果FeatureValue为0,则移除该 FASM 行。
  4. 如果FeatureValue为1,如果Feature的地址不是0,则只输出FeatureFeatureAdress
  5. 删除任何不修改默认比特流功能的行,比如赛灵思部件中的伪 PIP。
  6. 对 FASM 文件进行行排序。

FASM的语句含义

在 FASM 文件中启用某个特性的行由SetFasmFeature进行定义。SetFasmFeature解析有三部分,要设置的特性Feature,要设置的特性中的地址FeatureAddress和特性的值FeatureValue。其中FeatureAddressFeatureValue都是可选的。

YYYY.XXXXX [A:B] =C
Feature FeatureAddress FeatureValue
Required Optional Optional

FASM的特性

Feature应该在比特流中唯一地指定一个特性。如果该特性在 FPGA 元素中重复出现,则需要前缀标识符来唯一地标识该特性所在的位置。

例如,所有的 SLICE 分片都有 ALUT,但是,每个 CLBLL_L 块实际上有两个 SLICEL,并且许多7系列 FPGA 带有 CLBLL_L 块。因此,需要一个唯一的路径来指定正在设置哪个分片,以及正在设置分片中的哪个 SLICEL。

FASM的特性地址与特性值

如果没有指定FeatureAddress,则默认选择的地址为0,如果未指定FeatureValue,则默认设定该值为1。

如果FeatureAddress被指定为一个特定的位而不是一个范围(例如“[5]”),那么FeatureAddress宽度必须是1位宽(例如0或1)。如果FeatureAddress是一个范围(例如“[15:0]”),那么FeatureValue宽度必须等于或小于FeatureAddress宽度。指定一个比FeatureAddress宽的FeatureValue是无效的。例如,如果FeatureAddress为[15:0],则地址宽度为16位,而FeatureValue必须小于等于16位。因此,FeatureValue16'hFFFF是有效的,但FeatureValue17'h10000是无效的。

FeatureAddress大于1位时,在启用或禁用该特性之前,将对每个特定地址的FeatureValue进行移位和掩码。所以对于一个[7:4]的FeatureAddress,地址4的特性被设置为一个值(FeatureValue >> 0) & 1,地址5的特征设置值为(FeatureValue >> 1) & 1,等等。

如果某个特征的值为1,则输出的比特流必须清除并置位指定的比特位。如果特征的值为0,则不会对默认比特流进行更改。

注意,没有 FASM 特征行并不意味着该特征被设置为0。它只意味着相关的比特是从特定于实现的默认比特流中使用的。

posted @ 2025-02-24 15:17  WenbinTeng  阅读(21)  评论(0)    收藏  举报