Cadence Vmanager vsif文件编写指南(持续更新...)

目录

1.NTF格式介绍

1.1.1 {属性:值}定义

1.1.2类别

1.1.3语法

2.vsif文件中有效的container

2.1 session {…}


1.NTF格式介绍

Cadence的Vmanager工具采用vsif类型的文件作为regression的输入文件,采用vplanx/csv类型的文件作为vplan的输入文件,vplanx、vsif文件采用标准的嵌套文本格式(NTF),NTF是一种元格式,类似于XML,本文有关于Vmanager采用的NTF格式的介绍如下:

  1. NTF的BNF(巴克斯范式)描述
  2. NTF的预处理(#include,环境变量)
  3. NTF的限制
  4. NTF的错误处理

1.1 NTF的BNF(巴克斯范式)描述

BNF可以理解为专门用于描述(定义)语言的元语言,就是用书面文字的方式来定义编程语言,多出现在各种语言的官方文档中,比如Python官方文档:

NTF的BNF格式如下:

  1. 容器(container)的标识符取决于文件类型,比如:
  • vsif files--session,group,test
  • vplan files--import,section,perspective,coverage,extend,instantiate,within
  1. 标识符不区分大小写;
  2. 可以在任何BNF元素之间自由使用空白。若要保留名称或属性值中的空格,需要将其放在双引号中;
  3. 使用“//”或者“--”可以注释掉该行;
  4. 容器(container)的关闭符号“}”后面的分号“;”是可选的;
  5. vManager在读取文件时从字符串中删除引号;
  6. 有关{属性(attribute): 值(value)}的完整说明,可以参阅attribute : value;
  7. NTF 中没有前向引用(需要按顺序定义属性)。例如,在 vplan 文件中,必须首先定义section属性,然后定义views属性,然后定义section的扩展属性 within 属性。

1.1.1 {属性:值}定义

使用“:”定义一个属性的具体值。

1.1.2类别

属于容器的成员变量(可以把容器理解为一个类,属性就是该类的成员变量,值就是成员变量的具体值)

1.1.3语法

attribute_name: attribute-value;

举例:

weight : 2

coverage : usb*.*.* ;

  • attribute_name 是仅包含字母数字字符和下划线字符的标识符。attribute_name中不允许有空格,但允许在attribute_name前后使用空格。attribute_name区分大小写。session属性的name必须与所有的test属性的name不同。换言之,不能在test和session中使用相同的attribute_name。
  • attribute_value可以为空或者按如下语法:
    1. 字符串,可选用引号括起来,如果attribute_value在引号中,则删除引号,保留引号中的内容。如果attribute_value不在引号中,则删除初始和最终空格,并将任何多个空格替换为一个空格。
    2. 注意(所有字符串属性(预定义和用户定义)限制为 32672 个字符。当尝试输入超过 32672 个字符时(在所有方法中 - vsif、edit、scanning),该值将被截断并以“ ..."代替.)
      1. vManager沿 $VMANAGER_PATH 搜索file的完整或部分路径名
      2. 多行文本,按如下方式括起来<text></text>,<text>必须是第一行中的第一个非空格标记,并且</text>必须是最后一行中的最后一个非空白标记。<text> 和</text>可能出现在同一行上,尽管这相当于在实际文本周围使用双引号。举例:如下2个dut_error含义相同。
  • 注意,后定义的容器内属性会覆盖以前的属性。

1.2 NTF的预处理(#include,环境变量获取)

#include语法如下:

  • 包含的文件必须用双引号括起来。
  • 每个 include 指令都必须写在仅包含自身的一行中。
  • 不允许在 include 指令的末尾使用分号。
  • include 指令中允许使用环境变量。使用类似 shell 的语法 $ENV_VAR 或 ${ENV_VAR}。
  • 不要在 #include 指令中使用 vsif 指令 $ENV()、$RUN_DIR、$DIR() 或 $ATTR()。

如果未将包含的文件指定为绝对路径,vManager 将搜索以下目录:

  • 包含文件的目录(包含 #include 指令或 import {} 的文件)。
  • 运行vManager 的目录。
  • $VMANAGER_PATH 环境变量指定的任何目录。

1.3 NTF的限制

  • 如果数据本身带<text>这个字符的话,vManager就不能编译在<text> </text>标识符之间的数据。
  • NTF 容器必须在打开它们的文件中关闭。如果在一个文件中打开容器,则无法在包含的文件中关闭它。例如,不支持以下内容:

1.4 NTF的错误处理

解析 NTF 文件时,可能有两种类型的错误

  • NTF 不兼容错误 -- 文件不是 NTF 格式。
  • 特定于应用程序的错误 -- 文件采用 NTF 格式,但根据正在读取的格式,其中的数据是错误的。例如,编写“seed: 123”是有效的 NTF 语法,把seed作为vsif中的container的{属性:值}是正确的,但seed放在vplan 中会产生错误。

2.vsif文件中有效的container

vsif 文件指定要在单个session中运行的一个或多个test。为了支持 vsif 文件的链接,一个 vsif 文件中允许有多个session容器。

vsif 文件还允许以下语法:

  • 标准 C++ 编译器指令,包括 #include、#define、#ifdef 和 #ifndef;
  • 属性值指令,包括 $ENV、$RUN_ENV、$ATTR 和 $DIR;

以下是 vsif 文件中的有效 NTF 容器:

对于上面每个容器,它可以容纳的用户定义属性数是有限制的。如下:

其中:

  • other types包括:path,duration,enum,long,double,boolen。
  • other containters包括:test,group,session,run,session_output。

2.1 session {…}

在session容器中可以定义如下属性:

属性描述语法归属
abort_dependent_jobs_on_nonzero_exit指定当job以非零退出代码退出时,是否必须中止job的从属job。abort_dependent_jobs_on_nonzero_exit : boolean(默认1)session
abort_dependent_runs_on_failure指定在test失败时是否必须中止test的依赖test。此属性的行为类似于abort_dependent_jobs_on_nonzero_exit属性,但当主test失败时,此处的依赖test将失败(在scan阶段发现错误)。abort_dependent_runs_on_failure : boolean(默认0)session
automation_file用于指定每个 vsif 的自动化。automation_file : path(path 是包含自动化命令的文件的路径,自动化命令文件中的指令和batch命令一致。)
(如/vsif/automation/ida.automation;)
session
create_debug_logs要求 vManager 创建日志文件以帮助调试 DRM 问题create_debug_logs : booleansession
create_optimized_coverage_data指定是否创建优化的覆盖率数据。create_optimized_coverage_data: <text>string</text>
(string可以为NONE,ALL,ALL_SESSION,其中NONE表示该session的优化覆盖率不会被收集,ALL表示该session下每个run的覆盖率都被单独收集,ALL_SESSION表示该session下的每个覆盖率都会被合并收集)
session
default_dispatch_parameters指定 DRM ExecCommand 的默认选项或参数default_dispatch_parameters:<text>string</text>
不建议在此字符串中使用环境变量。
session
description定义一个session的描述description: description
举例:description : <text>This session contains 10 tests run with random seeds generated by IntelliGen</text>;
session
drm指定要用于session、group或test的 DRMdrm:<text>string</text>
其中string可以为如下:
lsf-- Specifies the DPL-based integration with IBM Platform Load Sharing Facility (LSF).
sge--Specifies the DPL-based integration with the open source batch-queuing system, Sun Grid Engine (SGE), supported by Sun Microsystems.
openlava  --Specifies the DPL-based integration with OpenLava workload scheduler.
nc  -- Specifies the DPL-based integration with NetworkComputer based job.
loadleveler -- Specifies the DPL-based integration with IBM's LoadLeveler.
parallel local -- Specifies the DPL-based execution of runs in parallel on the local machine.
serial local -- Specifies the DPL-based execution of runs serially on the local machine.
user defined -- Specifies DRM that you created using the DRM API.
session
file_policy使用户能够选择每次运行时要在 NFS 上保留哪些文件。file_policy: Perl Boolean expression(采用perl语法)(默认值为1,默认NFS保留所有文件)
例如:要保留failed用例的全部信息,和passed用例的指定文件,可以仿照如下写法:
session sess{
    top_dir: $ENV(MY_TOP_DIR);
    output_mode: terminal;
    file_policy: <text> getStatus() eq "FAILED"</text>;
};
group g{
   
file_policy: <text> getFile() =~ /\.log/ and "$ATTR(test_name)" eq "t3" </text>;
    scan_script: true;

    test t1{
       
file_policy: <text> getFile() =~ /cov_work\/scope/ </text>;
        run_script: "xrun $ENV(WORK_AREA)/test.sv -coverage all -access r -svseed random";};

    test t2{
        run_script: "xrun $ENV(WORK_AREA)/test.sv -coverage all -access r -svseed random; exit 1";};

    test t3{
    run_script: "xrun $ENV(WORK_AREA)/test.sv -coverage all -access r -svseed random";
};
};
如果t1 PASSED,t2 FAILED,t3 PASSED,则会保留t1的覆盖率,t2的全部文件,t3的带.log的文件。
session
 max_runs_in_parallel指定DRM 并行执行的run的最大次数max_runs_in_parallel:integer
例如:max_runs_in_parallel:5
session
free_hosts需要 DRM 为后续run重新分配主机free_hosts:boolean(默认为1)
若为true,主机被释放,DRM 可以为任何剩余run重新分配此计算机(或其他计算机)。如果为 FALSE,则在session完成之前不会释放主机
session
group_automation_file指定每个 vsif 中的group自动化。group_automation_file__:<path for group automation file >
automation_file中的内容同automation_file命令
session
host_lock_timeout指定DRM 任务的timeout时间host_lock_timeout:time(时间以秒为单位) 

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

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

相关文章

BC77 简单计算器(牛客)

#include <stdio.h> int main() {double a, b, d;//用来接收浮点数char c;//用来接受符号scanf("%lf %c %lf", &a, &c, &b);if (c || c - || c * || c /)//判断输入的运算符号不包括在&#xff08;、-、*、/&#xff09;范围内{switch (c)//根…

Kotlin应用——使用kt进行web开发 使用h2database进行初始化数据库 mybatis-plus使用

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 kt入门的合集文章如下&#xff1a; Kotlin学习——kt入门合集博客 &…

P16 C++构造函数

目录 前言 01 什么是构造函数呢&#xff1f; 02 非构造函数初始化变量 03 构造函数初始化变量 04 带参数的构造函数。 最后的话 前言 我们继续学习 C 的面向对象编程&#xff0c;本章主要是讲其中的 构造函数。 01 什么是构造函数呢&#xff1f; 构造函数基本上是一种特…

tinyViT论文笔记

论文&#xff1a;https://arxiv.org/abs/2207.10666 GitHub&#xff1a;https://github.com/microsoft/Cream/tree/main/TinyViT 摘要 在计算机视觉任务中&#xff0c;视觉ViT由于其优秀的模型能力已经引起了极大关注。但是&#xff0c;由于大多数ViT模型的参数量巨大&#x…

MetaObject-BeanWrapper-MetaClass-Reflector的关系

MetaObject、BeanWrapper、MetaClass、Reflector之间是通过装饰器模式逐层进行装饰的。其中MetaObject、BeanWrapper是操作对象&#xff1b;MetaClass、Reflector是操作Class ObjectWrapper类结构图 BaseWrapper是对BeanWrapper、MapWrapper公共方法的提取及类图的优化&#…

线程的创建方式

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构&#xff0c;mysql&#xff0c;javaee等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 线程的创建方…

知识点小总结

‘Integer(int)‘ 已经过时了 https://blog.csdn.net/qq_43116031/article/details/127793512 解决Java中的“找不到符号“错误 解决Java中的“找不到符号“错误_java: 找不到符号_很酷的站长的博客-CSDN博客 可右键打开 错误: 编码 UTF-8 的不可映射字符 错误: 编码 UTF-8 …

Less的函数的介绍

文章目录 前言描述style.less输出后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;…

什么是无监督学习

1 概况 1.1 定义 无监督学习&#xff08;Unsupervised Learning&#xff09;是机器学习的一种类型&#xff0c;它涉及从未标记的数据中发现隐藏的模式。与监督学习不同&#xff0c;无监督学习的数据没有显式的标签或已知的结果变量。其核心目的是探索数据的内在结构和关系。无…

Less 嵌套规则

文章目录 前言描述style.less输出后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;…

数据库基础教程之创建触发器,实现自动更新时间戳(四)

postgresql 更新时间戳需要通过触发器来实现,这里给出两种方法来实现。 创建字段create_time和edit_time 通过Navicat在添加字段时候将字段设置为timestamp类型,生成时间戳方式为CURRENT_TIMESTAMP或者设置为now(),然后点击保存。 新建函数 点击函数,然后在弹出的函数向导中…

RabbitMQ之MQ的可靠性

文章目录 前言一、数据持久化交换机持久化队列持久化消息持久化 二、LazyQueue控制台配置Lazy模式代码配置Lazy模式更新已有队列为lazy模式 总结 前言 消息到达MQ以后&#xff0c;如果MQ不能及时保存&#xff0c;也会导致消息丢失&#xff0c;所以MQ的可靠性也非常重要。 一、…

将本地项目上传到gitee

本文详细介绍如何将本地项目上传到gitee 1.登录gitee创建一个与本地项目名相同的仓库 2.进入本地项目所在路径&#xff0c;打开Git Bash 3.执行初始化命令 git init4.添加远程仓库 4.1 点击复制你的HTTPS仓库路径 4.2 执行添加远程仓库命令 git remote add origin 你的…

Vue常见的实现tab切换的两种方法

目录 方法一&#xff1a;事件绑定属性绑定 效果图 完整代码 方法二&#xff1a;属性绑定 动态组件 component标签 效果图 完整代码 方法一&#xff1a;事件绑定属性绑定 效果图 完整代码 <!DOCTYPE html> <html lang"en"> <head><meta c…

【中间件】消息队列中间件intro

中间件middleware 内容管理 introwhy use MQMQ实现漫谈主流消息队列QMQ IntroQMQ架构QMQ 存储模型 本文还是从理论层面分析消息队列中间件 cfeng现在处于理论分析阶段&#xff0c;以中间件例子&#xff0c;之前的blog对于中间件是从使用角度分享了相关的用法&#xff0c;现在就…

Vue框架学习笔记-Object.defineproperty函数

文章目录 前文提要Object.defineProperty作用Object.defineProperty参数使用例图getter&#xff0c;也就是get函数setter&#xff0c;也就是set函数 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 Object.defineProperty作用 当在js中声明了一个变…

在我国干独立游戏开发有多难?

游戏独立开发在中国&#xff0c;一直以来都是一条充满挑战的道路。尽管有着无限的激情和创意&#xff0c;但面对市场、资金、政策等多方面的困难&#xff0c;许多独立开发者在这条路上艰难前行。 首先&#xff0c;市场竞争激烈是中国游戏独立开发者面临的首要挑战。随着游戏产…

【Amazon】通过代理连接的方式导入 AWS EKS集群至KubeSphere主容器平台

文章目录 一、设置主集群方式一&#xff1a;使用 Web 控制台方式二&#xff1a;使用 Kubectl命令 二、在主集群中设置代理服务地址方式一&#xff1a;使用 Web 控制台方式二&#xff1a;使用 Kubectl命令 三、登录控制台验证四、准备成员集群方式一&#xff1a;使用 Web 控制台…

Labelme加载AI(Segment-Anything)模型进行图像标注

labelme是使用python写的基于QT的跨平台图像标注工具&#xff0c;可用来标注分类、检测、分割、关键点等常见的视觉任务&#xff0c;支持VOC格式和COCO等的导出&#xff0c;代码简单易读&#xff0c;是非常利用上手的良心工具。 第一步&#xff1a;   下载源码进行安装。 g…

Redis 基本命令—— 超详细操作演示!!!

内存数据库 Redis7—— Redis 基本命令 三、Redis 基本命令&#xff08;下&#xff09;3.8 benchmark 测试工具3.9 简单动态字符串SDS3.10 集合的底层实现原理3.11 BitMap 操作命令3.12 HyperLogLog 操作命令3.13 Geospatial 操作命令3.14 发布/订阅命令3.15 Redis 事务 四、Re…