SVA学习第一章——断言的基本介绍及语法
文章目录
一、SVA的基本介绍
1. SVA的执行及分类:
1.1 执行和评估:
预备阶段 | 采样断言变量、信号的状态不能改变,确保采到最稳定的值 |
---|---|
观察阶段 | 对所有的属性表达式求值 |
响应阶段 | 评估属性是否成功或者失败 |
1.2 断言的分类——并发断言和即时断言
并发断言
:并发断言是一种描述系统行为的语句,其基于时序逻辑来检查系统在仿真过程中的并发行为。并发断言使用的语法为$assert
和$assume
。
-
$assert
语句用于检查某个性质是否为真。如果性质为真,则仿真继续进行;如果性质为假,则触发错误。 -
$assume
语句用于假设某个性质为真。如果性质为假,则触发错误。 -
并发断言可以与仿真代码并行运行,可以同时检查多个性质。并发断言可以对时序性质进行建模,例如时钟周期、状态转换等。
-
并发断言的例子: 模块fifo实现了一个FIFO(First-In First-Out)缓冲区。
并发断言p1用于检查在写入数据和读取数据时,读指针和写指针之间的空间和数据是否满足要求
。如果并发断言失败,则会通过$error语句输出错误信息。
module fifo;
logic [7:0] data;
logic [2:0] count;
logic write;
logic read;
// 在写入数据前,进程等待读指针和写指针之间的空间
always_ff @(posedge clk) begin
if (write && count < 7)
count <= count + 1<