当断言检查失败时会发生什么?

What happens when an assertion check fails?

uvm 用户指南 1.1 的第 56 页指出:

以下是断言检查的简单示例。此断言验证传输的大小字段 是 1、2、4 或 8。否则,断言失败。

function void ubus_master_monitor::check_transfer_size();
    check_transfer_size : assert(trans_collected.size == 1 ||
    trans_collected.size == 2 || trans_collected.size == 4 ||
    trans_collected.size == 8) else begin
    // Call DUT error: Invalid transfer size!
    end
endfunction : check_transfer_size

我有几个问题:

一个。在函数声明中,声明一个名字像some_name::another_name的函数是什么意思?

乙。如果函数没有在函数内部声明,它如何知道 trans_collected 是什么?

摄氏度。当某些条件不满足时,assert会做什么?

A。在ubus_master_monitor::check_transfer_size中,ubus_master_monitor是class的名字,check_transfer_size是函数的名字。请参阅 IEEE 标准 1800-2017,第 8.24 节 块外声明

It is convenient to be able to move method definitions out of the body of the class declaration.

在 class 主体中,会有这样的声明:

class ubus_master_monitor;
    extern function void check_transfer_size();
endclass

B。据推测,存在一个名为trans_collected.

的class级变量

C。如果 assert 失败,将执行 else 子句中的代码。此外,模拟器特定消息可能会写入日志文件并显示在控制台上。请参阅 Std,第 16 节。断言