FPGA Assembly

news/2025/2/24 15:18:10/文章来源:https://www.cnblogs.com/wenbinteng/p/18734145

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 | #x20DecimalValue ::= [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。它只意味着相关的比特是从特定于实现的默认比特流中使用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889041.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink 实战之维表关联

生产应用中,经常遇到将实时 **流式数据** 与 **维表数据** 进行关联的场景。常见的维表关联方式有多种,本文对以下 3 种进行了实现,并对每种方法的优缺点进行了比较:1. 预加载维表 2. 异步 IO 3. 广播维表下面分别使用不同方式来完成维表 join 的实验,附源码和实时动效。F…

Sa2VA环境搭建推理测试

引子 Sa2VA模型通过结合SAM-2和LLaVA,将文本、图像和视频统一到共享的LLM标记空间中,能够在少量指令微调下执行多种任务,如图像/视频对话、指称分割和字幕生成。该模型在视频编辑和内容创作中展现出强大的性能,在相关基准任务中达到了SOTA水平。OK,那就让我们开始吧。一、…

20-bluecms代码审计、thinkphp相关知识cve和cnvd编号申请

1、对bluecms进行代码审计,分析复现文件上传、ssti模板注入、文件删除等漏洞 文件上传审计admin/tpl_manage.php 文件发现,在do_edit模块有三个参数(act = do_edit、tpl_name = 写入文件名称、tpl_content = 写入内容,且代码中未对文件名过滤,导致可以上传任意文件。查看对…

ios SDK AB 开关切换

在数据库的这个服务器 然后再ctest1数据库新建编辑器然后查询select* fromapp_config ac whereaccess_no = 12100186 //这个是应用IDand module = abSwitchand param_name = export_otel_ab查到后,把param_value改为B,或者A,然后回车,然后点击图中的保存 保存后等两分钟,…

CS Course Learning

【李宏毅】2024大语言模型课程 课程学习课程链接:https://speech.ee.ntu.edu.tw/~hylee/genai/2024-spring.php Bilibili相关视频链接:https://www.bilibili.com/video/BV1XS411w7qrGPT: Autoregressive model In-context LearningChain of Thoughts (CoT) Tree of Thoughts …

跟着狂神学markdown作业01天

markdown学习 标题 一共可以做六级标题 格式为#+空格+标题 几级标题就打几个空格 字体 粗体:hello,world 两边各加两个*号 斜体:hello,world 两边各加一个*号 粗体+斜体:hello,world 两边各加三个***号 删除效果:hello,world 引用选择狂神说java,走向人生巅峰(用>…

java知识面试day4

1.常见的关键字有哪些static:静态变量,静态变量被所有对象共享,在内存中只有一个副本。具有静态变量,静态方法块,静态代码块(在类加载时候被指执行一次),静态内部类:非静态内部类需要依赖外部实列,但静态内部类不需要。final 基本数据类型用final修饰不能修改,引用对象被…

[QOJ 8366] 火车旅行

毒瘤边化点,有人说非排列只需要加一些细节,但是这个题毒瘤在于非排列。 statement 给定一个长度为 \(n\) 的序列 \(a_i\)。 对于位置 \(x\) 和 \(y\):若 \(y < x\) 且 \(max_{y < i < x} a_i < min(a_x, a_y)\) 则位于 \(x\) 的棋子可以花费 \(L_x\) 的代价跳到…

uipath更新到最新版本2025.0.161出现严重问题

uipath更新到最新版本2025.0.161出现严重问题:1. 打开既有项目,会报CS0246错误2. 无法创建新项目,一直报无权限访问尝试办法:1. 重新安装uipath,未解决2. 删除项目重新添加,未解决3. 给账户添加最高权限,未解决 workaround:把项目从默认文件夹复制到其他盘(除了C盘外…

Python正则表达式之re.compile函数

​在Python编程语言中,re.compile函数是正则表达式模块(re)中的一个核心组件,它负责将文本形式的正则表达式编译成一个正则表达式对象。这个对象随后可以被用来执行高效的模式匹配操作,如查找、替换或者分割字符串等。理解并有效利用 re.compile对于编写高效且可维护的正则表…

Unity Addresable打包总结第二弹

前言 前文介绍了Addressables在本地打包是怎么使用,这里介绍下怎么打远程包,并且怎么做到打增量包,Lets Go! 远程包新建一个Group,将它的 BUild & Load Paths 改为Remote,并将RemoteRes资源文件夹塞入Remote Group,其中包含一个Capsule.prefab资源:在Addressabvles …

BUUCTF-RE-[2019红帽杯]easyRE

这道题很难,但是并不难在他的解题要用到的方法和技巧上,而是难在它的题目设计。做的过程中真的有一种闯关的感觉,非常有趣 首先我们通过对字符的定位我们可以来到sub_4009C6函数 __int64 sub_4009C6() {__int64 result; // raxint i; // [rsp+Ch] [rbp-114h]__int64 v2; // …