测试激励文件功能特性 - 2023.2 简体中文

Vivado Design Suite 用户指南: 逻辑仿真 (UG900)

Document ID
UG900
Release Date
2023-10-18
Version
2023.2 简体中文

Vivado 仿真器中,添加了对于部分常用测试激励文件功能特性的支持,如下表所示:

表 1. 受支持的动态类型构造
主构造 辅构造 LRM 部分 状态
字符串数据类型   6.16 受支持
  字符串运算符(IEEE 1800-2012 的表 6-9) 6.16 受支持
  Len() 6.16.1 受支持
  Putc() 6.16.2 受支持
  Getc() 6.16.3 受支持
  Toupper() 6.16.4 受支持
  Tolower() 6.16.5 受支持
  Compare 6.16.6 受支持
  Icompare() 6.16.7 受支持
  Substr() 6.16.8 受支持
  Atoi()、atohex()、atooct() 和 atobin() 6.16.9 受支持
  Atoreal() 6.16.10 受支持
  Itoa() 6.16.11 受支持
  Hextoa() 6.16.12 受支持
  Octtoa() 6.16.13 受支持
  Bintoa() 6.16.14 受支持
  Realtoa() 6.16.15 受支持
动态阵列   7.5 受支持
  动态阵列新增 7.5.1 受支持
  大小 7.5.2 受支持
  删除 7.5.3 受支持
关联阵列   7.8 受支持
  通配符索引 7.8.1 受支持
  字符串索引 7.8.2 受支持
  类索引 7.8.3 受支持
  整型索引 7.8.4 受支持
  其他用户定义的类型 7.8.5 受支持
  访问无效的索引 7.8.6 受支持
  关联阵列方法 7.9 受支持
  Num() 和 Size() 7.9.1 受支持
  Delete() 7.9.2 受支持
  Exists() 7.9.3 受支持
  First() 7.9.4 受支持
  Last() 7.9.5 受支持
  Next() 7.9.6 受支持
  Prev() 7.9.7 受支持
  遍历方法的实参 7.9.8 受支持
  关联阵列赋值 7.9.9 受支持
  关联阵列实参 7.9.10 受支持
  关联阵列字面值 7.9.11 受支持
队列   7.10 受支持
  队列运算符 7.10.1 受支持
  队列方法 7.10.2 受支持
  Size() 7.10.2.1 受支持
  Insert() 7.10.2.2 受支持
  Delete() 7.10.2.3 受支持
  Pop_front() 7.10.2.4 受支持
  Pop_back() 7.10.2.5 受支持
  Push_front() 7.10.2.6 受支持
  Push_back() 7.10.2.7 受支持
  队列元素的持久引用 7.10.3 受支持
  使用赋值和解包的阵列串联来更新队列 7.10.4 受支持
  受限队列 7.10.5 受支持
  8 受支持
  通用类 8.1 受支持
  概述 8.2 受支持
  语法 8.3 受支持
  对象(类实例) 8.4 受支持
  对象属性和对象参数数据 8.5 受支持
  对象方法 8.6 受支持
  构造函数 8.7 受支持
  静态类属性 8.8 受支持
  静态方法 8.9 受支持
  this 关键字 8.10 受支持
  赋值、重命名和复制 8.11 受支持
  继承和子类 8.12 受支持
  被覆盖的成员 8.13 受支持
  super 关键字 8.14 受支持
  强制类型转换 8.15 受支持
  链式构造函数 8.16 受支持
  数据隐藏和封装 8.17 受支持
  常量类属性 8.18 受支持
  虚拟方法 8.19 受支持
  抽象类和纯虚拟方法 8.20 受支持
  多态性:动态方法查找 8.21 受支持
  类作用域解析运算符 :: 8.22 受支持
  块外声明 8.23 受支持
  参数化的类 8.24 受支持
  参数化的类的类解析运算符 8.24.1 受支持
  Typedef 类 8.25 受支持
  接口类 8.26 受支持
  接口类的多重继承 8.26.6 受支持
  存储器管理 8.27 受支持
  类和结构 8.28 受支持
进程   9 受支持
  并行进程 - Join_Any 分叉和 Join_None 分叉 9.3 受支持
  等待分叉 9.6.1 受支持
  禁用分叉 9.6.3 受支持
  高精度进程控制 9.7 受支持
时钟设置块   14 受支持
  通用 14.1 受支持
  概述 14.2 受支持
  时钟设置块声明 14.3 受支持
  输入和输出偏差 14.4 受支持
  分层表达式 14.5 不支持
  多个时钟设置块内的信号 14.6 受支持
  时钟设置块作用域和生存期 14.7 受支持
  多个时钟设置块的示例 14.8 受支持
  接口和时钟设置块 14.9 受支持
  时钟设置块事件 14.10 受支持
  周期延迟 14.11 受支持
  默认时钟设置 14.12 受支持
  输入采样 14.13 受支持
  全局时钟设置 14.14 不支持
  同步事件 14.15 受支持
  同步驱动 14.16 受支持
  驱动和非阻塞赋值 14.16.1 受支持
  驱动时钟设置输出信号 14.16.2 受支持
信号量   15.3 受支持
  信号量方法 new() 15.3.1 受支持
  信号量方法 put() 15.3.2 受支持
  信号量方法 get() 15.3.3 受支持
  信号量方法 try_get() 15.3.4 受支持
邮箱   15.4 受支持
  邮箱方法 new() 15.4.1 受支持
  邮箱方法 num() 15.4.2 受支持
  邮箱方法 put() 15.4.3 受支持
  邮箱方法 try_put() 15.4.4 受支持
  邮箱方法 get() 15.4.5 受支持
  邮箱方法 try_get() 15.4.6 受支持
  邮箱方法 peek() 15.4.7 受支持
  邮箱方法 try_peek() 15.4.8 受支持
  参数化邮箱 15.4.9 受支持
命名的事件   15.5 受支持
  触发事件 15.5.1 受支持
  等待事件 15.5.2 受支持
  持久触发 15.5.3 不支持
  事件序列 15.5.4 不支持
  对命名的事件变量执行的操作 15.5.5 受支持
  合并事件 15.5.5.1 受支持
  回收事件 15.5.5.2 受支持
  事件比较 15.5.5.3 受支持
断言有效   16 受支持
  通用 16.1 受支持
  概述 16.2 受支持
  断言有效 16.2 受支持
  假定 16.2 受支持
  涵盖 16.2 不支持
  限制 16.2 不支持
  即时断言有效 16.3 受支持
  延迟断言有效 16.4 不支持
  并发断言有效概述 16.5 受支持
  采样 16.5.1 受支持
  断言有效时钟 16.5.2 受支持
  布尔表达式 16.6 受支持
  顺序 16.7 受支持
  声明顺序 16.8 受支持
  顺序声明中的有型形参 16.8.1 受支持
  顺序声明中的局部变量形参 16.8.2 受支持
  顺序操作 16.9 受支持
  运算符优先 16.9.1 受支持
  顺序重复 16.9.2 受支持
  采样值函数 16.9.3 受支持
  全局时钟设置过去和未来采样值函数 16.9.4 不支持
  AND 运算 16.9.5 受支持
  相交(含长度限制的 AND) 16.9.6 受支持
  OR 运算 16.9.7 受支持
  First_match 运算 16.9.8 受支持
  顺序条件 16.9.9 受支持
  序列中包含的另一序列 16.9.10 受支持
  根据较简单的序列来构成序列 16.9.11 受支持
  局部变量 16.10 受支持
  在匹配的序列上调用子例程 16.11 受支持
  Declaring 属性 16.12 受支持
  Sequence 属性 16.12.1 受支持
  Negation 属性 16.12.2 受支持
  Disjunction 属性 16.12.3 受支持
  Conjunction 属性 16.12.4 受支持
  If-else 属性 16.12.5 受支持
  Implication 16.12.6 受支持
  Implies 属性和 iff 属性 16.12.7 受支持
  属性例化 16.12.8 受支持
  Followed-by 属性 16.12.9 不支持
  Next time 属性 16.12.10 不支持
  Always 属性 16.12.11 不支持
  Until 属性 16.12.12 不支持
  Eventually 属性 16.12.13 不支持
  Abort 属性 16.12.14 不支持
  弱运算符和强运算符 16.12.15 不支持
  大小写 16.12.16 不支持
  递归属性 16.12.17 不支持
  属性声明中的有型形参 16.12.18 受支持
  属性声明中的局部变量形参 16.12.19 受支持
  属性示例 16.12.20 受支持
  有限长度与无限长度行为对比 16.12.21 受支持
  非简并 16.12.22 受支持
  多时钟支持 16.13 不支持
  并发断言有效 16.14 受支持
  断言有效声明 16.14.1 受支持
  假定声明 16.14.2 受支持
  涵盖声明 16.14.3 不支持
  限制声明 16.14.4 不支持
  在过程性代码外使用并发断言有效声明 16.14.5 受支持
  在过程性代码内嵌入并发断言有效 16.14.6 不支持
  推断值函数 16.14.7 不支持
  非空洞求值 16.14.8 不支持
  禁用 iff 解析 16.15 受支持
  时钟解析 16.16 受支持
  适用于多时钟序列和属性的语义前导时钟 16.16.1 受支持
  Expect 语句 16.17 不支持
  时钟设置块和并发断言有效 16.18 受支持
随机约束   18 受支持
  概念和用法 18.3 受支持
  随机变量 18.4 受支持
  Rand 修饰符 18.4.1 受支持
  Randc 修饰符 18.4.2 受支持
  约束块 18.5 受支持
  外部约束块 18.5.1 受支持
  约束继承 18.5.2 受支持
  设置成员资格 18.5.3 受支持
  分布 18.5.4 受支持
  Implication 18.5.6 受支持
  If-else 约束 18.5.7 受支持
  迭代约束 18.5.8 受支持
  foreach 迭代约束 18.5.8.1 受支持
  阵列缩减迭代约束 18.5.8.2 受支持
  全局约束 18.5.9 受支持
  可变排序 18.5.10 受支持
  静态约束块 18.5.11 受支持
  约束中的函数 18.5.12 受支持
  约束保护 18.5.13 受支持
  软核约束 18.5.14 受支持
  随机化方法 18.6.1 受支持
  Pre_randomize 和 post_randomize 18.6.2 受支持
  随机化方法的行为 18.6.3 受支持
  内联约束 18.7 受支持
  局部作用域解析 18.7.1 受支持
  禁用含 rand_mode 的随机变量 18.8 受支持
  控制含 constraint_mode 的约束 18.9 受支持
  动态约束修改 18.10 受支持
  内联随机变量控制 18.11 受支持
  内联约束检查器 18.11.1 受支持
  作用域变量 std::randomize 的随机化 18.12 受支持
  项作用域变量 std::randomize 添加约束 18.12.1 受支持
  随机数字系统函数和方法 18.13 受支持
  $urandom 18.13.1 受支持
  $urandom_range 18.13.2 受支持
  srandom 18.13.3 受支持
  Get_randstate 18.13.4 受支持
  Set_randstate 18.13.5 受支持
  随机稳定性 18.14 受支持
  手动植入随机化 18.15 受支持
  Randcase 18.16 受支持
  Randsequence 18.17 不支持
编程   24 受支持
  编程构造 24.3 受支持
  调度编程构造内代码的语义 24.3.1 受支持
  编程端口连接 24.3.2 受支持
  消除测试激励文件竞赛 24.4 受支持
  周期/事件模式内的阻塞任务 24.5 受支持
  匿名程序 24.6 不支持
  程序控制任务 24.7 受支持
功能覆盖   19 受支持
  通用 19.1 受支持
  概述 19.2 受支持
  定义覆盖模型:covergroup 19.3 受支持
  在类中使用 covergroup 19.4 受支持
  定义覆盖点 19.5 受支持
  指定值的分箱 19.5.1 受支持
  含 covergroup 表达式的覆盖点分箱 19.5.1.1 受支持
  设置 covergroup 表达式的覆盖点分箱 19.5.1.2 不支持
  指定转换的分箱 19.5.2 受支持
  对应覆盖点的自动分箱创建 19.5.3 受支持
  覆盖点分箱的通配符规范 19.5.4 受支持
  排除覆盖点值或转换 19.5.5 受支持
  指定违规的覆盖点值或转换 19.5.6 受支持
  值解析 19.5.7 受支持
  定义交叉覆盖 19.6 受支持
  定义交叉覆盖分箱 19.6.1 受支持
  用户定义的交叉覆盖和选择表达式示例 19.6.1.1 受支持
  含 covergroup 表达式的交叉分箱 19.6.1.2 受支持
  交叉分箱自动定义的类型 19.6.1.3 受支持
  交叉分箱设置表达式 19.6.1.4 受支持
  排除叉乘 19.6.2 受支持
  指定违规的叉乘 19.6.3 受支持
  指定覆盖选项 19.7 受支持
  Covergroup 类型选项 19.7.1 受支持
  预定义的 coverage 方法 19.8 受支持
  覆盖内置采样方法 19.8.1 受支持
  预定义的覆盖系统任务和系统函数 19.9 受支持
  选项和 type_option 成员的组织 19.10 受支持
注释: 不支持区分下列动态类型:队列、动态阵列、关联阵列和类等。因此,等待动态类型更新的块可能无法正常工作。例如:
module top();
int c[$];
event e1;
initial
begin
    c[0] = 10;
    for(int i = 0; i <= 10; i++)
    begin
        c = {i, c};
        -> e1;
        #5;
    end
end
always@(*) $display($time, " trying to read sensitivity on dynamic type : %d", c[0]); 
// this won't work as sensitivity on dynamic type is not supported
always @(e1) $display($time, " coming from event sensitivity : %d", c[0]); // this we 
can do as WA
always_comb if(c.size() > 0) $display($time, " Coming from size sensitivity : %d", 
c[0]); // sensitivity on size works