SVA 断言翻译笔记(七) 16.15Disable iff用法

16.15 Disable iff 解析

        默认disable iff可以在生成块或者module,interface,program声明中声明,其在默认disable iff声明的范围(作用域)和子范围(子作用域)中,为所有并发断言提供了一种默认禁用情况。默认禁用iff可以在生成块或模块、接口或程序声明中声明。此外,默认值扩展到任何嵌套的模块、接口或程序声明,以及嵌套的生成块。但是,如果嵌套模块、接口、程序声明或生成块本身有一个默认disable iff声明,则默认disable iff用嵌套声明或生成块应用,并从外部覆盖任何默认disable iff。使用作用域解析的disable iff声明中引用的任何信号,都将从声明的作用域解析。

        默认disable iff声明的作用,与声明在该范围内的位置无关,同一模块、接口、程序声明或生成块中多个默认disable iff声明应为错误,该作用域不会扩展到模块、接口、程序声明的任何实例。

        在下面这个例子中,模块m1rst1声明为默认禁用条件,在嵌套模块m2中没有默认disable iff声明,默认禁用条件rst1适用于m1的整个声明和m2的嵌套声明,因此,断言a1和a2的推断禁用条件都是rst1。

module m1;
bit clk, rst1;
default disable iff rst1;
a1: assert property (@(posedge clk) p1); // property p1 is
// defined elsewhere
...
module m2;
bit rst2;
...
a2: assert property (@(posedge clk) p2); // property p2 is
// defined elsewhere
endmodule
...
endmodule

        在嵌套模块m2中有默认disable iff声明,则在m2中此默认禁用条件覆盖了在m1中声明的默认禁用条件。因此,下面这个例子a1的推断禁用条件是rst1,但a2的推断禁用条件是rst2。

module m1;
bit clk, rst1;
default disable iff rst1;
a1: assert property (@(posedge clk) p1); // property p1 is
// defined elsewhere
...
module m2;
bit rst2;
default disable iff rst2;
...
a2: assert property (@(posedge clk) p2); // property p2 is
// defined elsewhere
endmodule
...
endmodule

       以下规则适用于禁用条件的解决方案:

(1)如果断言有一个disable iff分句,则应使用这个分句中指定的禁用条件,并忽略此断言的任何默认disable iff声明;

(2)如果断言不包含一个disable iff分句,但这个断言在默认disable iff声明的作用域中,则这个断言的禁用条件从默认disable iff声明推断出来;

(3)否则,不执行推断(这等价于禁用条件推断为0)。

        下面两个例子说明了这些规则的应用:

module examples_with_default (input logic a, b, clk, rst, rst1);
default disable iff rst;
property p1;
disable iff (rst1) a |=> b;
endproperty
// Disable condition is rst1 - explicitly specified within a1
a1 : assert property (@(posedge clk) disable iff (rst1) a |=> b);
// Disable condition is rst1 - explicitly specified within p1
a2 : assert property (@(posedge clk) p1);
// Disable condition is rst - no explicit specification, inferred from
// default disable iff declaration
a3 : assert property (@(posedge clk) a |=> b);
// Disable condition is 1'b0. This is the only way to
// cancel the effect of default disable.
a4 : assert property (@(posedge clk) disable iff (1'b0) a |=> b);
endmodule
module examples_without_default (input logic a, b, clk, rst);
property p2;
disable iff (rst) a |=> b;
endproperty
// Disable condition is rst - explicitly specified within a5
a5 : assert property (@(posedge clk) disable iff (rst) a |=> b);
// Disable condition is rst - explicitly specified within p2
a6 : assert property (@ (posedge clk) p2);
// No disable condition
a7 : assert property (@ (posedge clk) a |=> b);
endmodule
  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值