第7章 系统函数和任务

7.1 $ onehot,$ onehot0


                                            图7.1 $ onehot和$ onehot0

$ onehot和$ onehot0相当自我解释,在图7.1中进行了解释。请注意,如果表达式为'Z'或'X',$ onehot或$ onehot0将失败。图7.1描述了一个简单的应用。对于任何一个总线grant的确认,只能有一个总线grant。如图所示,这很容易通过$ onehot完成。

 7.2 $ isunknown


                                                        图7.2 $ isunknown

如果表达式未知('X'或'Z'),$ isuncnown则通过。换句话说,如果表达式不是未知的,那么属性将失败!因此,如果您确实希望检测到未知('X'或'Z')失败,则必须否定$isunknown的结果。简单但容易错过。

图7.2中的仿真日志阐明了这个概念。属性'ucheck'指出,如果'bgack'是'真实','busgnt'是未知的。什么?这只是为了展示如果使用$ isunknown而不是'not'会发生什么。

 7.2.1应用$ isunknown


                                                图7.3 $ isunknown应用

图7.3显示了两个简单的应用。首先与我们刚讨论过的一样,但是有一个“not”。

@(posedge clk) bgack |-> not ($isunknown(busgnt));
它说,如果bgack是真的(高),那么busgnt一定不会处于未知状态。 再次注意,$ isunknown在检测未知时返回true。 所以,如果你想要失败,你必须否定结果。 这在上面的仿真日志中显示。 第二个应用(图7.3的底部)说,如果'adrStrobe'为高电平,那么控制信号不可能是未知的。

 7.3 $ countones


扫描二维码关注公众号,回复: 180506 查看本文章

                                            图7.4 $ countones-基础和应用

$countones非常简单但功能强大。请注意,系统函数可用于过程块以及并发属性/断言中。

图7.4显示了一个应用程序,该应用程序声明,如果总线授权确认(bgack)在总线上只能激活1个总线授权(busgnt)。请注意,在本例中我们在程序块中使用$ countones。还要注意,如果整个'busgnt'未知('X')或三态('Z'),断言将失败。图7.5显示了检查格雷码合法性的一种非常简单的方法。

 

                                            图7.5 $countones应用

7.3.1 $countones(作为布尔值)


                                            图7.6 $countones作为布尔值

7.4 $ assertoff,$ asserton,$ assertkill

在许多情况下,如果您希望实现在模块和实例级别的断言的全局控制。回想一下,'disable iff'直接在断言的源头提供本地控制。如图7.7所示,$ assertoff暂时关闭所有断言的执行。请注意,如果在执行$ assertoff时断言正在执行,断言不会被终止。在随后的$ asserton调用中重新启动断言执行。 $ assertkill将会终止你设计中的所有断言,包括已经执行的断言。当下一个断言开始执行时它不会自动启动。它只会在随后的$ asserton中开始执行。 $ asserton:这是默认值。需要在$ assertoff或$ assertkill之后重新启动断言。


                          图7.7$ assertoff,$ asserton,$assertkill-基础

以下是项目部署的典型应用程序,用于在复位期间或异常期间控制断言的执行(如果需要)(图7.8)。

 

                                                图7.8断言控制应用程序

猜你喜欢

转载自blog.csdn.net/zhajio/article/details/80168535