没有合适的资源?快使用搜索试试~ 我知道了~
SV assertation应用指南
需积分: 10 5 下载量 141 浏览量
2023-02-13
21:09:21
上传
评论
收藏 1.38MB PDF 举报
温馨提示
试读
127页
SV assertation应用指南
资源推荐
资源详情
资源评论
第 1 章
SVA 介 绍
—— 学习 SVA 语法
1.1 什么是断言
断言是设计的属性的描述。
● 如果一个在模拟中被检查的属性(property)不像我们期望
的那样表现,那么这个断言失败。
● 如果一个被禁止在设计中出现的属性在模拟过程中发生,
那么这个断言失败。
一系列的属性可以从设计的功能描述中推知,并且被转换成
断言。这些断言能在功能的模拟中不断地被监视。使用形式验证
技术,相同的断言能被重用来验证设计。断言,又被称为监视
器或者检验器,已经被用作一种调试技术的方式,在设计验证
流程中使用了很长时间。传统上,它们由过程语言,比如 Verilog,
来实现。它们也能用 PLI 和 C/C++的程序来实现。下面的代码
显示了相互断言条件检查的 Verilog 实现,其中信号 a 和信号 b
不能同时为高电平。如果这种情况发生,则显示这是一个错误
信息。
`ifdef ma
if(a & b)
$display(“Error: Mutually asserted check
failed.”);
System Verilog Assertions
应用指南
6
`endif
这种监视器仅作为模拟的一部分而存在,因此只有当需要时
才被纳入设计环境中。这可以通过允许 Verilog 代码条件编译的指
令“`ifdef”来实现。
1.2 为什么使用 SystemVerilog 断言(SVA)
虽然 Verilog 可以很容易地用来实现一些检查,它仍有一些不
足之处:
(1) Verilog 是一种过程语言,因此并不能很好地控制时序。
(2) Verilog 是一种冗长的语言,随着断言的数量增加,维护代
码将变得很困难。
(3) 语言的过程性这一本质使得测试同一时间段内发生的并
行事件相当困难。在一些情况下,一个 Verilog 的检验器
甚至可能无法捕捉到所有被触发的事件。
(4) Verilog 语言没有提供内嵌的机制来提供功能覆盖的数据。
用户必须自己实现这部分代码。
SVA 是一种描述性语言,可以完美地描述时序相关的状况。
语言的描述性本质提供了对时间卓越的控制。语言本身非常精确
且易于维护。SVA 也提供了若干个内嵌函数来测试特定的设计情
况,并且提供了一些构造来自动收集功能覆盖数据。
例子 1.1 显示了分别用 Verilog 和 SVA 实现的检验器。这个检
验器验证当信号 a 在当前时钟周期为高电平时,下面 1~3 个时钟
周期内,信号 b 应该变为高电平。
例子 1.1 分别用 Verilog 和 SVA 实现的断言实例
// Sample Verilog checker
always @(posedge a)
begin
第
1
章
SVA
介
绍
7
repeat (1) @(posedge clk);
fork: a_to_b
begin
@(posedge b)
$display
("SUCCESS: b arrived in time\n", $time);
disable a_to_b;
end
begin
repeat (3) @(posedge clk);
$display
("ERROR:b did not arrive in time\n", $time);
disable a_to_b;
end
join
end
// SVA Checker
a_to_b_chk:
assert property
@(posedge clk) $rose(a) |-> ##[1:3] $rose(b));
图 1-1 断言实例的波形
例子 1.1 很清楚地显示了 SVA 的优势。本章将讨论 SVA 语法。
检验器代表着一种非常简单的协议。使用 SVA 实现只需要一行代
码,而相同的协议描述用 Verilog 则需要好几行。此外,失败和成
功的条件必须在 Verilog 里额外地被定义,而 SVA 中断言失败会
System Verilog Assertions
应用指南
8
自动显示错误信息。例子模拟的结果如下:
SUCCESS: b arrived in time 127
vtosva.a_to_b_chk:
started at 125s succeeded at 175s
SUCCESS: b arrived in time 427
vtosva.a_to_b_chk:
started t 325s succeeded at 475s
ERROR: b did not arrive in time 775
vtosva.a_to_b_chk:
started at 625s failed at 775s
Offending ‘$rose(b)’
1.3 SystemVerilog 的调度
SystemVerilog 语言被定义成一种基于事件的执行模式。在每
个时隙(time slot),许多事件按照安排的顺序发生。这个事件的列
表依照标准定义的算法执行。依照这个算法,模拟器可以防止任
何在设计和测试平台互动中的不一致。断言的评估和执行包括以
下三个阶段:
预备(Preponed) 在这个阶段,采样断言变量,而且信号(net)
或变量(variable)的状态不能改变。这样确保在时隙开始的时候采
样到最稳定的值。
观察(Observed) 在这个阶段,对所有的属性表达式求值。
响应(Reactive) 在这个阶段,调度评估属性成功或失败的
代码。
图 1-2 显示了一个简化了的 SystemVerilog 事件进程安排流程
表。要彻底地理解 SystemVerilog 的进程安排算法,请参考
<<SystemVerilog 3.1a LRM>>[1]。
第
1
章
SVA
介
绍
9
预备
从上一
时隙
预反应
活跃
不活跃
预非阻塞赋值
非阻塞赋值
(NBA)
后非阻塞赋值
观察
后观察
响应
过程后
到下一时隙
图 1-2 SV 事件调度流程简图
1.4 SVA 术语
SystemVerilog 语言中定义了两种断言:并发断言和即时断言。
1.4.1 并发断言
● 基于时钟周期。
● 在时钟边缘根据调用的变量的采样值计算测试表达式。
● 变量的采样在预备阶段完成,而表达式的计算在调度器的
观察阶段完成。
● 可以被放到过程块(procedural block)、模 块 (module)、接 口
(interface),或者一个程序(program)的定义中。
● 可以在静态(形式的)验证和动态验证(模拟)工具中使用。
一个并发断言的例子如下:
a_cc: assert property (@(posedge clk) not (a && b));
剩余126页未读,继续阅读
资源评论
六职位
- 粉丝: 21
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功