返回介绍

16.4 消除测试平台的竞争

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

在Verilog中具有两个主要的不确定性源。第一个是激活的事件以一个任意的顺序处理。第二个是行为块中没有时间控制结构的语句不会作为一个事件执行。然而,从测试平台的角度看,这些影响都是并不重要的细节问题。测试平台的主要任务是为被测设计产生有效的输入激励,并验证被测设计是否能够正确地操作。此外,对于使用周期抽象的测试平台而言,无论是检查当前的输出还是为下一个周期计算激励,它仅与系统的稳态相关。形式工具也已这种方式工作。

在敏感于设计信号(在模块内声明而不是程序块)变化(例如更新事件)的程序块中的语句在Reactive区域被调度。考虑一个包含@(clk)语句的程序块,其中clk是某个模块中的一个设计信号。clk信号的每一个跃变都会引起语句S1被调度到Reactive区域。同样,程序块中的initial块也在Reactive区域被调度;相反,模块中的initial块则在Active区域被调度。另外,从程序内驱动的设计信号必须使用无阻塞赋值进行赋值并且在NBA区域被更新。因此,即使无延时驱动的信号也会作为一个事件被传递到设计。使用这个行为,正确的周期语义可以无竞争地被建模;因此使得基于程序的测试平台能够与周期控制的断言和形式工具相兼容。

由于程序在Reactive区域调度事件,因此时钟控制块结构对于自动地采样前一个时间步值或时钟周期的稳态值非常有用。专门通过具有#0输入时滞的时钟控制模块读取设计值的程序对于读-写竞争是不敏感的。值得注意的是:简单地采样输入信号(或者在时钟控制块输入上设置非零时滞)不会消除潜在的竞争。正确的输入采样仅仅解决了单个的时钟控制块。对于多个时钟,交叠或同时的时钟以任意顺序处理仍然是一个潜在的竞争源。通过在所有的设计事件被处理了之后(包括被无阻塞赋值驱动的时钟),在Reactive区域调度其执行,程序结构解决了这方面的问题。

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

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

发布评论

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