SystemVerilog Assertions应用指南 Chapter1.33 在蕴含中使用 if/else

        SVA允许在使用蕴含的属性的后续算子中使用“if/else”语句。
        属性 p_if_else检査如果信号“ start”的下降沿被检测到,就是个有效开始,接着一个时钟周期后,信号“a”或者信号“b”为高。在现行算子成功匹配时,后续算子有两个可能的路径。
        1.如果信号“a”为高,那么信号“c”必须间歇地重复两次为高,且在下一个时钟周期,信号“e”必须为高。
        2.如果信号“a”不为高,那么信号“d”必须间歇地重复两次为高,且在下一个时钟周期,信号“f”必须为高。注意,在检验信号“a”的后续算子中有优先级。

property p_if_else;
	@(posedge clk)
		($fell(start) ##1 (a || b))  |->
			if(a)
				(c[->2] ##1 e)
			else 
				(d[->2] ##1 f)
endproperty

a_if_else : assert property (p_if_else);

        如果不用“ if/else”构造来重写这个属性,需要用三个单独的属性来实现。由于“ if/else”有优先级,两个信号导致了如下所示的三种不同的可能结果。

        可以发现,如果信号“a”和“b”都为高,那么会执行信号“a”的“if”块,因为它的优先级高。重写的三个属性如下所示。

property p_if_else_leaf1;
	@(posedge clk)
		($fell(start) #31 a) |-> (c[->2] ##1 e);
endproperty

a_if_else_leaf1:
	assert property(p_if_else_leaf1);
	
property p_if_else_leaf2;
	@(posedge clk)
		($fell(start) ##1 ) |-> (d[->2] ##1 f);
endproperty

a_if_else_leaf2:
	assert property(p_if_else_leaf2);
	
a_if_else_leaf2 :
		asser property(p_if_else_leaf2);
		
property p_if_else_leaf3;
	@(posedge clk)
		($fell(start) ##1 (a && b) |-> (c[->2] ##1 e));
endproperty

a_if_else_leaf3:
	asser property(p_if_else_leaf3);


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值