maat 使用手册

概述

maat 是⽤于Thor进⾏回归测试的⼆进制⼯具, 其集成了指定规则对比、lec检查、输出数据解析、特异性tcl脚本⽣ 成等⼀系列功能。本⽂旨在列举 maat 的简易使⽤⽅法及对应 case 的添加流程.


maat 基础使用教程

1. 环境配置与 case 准备

maat 的启动依赖于两个对象

* 综合工具 RainaSynth

一般来说, maat 将在 thor_submodule 或 thor_submodule 下的 regressioncases 目录中执行, 此时 maat 将尝试查找 thor_submodule 编译 出的 RainaSynth, 若查找失败, 则将使用系统默认的 raina(即 Thor 仓库历史最近版本)。

_images/maat_find_raina.png

用户也可以使用环境变量 RAINA_PATH 来指定综合工具 RainaSynth.

# 使用 export 导入环境变量, 建议将其写入 bashrc 文件, 便于在 cmd 中快速启动 maat
export RAINA_PATH={my_thor_path}/bin/RainaSynth

* 将要执行的 case 或 cases 目录

在一般情况下, maat 将在 thor_submodule 目录下执行或在 thor_submodule/regressioncases 目录下执行。 当处于 thor_submodule 时, maat 会尝试查找 regressioncases 目录.


2. maat 执行 case 示例

  • 默认以当前路径为 cases 路径, maat 会尝试查找 regressioncases 目录并递归地执行该目录下所有 case, 若未找到任何 case, 则检查当前目录是否在一个 case 内部.

# thor_submodule 目录下应当存在一个 regressioncases 目录, 其下有数个 case: case1, case2, case3 ...
# 默认执行当前目录下所有 case, 此时将会执行 repo 下所有 case 并汇总输出
maat

# 推荐进入 regressioncases 目录下执行
cd regressioncases
maat
# 仅执行 Sdc/.../case1, Eco/.../case3, Power/.../case5 这三个 case, /.../ 表示中间的数个目录层级
maat Sdc/.../case1 Eco/.../case3 Power/.../case5
# 仅执行 Sdc 这个模块下所有的 case
maat Sdc
# 仅执行 Sdc/mod1 这个子模块下所有的 case
maat Sdc/mod1

# 若当前用户位于某个 case 目录中
cd regressioncases/case1
# 尝试执行所有 case, 未发现 case, 检查自身是否为 case
maat
# 未发现其他 case, 检测出 pwd 为 case, 执行当前 case (case1)

# 可指定要执行的 case
cd regressioncases
# 支持通配符, 执行所有以 test 开头的所有 case
maat test*
# 支持排除指定 case, 滤除 case3 和 以 test 开头的所有 case
maat !case3 !test*      # sh 脚本中
maat \!case3 \!test*    # 命令行中, ! 需要进行转义
# 支持 file_list 文件, 如 cases.txt 中写有三个 case,
maat cases.txt

3. 关于 golden 的更新和 case 更改

一般情况, golden 无需用户手动更改, 当用户在 gitlab 中提交了一个 merge 请求时, 若测试通过, 则 gitlab 的 CI/CD 流将自动完成 golden 的更新操作。

若 CI/CD 流中报错, 将会导致此次执行不通过, 此时用户需要根据 regression 测试结果查看未通过的原因(一般来说, 用户在提交一个 commit 之前, 也应当在本地执行一次测试, 以确保新增代码正确), 若确定本次 regression 测试结果 中错误的 case 符合预期,则用户应当修改 regressioncases 中对应的 tcl / golden 等文件并随代码一起提交。流程图如下:

_images/maat_flow.png

4. 搭配 tools update-golden 工具

maat 工具可搭配 tools update-golden 工具, 该工具用于快速更新 regressioncases 仓库中的 golden 文件. 其用法如下:

# 进入 regressioncases 目录, 执行 case.
# case 执行后可能会出现 FAIL 的情况, 并且此时这个 FAIL 是符合预期的.
cd regressioncases
maat

# 假设 Mod/case1 错误, 且其改变是符合预期的, 可以使用 tools update-golden 更新 golden
tools update-golden Mod/case1
# 也可以不加 case 名, 此时 tools update-golden 将更新所有 case 的 golden.
tools update-golden

tools update-golden 的详细使用可以参考 tools update-golden 工具说明


maat 参数一览

maat 有许多额外的参数可以供配置, 其 --help 输出如下:

[root@dev]$ maat --help
Usage: maat [OPTIONS] [CASES]...

Options:
  --repeat INTEGER   Specify the number of repeated executions of the case,
                     the default is 1
  --timeout TEXT     Specifies the timeout of the case. Support unit s
                     (default)/m/h/d. The default is 0s.
  --config TEXT      Configure backend custom parameters
  --log TEXT         Specified logger level: TRACE/DEBUG/INFO/WARNING/ERROR
  --compare          Enable differential text echo in the command console
  -c, --continue     Enable to continue running with the last execution result
  --debug            Enable debug mode for maat
  --commit_id TEXT   Specify the commit id for test case running
  --tag TEXT         Specify the tag for test case running
  --cpu_num INTEGER  Specify the cpu number for test case running
  --version          Show maat version
  --help             Show this message and exit.

这些参数均可以组合使用, 一些常用的参数如下:

--compare

指定执行 case 时是否输出 error case 的详细信息.

maat --compare

效果如图:

_images/compare_feature.png

--cpu_num

指定 maat 多进程数量, 默认为当前机器最大核心数的一半以防止过多的占用资源.

maat --cpu_num 8

--version

输出当前 maat 版本.

maat --version

--continue/-c

在执行 case 过程中, 用户可使用 ctrl+c 停止执行 case, 此时可使用 --continue 参数继续上次执行任务

# 执行一些 case
maat some_cases

# 键盘按下 ctrl+c, maat停止执行 case 并输出当前 case 执行结果汇总
# 继续上次任务执行, 此时需要保证 --dir 输入一致
maat some_cases

# 也可用于中途修改 case 参数, 如接下来的 case 均停止 lec 检查
maat some_cases --config case.ENABLE_LEC=false

--config

更改 maat 功能模块参数的指令, 其使用较为多变复杂, 并可搭配 配置文件 使用, 进阶使用请参考 --config 配置表.

--config 是一个可重复使用的参数, 用于更改多个配置, 输入格式为.

maat --config [mod.attr=value]

# eg: 打开 lec 检查并指定 lec rpc 调用的端口为 12345
maat --config case.ENABLE_LEC=on --config lec.PORT=12345

--yaml

指定本次 case 执行使用的配置文件, 例如, 用户编辑了一份 custom.yaml 文件, 其内容如下:

case.ENABLE_LEC:  false
case.timeout:     10m

此时 maat –yaml ./custom.yaml 执行的所有 case 均将关闭 lec 检查并且设置超时时间为 10 min.

maat 的配置文件内容可参考 配置文件 部分.

--tag

使用 tag 去更改此次 maat 执行的 tcl 脚本.

对于任意 case 来说, maat 执行此 case 时, 会先生成一个 temp_xxxx.tcl 文件, 其是 case 本身的 tcl 文件的一个 副本, 并对这个 tcl 文件做一系列的处理, 包括但不限于处理相对路径 / 更改 cmd 参数 / 增删 cmd 等功能, 其实现就是 依托于 tag 完成, 如:

# 为 synth 命令增加 --timing_level3 参数
maat --tag timing_level3

# 清除所有的 opt 指令(netlist_opt / resynth)
maat --tag non_opt

更加详细的使用请参考 tag 使用详解.

--debug

指定以 debug 模式执行 maat, 一般用于调试.

maat --debug

--mock

指定当前仅输出 temp tcl 文件, 不进行实际执行.

# 此时仅在 thor 目录下生成 temp_xxx.tcl 文件
maat --mock

--repeat

指定 cases 重复执行次数, 以预防 RainaSynth 输出偶现 bug 问题.

# 指定 case 重复执行 5 次
maat --repeat 5

--commit_id

指定 golden 的 commit id 以实现历史比较功能.

# 指定与 3940b60ca78706f1e17220e48afb5345602d3763 的 golden 进行比较
maat --commit 3940b60ca78706f1e17220e48afb5345602d3763

--timeout

指定 cases 执行的超时时间, 指定后, 单个 case 执行超时则直接结束运行并给出报错. 该参数可以指定单位, 目前 支持以下四个单位:

  • 秒(s), 当输入不带单位时, 默认为秒

  • 分(m)

  • 时(h)

  • 天(d)

# 指定超时时间为 1000 秒
maat --timeout 1000
maat --timeout 1000s

# 指定超时时间为 90 分钟
maat --timeout 90m

# 指定超时时间为 2 小时
maat --timeout 2h

case 的编写

1. case 的目录结构

对于一个 case 来说, 其应当满足以下三个要求:

  1. case 是一个 directory.

  2. case 中包含 golden 目录, 其下存放用于对比的 golden 文件.

  3. case 中包含一个 tcl 文件, 其描述了本 case 的执行流程.

ps: 对于一个 case 来说, src 不是必需的, 其 src 可以存放于 case 目录中, 也可以存放于其他位置与其他 case 共享 同一个 src 文件, 目前可以在 RegressionCases 仓库的 TestFile 目录中找到公共使用的 src

另外, 对于一个 dir 中 case 的判定是递归的, 这意味着 maat case 的存放是可以按功能模块进行划分的, 因此, 目前 maat 对应的 case 仓库 RegressionCases 中的 case 是按模块等级进行划分的, 目前已划分为 Sdc / Eco / Database 等 子模块, 每个子模块中可能又按功能的模块继续进行划分, 直到这颗目录树的叶子节点才是真正的 case.

2. 创建一个 case

创建一个 case 时,本质上是创建一个目录,且这个目录必需满足一个 case 的 目录结构。 用户在确定好本 case 的位置后,创建一个目录,目录名即为 case 名,并在 case 目录下按照 case 的 目录结构 去创建对应的 tcl 文件和 golden 文件, 注意,golden 目录是必需的,但其可以是一个空目录

# 创建一个名为 “test_case” 的 case,其是 Sdc 模块下的一个 case
cd regressioncases/Sdc
mkdir test_case
# 创建对应的目录结构
cd test_case
mkdir golden      # 必需
mkdir src         # 非必需
touch run.tcl     # 必需

# case 支持多层级
# 创建一个名为 “test_case” 的 case,其是 Sdc 模块下 SdcTest 子模块的一个 case
cd regressioncases/Sdc/SdcTest
mkdir test_case
# 创建对应的目录结构
cd test_case
mkdir golden      # 必需
mkdir src         # 非必需
touch run.tcl     # 必需

3. 用于 --compare 参数的 rule

case 的 tcl 文件不仅指定了本 case 的执行 flow,还指定了本 case 的执行 rule,其由 tcl 注释的形式给出。

 1read_verilog src/gcd.v
 2read_liberty /share1/platform/nangate45/NangateOpenCellLibrary_typical.lib
 3synth -top gcd
 4
 5# @rule: verilog @result: synth.v @golden: synth_golden.v
 6write_file -netlist report/synth.v
 7
 8# @rule: ppa
 9report_area > report/area.rpt
10report_power > report/power.rpt
11report_timing > report/timing.rpt
12report_qor > report/qor.rpt
13
14exit

如上是一个 case 的 tcl 内容, 其中第 5 行的 # @rule: verilog @result: synth.v @golden: synth_golden.v 和 第 8 行的 # @rule: ppa` 即为两个 rule.

rule 是用于指定本 case 是否执行通过的标准。对于一个 regression case 来说,其执行结果是否 PASS,是由 rule 中指定的 golden 文件和 report 生成的文件按照 rule 去进行对比来决定的。不同的 rule 有不同的效果, 可在 rule 一览 中查看。rule 的指定在 tcl 文件中由固定的注释形式给出,其形式如下:

# 其必需是 tcl 文件中的注释,由 ‘#’ 开头
# @rule: {rule_name} @result: {result_name} @golden: {golden_name}
rule

指定要使用的比对规则,对于不同的规则,其作用不一致,且某些规则可能不需要 golden 或 result。

result

result 文件路径,作为 rule 的输入,其默认从 case 目录下的 report 目录中寻找,也可以使用相对路径将其定位到其他目录中。

golden

golden 文件路径,作为 rule 的输入,其默认从 case 目录下的 golden 目录中寻找,也可以使用相对路径将其定位到其他目录中。

rule 一览

1. diff

# @rule: diff @result: result_file @golden: golden_name

用于 golden 文件和 result 文件做之间的文本对比,使用经典的 diff 算法并渲染至命令行。

key

description

rule

diff

golden

用于做 diff 比较的 golden 文件路径

result

用于做 diff 比较的 result 文件路径

2. report

# @rule: report @result: result_file @golden: golden_name

用于 golden 文件和 result 文件做之间的文本对比,和 diff 规则类似,使用经典的 diff 算法并渲染至命令行但 会忽略文件中的 head 信息,适用于 area / power / sdc 等多种报告,使用该 rule 后将忽略这些报告的 head 信息, 若用户有新类型的文件需要该 rule 支持,可以联系文档编写者 tanlinfeng@raina.tech

key

description

rule

report

golden

用于做 report 比较的 golden 文件路径

result

用于做 report 比较的 result 文件路径

3. only_generated

# @rule: only_generated @result: result_file

检查 result 文件是否生成,若未生成,将给出报错提示。

key

description

rule

only_generated

golden

无需使用

result

指定需要检测是否存在的文件路径

4. lec

# @rule: lec @result: result_file @golden: golden_name

用于检测 golden 文件和 result 文件的逻辑等价性,和 tools lec 工具 使用方式类似。

key

description

rule

lec

golden

用于 lec 检查的 GOLDEN 文件

result

用于 lec 检查的 REVISED 文件

5. verilog

# @rule: diff @result: result_file @golden: golden_name

用于检测 golden 文件和 result 文件的逻辑等价性,和 lec rule 类似,但相较于 lec rule 会多上 verilog 文件 的其他功能检查。

key

description

rule

verilog

golden

用于 lec 检查的 GOLDEN 文件,并进行 verilog 检查

result

用于 lec 检查的 REVISED 文件,并进行 verilog 检查

6. ppa

# @rule: ppa
report_area > report/area.rpt
report_power > report/power.rpt
report_timing > report/timing.rpt
report_qor > report/qor.rpt

检查 case 输出的 area、power、timing、qor 报告是否变化过大,若其性能降低到原性能的 90%,则命令台将提示报错 并渲染出对应变差的数据。 注意,使用该 rule 时,要求其必需跟随四种 ppa 报告的输出

key

description

rule

diff

golden

无,但默认需要 golden 目录中有 area.rpt timing.rpt power.rpt qor.rpt 文件

result

无,但默认需要 report 目录中会生成 area.rpt timing.rpt power.rpt qor.rpt 文件

maat 的配置文件

maat 使用 yaml 文件作为配置文件, “.maatCfg.yaml” 文件作为其默认的配置文件名, 且用户可以使用 --yaml 参数指定自定义的配置文件.

maat 每次启动时均会按照如下顺序去读取本次执行过程使用的配置(从低到高).

  • /usr/local/etc/.maatCfg.yaml

  • /etc/.maatCfg.yaml

  • ~/.maatCfg.yaml

  • 用户使用 --yaml 指定的路径

  • case 目录下的 .maatCfg.yaml 文件

  • 使用 --config 更改的配置

maat 拥有数个不同层级的模块, 每个模块拥有各自不同的配置, 对于最顶层的配置, 可以直接写配置名即可. 如:

# 指定用户自定义配置文件路径
CONFIG_PATH          : ./my_config.yaml
# 指定 case 在执行完成后清除输出文件
CLEAN_WHEN_FINISH    : True
# 指定 case 执行等级为 3
LEVEL                : 3

对于 maat 中的子模块配置, 则使用 mod.attr 的方式去指定配置, 可有效防止同名配置冲突的问题. 如:

# 指定 case 超时时间为 10 秒
case.TIMEOUT         : 10
# 指定 case 输出文件路径, 用于单个 case
case.WORK_DIR        : ~/test_dir/case
# 指定 case 输出文件路径, 用于多个 case
case.WORK_DIR_PARENT : ~/test_dir

# 指定 thor 输出目录为 log
thor.RPT_DIR         : log
# 开启 rpt 解析为 json 文件的功能
thor.JSON_PARSE_EN   : True

# 指定 lec rpc 请求的 IP 和 端口
lec.HOST             : 192.168.15.189
lec.PORT             : 12300

config 配置一览表

maat 的配置文件 类似, 因为 maat 拥有数个不同层级的模块, 每个模块拥有各自不同的 配置, 对于最顶层的配置, 可以直接写配置名即可, 对于 maat 中的子模块配置, 则使用 mod.attr 的方式去指定配置.

# 开启 fake run, 同时将 case 模块的 lec 检查关闭
maat --config FAKE_RUN=true --config case.ENABLE_LEC=false

1. 顶层配置

name

default

description

CONFIG_FILE

“.maatCfg.yaml”

指定默认 config 文件名

CONFIG_PATH

None

指定用户自定义的 config 文件路径

REPORT_NAME

“report”

指定默认的输出文件路径

PLATFORM_DIR

r”/share1/platforms”

指定库文件存放的路径

GIT_URL

git@gitlab.raina.tecinfra-team/regressioncase.git

指定远程 case 仓库的 url

GIT_BRANCH

“main”

指定远程 case 仓库的分支

CMDS_PATH

None

指定用户的 tag 文件

REPO

None

指定远程 case 仓库本地存放的 dir 名

IGNORE_CASES_FIEL

“.cases_ignore”

指定用于忽略 case 的 block 文件

FAKE_RUN

False

指定是否启用假执行

CLEAN_WHEN_FINISH

False

指定是否在执行完成后立即清理输出防止磁盘占用过多

2. case 配置

name

default

description

MULTI_TCL

True

指定是否启用多 tcl 功能

ENABLE_LEC

True

指定是否启用 lec 检查

REPEAT_EN

False

指定是否启用 repeat 功能

REPEAT_TIMES

1

指定 repeat 次数

LEVEL

1

指定本 case 的执行等级

TIMEOUT

0

指定本 case 的超时时间

FILE_LIST

“file_list.txt”

指定默认的 file_list 名

ERROR_IFNO_FILE

“.error_info.txt”

指定缓存执行差异的默认文件名

RESULT_FILE

“.result.json”

指定缓存执行结果的默认文件名

WORK_DIR_PARENT

None

指定 case 执行目录的父目录, 输出将存放于此目录下的 case 同名目录

WORK_DIR

None

指定 case 执行目录, 输出将存放于此

AREA_FILE

“area.rpt”

指定默认的 area report 文件

POWER_FILE

“power.rpt”

指定默认的 power report 文件

QOR_FILE

“qor.rpt”

指定默认的 qor report 文件

TIMING_FILE

“timing.rpt”

指定默认的 timing report 文件

SOURCE_DIR

“src”

指定默认的 RTL 存放目录

REPORT_DIR

“log”

指定默认的 case 输出目录

HISTORY_DOLDEN_DIR

“.history”

指定用于 history commit 文件路径

NOT_A_CASE

[“__pycache__”, “Raina_db”]

指定不进行迭代查找 case 的目录名

PROCESS_BY_TAG

True

指定是否启用 tag 处理

TCL_FILE

“run.tcl”

指定单 tcl 模式下 case 默认的 tcl 名

RESULT_BACKEND

“thor”

指定默认的 result 工具

GOLDEN_BACKEND

“dc”

指定默认的 golden 工具

PLATFORM

“nangate45”

指定默认的 lib 名

PLATFORM_DIR

“/share1/platforms”

指定默认的 lib 存放路径

ENABLE_STA

False

指定是否启用 sta 功能

ENABLE_PHYSICAL

False

指定是否启用 physical 功能

3. lec 配置

name

default

description

HOST

“192.168.15.189”

指定用于 rpc 调用的 ip

PORT

12300

指定用于 rpc 调用的 端口

SCRIPT

None

指定用户自定义的 lec 脚本

DEFAUTL_SCRIPT

“lec_script.do”

指定默认的 lec 脚本

CLEAN_EN

True

指定是否在执行完成后清除数据(防止 rpc 主机占用磁盘)

4. thor 配置

name

default

description

debug_en

False

指定是否启用 debug 默认

environment

“RAINA_PATH”

指定用于配置 RainaSynth 路径的环境变量名

path

“/homecloud/public/Nightly_Raina/latest/release/bin/RainaSynth”

指定默认的 RainaSynth 文件路径

prompt

“Raina>> “

指定用于 RainaSynth 的输出提示符

BACKEND_NAME

“thor”

指定本工具在 case 中的目录名

AREA_FILE

“area.rpt”

指定默认的 area report 名

POWER_FILE

“power.rpt”

指定默认的 power report 名

QOR_FILE

“qor.rpt”

指定默认的 qor report 名

TIMING_FILE

“timing.rpt”

指定默认的 timing report 名

PERFORMANCE_FILE

“performance.rpt”

指定默认的 performance report 名

JSON_PARSE_EN

False

指定是否将 rpt 解析为 json

PERF_EN

False

指定是否使用 perf 工具生成火焰图

5. perf 配置

name

default

description

FlameGraph_PATH

“/share1/software/FlameGraph”

指定 FlameGraph 工具路径

PERF_OUT_FILE

“perf.perf”

指定生成的 perf 文件名

PERF_DATA_FILE

“perf.data”

指定生成的 data 文件名

FlameGraph_FOLDED_FILE

“perf.folded”

指定生成的 folded 文件名

FlameGraph_SVG_FILE

“perf.svg”

指定生成的 svg 文件名

CALL_GRAPH_MODES

[“dwarf”, “fp”, “lbr”, “no”]

采集图模式合集

CALL_GRAPH_MODE

“dwarf”

采集图模式

SYSTEM_EN

False

全系统采样使能

SAMPLING_FREQUENCY

100

采样频率

6. dc 配置

name

default

description

DEBUG_EN

False

指定是否启用 debug 模式

RPT_DIR

“log”

指定存放输出文件的目录

BACKEND_NAME

“dc”

指定本工具在 case 中的目录名

AREA_FILE

“area.rpt”

指定默认的 area report 名

POWER_FILE

“power.rpt”

指定默认的 power report 名

QOR_FIEL

“qor.rpt”

指定默认的 qor report 名

TIMING_FILE

“timing.rpt”

指定默认的 timing report 名

JSON_PARSE_EN

False

指定是否将 rpt 解析为 json

HOST

“192.168.15.189”

指定 rpc 调用的 ip

PORT

12300

指定 rpc 调用的 端口

CLEAN_EN

True

指定是否在执行完成后清除数据(防止 rpc 主机占用磁盘)

7. genus 配置

name

default

description

DEBUG_EN

False

指定是否启用 debug 模式

RPT_DIR

“log”

指定存放输出文件的目录

BACKEND_NAME

“genus”

指定本工具在 case 中的目录名

AREA_FILE

“area.rpt”

指定默认的 area report 名

POWER_FILE

“power.rpt”

指定默认的 power report 名

QOR_FIEL

“qor.rpt”

指定默认的 qor report 名

TIMING_FILE

“timing.rpt”

指定默认的 timing report 名

JSON_PARSE_EN

False

指定是否将 rpt 解析为 json

HOST

“192.168.15.189”

指定 rpc 调用的 ip

PORT

12300

指定 rpc 调用的 端口

CLEAN_EN

True

指定是否在执行完成后清除数据(防止 rpc 主机占用磁盘)

8. sta 配置

name

default

description

TIMING_RPT

“golden_timing.rpt”

指定 golden 工具的 timing report 名

AREA_RPT

“golden_area.rpt”

指定 golden 工具的 area report 名

POWER_RPT

“golden_power.rpt”

指定 golden 工具的 power report 名

QOR_RPT

“golden_qor.rpt”

指定 golden 工具的 qor report 名

THOR_STA_TCL

“temp_thor_sta_correlation.tcl”

指定 thor sta 脚本路径

THPR_STA_TIMING_TCL

“temp_thor_sta_timing.tcl”

只当 thor sta 输出脚本文件名

DC_STA_TCL

“temp_dc_sta_correlation.tcl”

指定 dc sta 输出脚本文件名

STA_RPT

“sta_correlation.rpt”

指定 sta 数据存放名

THOR_DIFF_RPT

“sta_thor_diff_paths.rpt”

指定仅 thor 拥有路径存放文件名

GOLDEN_DIFF_RPT

“sta_golden_diff_paths.rpt”

指定仅 golden 拥有路径存放文件名

NEQ_PATH_RPT

“sta_neq_paths.rpt”

指定 diff 路径存放文件名

STA_SUMMARY_RPT

“sta_summary.rpt”

指定 sta 报告汇总文件名

ACCURACY

2

指定 timing 输出精度

NET_PROPS

[]

指定必需包含的 port / net 名

NON_NET_PROPS

[]

指定不参与的 port / net 名

GOLDEN

“DC”

指定用作 golden 的工具名

TIMING_THREADS

1

指定 timing 执行的线程数

VERSION

“v200”

指定执行的 sta 版本(v100 / v200)

tag 使用详解

1. tag 概述

tag 是用于更改 case 执行 tcl 脚本的工具, 当用户指定 --tag tag_name 后, maat 会查找指定 tag 对应的 func, 并 使用该 func 对 tcl 脚本进行修改.

需要注意的是, 不同的 tag 可能存在冲突, 如 timing_level1 和 timing_level3, 此时timing_level1 的修改结果 将被 timing_level3 的修改结果覆盖, 最终 synth 指令输出将是 timing_level3 这个 tag 的修改结果.

# 同时使用两个 tag
maat --tag timing_level1 --tag timing_level3

# 此时 temp_xxx.tcl 中, synth 指令为
synth top --timing_level3

2. tag 一览表

使用如下指令可以快捷的查看 maat 的所有 tag:

tools tags maat
_images/maat_tags.png

3. 用户自定义 tag

当用户需要使用自定义 tag 时, 需要使用 --config 指定 CMDS_PATH 参数导入用户的 tag 文件.

maat --tag user_tag --config CMDS_PATH=user_tags.py