一些有用的SVA小技巧

持续更新一些有用的SVA语法/语句:

1. “intersect”构造
intersect构造和and构造相同,即:用来逻辑地组合两个系列,当两个序列都成功时整个属性才成功。intersect构造要求两个序列必须在相同时刻开始且在相同时刻结束,即:两个序列的起始点和结束点都要相同。用处:

使用intersect控制序列的长度
如,

property p62;
    @(posedge clk) 1[*2:5] intersect
        (a ##[1:$] b ##[1:$] c);
endproperty
a62:assert property(p62);


(1)表达式a ##[1:$ ] b #̲#[1:$] c表明,如果信号a为高,那么从下一个时钟周期开始信号b最终将为高,接着在下一个时钟周期开始信号c最终也会为高。也就是说这个序列每当信号a为高时就开始,并且可能一直到整个仿真结束时才成功
(2)使用1[*2:5] intersect来加以约束,1[*2:5]表示1持续2~5个周期
(3)最终属性P62的含义为:从序列的开始有效点(信号a为高)到序列成功的结束点(信号c为高),一共经过2~5个时钟周期
2. if else

property my_chk();
  @(posedge clk) disable iff(~rst_n)
  a|b |-> if(a) ($past(a, 2) === 1'b1)
          else  ($past(a, 1) === 1'b1);
endproperty

3.“throughout”构造
蕴含:允许定义前提条件的一项技术。如,要对一个指定的序列进行检验,必须某个前提条件为真(先行算子)。蕴含只在时钟边沿检验前提条件一次,然后就开始检验后续算子部分,因此它不检测先行算子是否一直保持为真。
“throughout”运算符:保证某些条件在整个序列的验证过程中一直为真。其基本语法是:
   (expression) throughout (sequence definition)
例如:

property p9;
    @(posedge clk) $fell(start) |-> 
        (!start) throughout (##1 (!a && !b) ##1 (c[->3]) ##1 (a&&b));
endproperty
a9:assert property(p9);


属性p9检查以下内容:
(1)在信号start的下降沿开始检查(先行算子:$fell(start))
(2)start下降沿一个周期后,检查a和b是否均为0,如果为0则继续检查c[->3],如果匹配成功,则一个周期后检查a和b是否均为1,即:检查表达式(##1 (!a && !b) ##1 (c[->3]) ##1 (a&&b))
(3)序列检查在信号a和b下降沿(!a&&!b)与信号a和b上升沿(a&&b)之间,信号c应该连续或间断地出现3次高电平(c[->3])
(4)在整个检验过程中,信号start保持为低( (!start) throughout),如图所示
在第二个点,虽然表达式(##1 (!a && !b) ##1 (c[->3]) ##1 (a&&b))成立,但是start后面变为高电平,使整个序列失败。

4."within"构造
“within”构造允许在一个序列中定义另一个序列。基本语法:
  seq1 within seq2
表示seq1在seq2的开始到结束的范围内发生,且序列seq2的开始匹配点必须在seq1的开始匹配点之前,序列seq2的结束匹配点必须在seq1的结束匹配点之后,即:seq2将seq1包在里面。例如:

property p10;
    @(posedge clk) $fell(start) |->
        ((!a&&!b) ##1 (c[->3]) ##1 (a&&b)) within
        ($fell(start) ##[5:10] $rose(start))
endproperty
a10:assert property(p10)

5.局部变量

在序列或者属性的内部可以局部定义变量,而且可以对这种变量进行赋值。变量接着子序列放置,用逗号隔开。如果子序列匹配,那么变量赋值语句执行。每次序列被尝试匹配前,会产生变量的一个新的备份。

创建计数器

property check_counter;
  int L_cnt;
  @(posedge clk)
   (
      ($rose(start),L_cnt = 0)##1
      (1,L_cnt = L_cnt+1)[*0:$] ##1 (L_cnt == 30) |-> (irq ==1)
   );
endproperty


可变的时钟延迟

property check_counter;
  int L_cnt;
  @(posedge clk)iff(!rst_n)
   (
      ($fell(start),L_cnt = 30)##1
      (1,L_cnt = L_cnt-1)[*0:$] ##1 (L_cnt == 0) |-> (irq == 1)
   );
endproperty
 

                           

   参考文档:

【SVA】SVA基础知识_嵌套的蕴含-CSDN博客       

【SVA】assertion局部变量的应用_sva assertion中变量timing window-CSDN博客                 

数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值