天天看点

第12章 ‘expect’和‘assume’12.1 ‘expect’ 12.2 'assume'和静态形式(功能)验证

12.1 ‘expect’

第12章 ‘expect’和‘assume’12.1 ‘expect’ 12.2 'assume'和静态形式(功能)验证

                                                       图12.1'expect'-基础

 'expect'在程序块中与'assert'具有相同的语法(而不是语义)。请注意,'expect'只能在程序块中使用。它不能像assert / property / sequence那样在程序块之外使用,但要记住,'assert'既可以在过程块中使用,也可以在外部使用。那么,'assert'和'expect'之间有什么区别?

 'expect'是一个阻塞语句,而'assert'是一个非阻塞语句。阻塞意味着程序块将等待'expect'序列完成(通过或失败)。对于'assert'非阻塞意味着过程块将触发'assert'语句并继续块中的下一个语句。 “断言”状态将继续与程序代码并行执行。请注意,无论是在程序块外还是在程序块内,“assert”行为都是相同的。它总是在其自己的线程上与其余的逻辑并行执行。

请参考图12.1中的仿真日志。您注意到程序代码等待“expect”完成(即阻止程序代码的执行),并且只有在完成'expect'时才执行后续的$display。图12.2强调了“expect”语义的进一步细微差别。图中的注释是不言自明的。关键在于'expect'不会从前面的程序时钟继承时钟。在它所期望的序列(或属性)中需要一个明确的时钟或者有自己声明。

第12章 ‘expect’和‘assume’12.1 ‘expect’ 12.2 'assume'和静态形式(功能)验证

                                                      图12.2'expect'-错误条件

 12.2 'assume'和静态形式(功能)验证

第12章 ‘expect’和‘assume’12.1 ‘expect’ 12.2 'assume'和静态形式(功能)验证

                                                   图12.3 'assume'和形式验证

 这是一个有趣的运算符。 “assume”将属性指定为环境的假设。什么是环境? “假设”最有用的“环境”是静态形式验证。静态形式是一种方法,通过这种方法,形式化算法可以执行输入的所有可能的组合和顺序可能性,以执行给定逻辑块的所有可能的“逻辑锥”并检查断言是否成立。如果您没有指定任何约束条件(例如对于5个输入(a,b,c,d,e)块),则在此类验证期间,如果您未指定任何约束条件,如'assume'a = 0且b = 1)那么静态形式工具将尝试在组合和时间(如果需要)域中探索5个输入的所有可能组合。没有任何通过“assume”提供的限制,静态正式工具可能会遇到一种叫做“状态空间爆炸”的情况。正如描述所暗示的,如果太多的输入不受约束,工具可能会放弃。这就是'assume'陈述的出处。

那么,它在仿真中的如何运行呢?图12.3中的例子简单地表明,如果属性没有‘assume’与之关联,那么它将像'断言'一样行事。如果与‘assune’关联的属性被发现为假,则仿真失败。