断言使用思考

断言工作机制 “单个时间线上关键点监控一系列事件的发生与否 (做设计的'经络图')

断言为什么能够验证RTL

某种意义上可以将写断言的语法元素统称为 '断言语言',它和描述实现rtl电路的verilog属于同等存在,这就是说,我们可以用verilog和'断言语言'分别实现同一个逻辑功能(下图), 因而'断言语言'可以作为rtl的验证参考模型

'断言语言'是一种更接近人理解的自然语言,和rtl区别在于,它不需要实现所有细节而是总结性的表述,比如加法器,rtl要实现一堆逻辑,而断言只用'+'即可,这点和c模型有些类似;

断言验证为什么高效,高效的同时质量保证从何而来

'断言语言'不会直接实现整个rtl设计,而是从rtl中选取关键点,然后用断言描述其中的逻辑关系;这点体现了一种"针对拓扑关键点验证来表征整体的"验证思想

理论来源在于硬件逻辑虽然由众多门级组成,但实际上门与门之间是有互相关联的,互相关联的们会共同呈现特定目的的逻辑块,比如一个fifo、buf、同步单元等,对于这些逻辑块我们只需要监控若干等于‘咽喉’的位置就足以保证整个逻辑块的功能,从而避免理论上的绝对完全遍历(实际只要一定负责的设计,其内部多级的条件关系,来自顶层的激励穷尽权利也很难做到绝对完遍历,因而绝对完全遍历做不到,最合适的是一定幅度的随机遍历+断言思想体现的针对拓扑关键点验证为佳)

诚然,拓扑关键点验证省时省力,但是找对关键点很重要,没有找对点,随机又没覆盖到,就会导致bug逃逸,这里给出实际层面的建议就是分割策略

  • 首先是对业界惯常使用的基本单元如fifo、buf等,它们的关键点比较明确;
  • 然后延续该思想,在设计逻辑时有意识将大逻辑实现为高内聚的若干小逻辑块,逻辑块之间如无必要不要交互,非要交互采用业界成熟总线接口如握手、axi等,这样逻辑块的交互点天然就是关键点;
  • 最后对逻辑运行最为关键的起点、终点、转折点加以监控(实际仿真经验说明,逻辑层面[非物理]的bug诞生绝无可能平空发生,定然是关键变量变化时由于考虑不周导致,例如重复循环操作中,只要开头对,中间环节没有突发变化时是很难发生错误,逻辑之间的关联性犹如铁轨一样会牢牢控制住异常变化苗头,直至考虑不周的异常因素切入才会出错,其中变化因素就是监控点);

断言使用思路

  • 拓扑网状结构

断言监控是一种网状监控,如同一张渔网,渔网内部每个节点可以是断言定义的sequence,渔网怎么编织对应sequece的嵌套和逻辑组合,最终渔网回收的主线好比一个断言监控器对应'|-> |=>'这类和时间线关联的语法描述符,表明单一时间线;一张网对应一个property;一个设计可以有若干property;

渔网编织的好,网住鱼多还结实,同理断言监控网络也要层次分明,总分结合,形成覆盖整个rtl设计的监控网络:

bottom-up:实例化的基本单元(fifo、buf等)、基本设计(同步、接口等)内部定义监控点;逻辑块的交互点;顶层接口和工作阶段转折点;

  • 单个时间线

不同时间线不能混到看一条时间线,举例,a |-> b 和 c |-> d不能逻辑混合到一个property(一条时间线)中,假设a、b、c和d是2条跑道上的4个运动员,谁快谁慢不定,终点只有一名计时员,假设他先看到c到了,后面他就只能等d,在c到达后,d到达前,a或b即便到了,他也顾不上;

  • 断言复杂度思考

断言语法有限能够实现的复杂度相对有限,但是这正是断言的优势所在,它本身实现是简短精炼的,因此它实现的功能可以是免验证的,我们可以用它验rtl;反之假想,断言也支持和verilog等同的复杂实现,那么它本身的免验证效果就失去了,那时同一功能,断言和verilog实现谁都可能有问题,谁都无法作为参考模型,还多了一倍的工作量; 

  • 断言语法点把握

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值