返回介绍

17.3 并发断言概述

发布于 2020-09-09 22:55:53 字数 1316 浏览 1075 评论 0 收藏 0

并发断言描述了贯穿时间的行为。与即时断言基于时钟的计算模型不同,并发断言仅在一个时钟标记出现的时候被计算。在计算中使用的变量值是采样的值。通过这种方式,我们可以获得一个可预测的结果,而不管仿真器内部的对事件进行排序和计算的机制如何。这种模型也对应于从RTL描述获得的硬件解释的综合模型。

断言中使用的变量值在一个时隙的Preponed区域被采样,并且断言在Observe区域被计算。这一点在第十四章 调度语义中解释。

一个并发断言规范采用的时序模型基于时钟标记并使用一个通用的时钟周期概念。一个时钟的定义由用户明确地说明并且在表达式之间可以存在不同。

一个时钟标记是时间上的一个原子瞬间,它本身并不具有在时间上的持续期。在任意仿真时间,一个时钟应该只标记一次,并且在这个仿真时间上采样的值被用于当前断言的计算。在一个断言中,采样值是一个时钟标记上变量唯一有效的值。图17-1显示了随着时钟的推进一个变量的值。在时钟标记1和2,req信号的值是低。在时钟标记3,采样的值为高并保持为高直到时钟标记6。变量req在时钟标记6处的采样值为低并保持为低直到时钟标记10。注意,仿真值跃变到高发生在时钟标记9。然而,时钟标记9处的采样值仍为低。

图17-1 — 在仿真标记上采样一个变量

在一个表达式中使用的表达式总是被绑定到一个时钟定义。采样值被用来计算值变化表达式或者用来确定一个序列匹配的布尔子表达式。

注意:

  • 一个重要的一点是要确保定义的时钟行为是没有毛刺的。否则会采样到错误的值。
  • 如果一个出现在时钟表达式中变量也出现在一个断言表达式中,那么这个变量的值在两个使用中可以是不同的。变量的当前值被用在时钟表达式中,而变量的采样值则用于断言。
控制序列计算的时钟表达式可以比仅仅是单一的信号名更加复杂。诸如(clk && gating_signal)和(clk iff gating_signal)之类的表达式可以被用来代表一个门时钟。其它更加复杂的表达式也是可能的。然而,为了确保正确的系统行为并尽可能真正地符合基于周期的语义,一个时钟表达式中的信号必须是无毛刺的,并且在任何仿真时间只能跃变一次。

并发断言的一个例子如下:

base_rule1: assert property (cont_prop(rst,in1,in2)) pass_stat else fail_stat;

关键字property将一个并发断言与一个即时断言区分开来。并发断言的语法在17.13节中描述。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文