16-在属性中使用形参,在属性中使用局部变量,以及在序列匹配时调用子程序

资料来源

(1) sv assertion;

(2) 硅芯思见:【84】SVA中的形式参数 (qq.com)

(3) 硅芯思见:【93】SVA中的局部变量和子程序 (qq.com)

1.在属性中使用形参

(1) 可以用定义形参的方式来重用一些常用的属性.

(2) SVA允许使用属性的形参来定义时钟. 这样,属性可以应用在使用不同时钟的相似设计模块中;同样的,时序延迟也可以参数化,这使得属性的定义更具有普遍性;

(3) 除了可以针对不同参数使用相似属性结构实现对不同信号的检测外,带有参数的属性还可以结合其他结构(如generate)实现对于多位宽信号的检查;

 

注1:下图为将时钟作为参数传入属性的示例:

注2:不止属性中可以用形参,序列中也可以用形参;下图中给序列的形参指定了类型为logic,其实可以不指定,不指定时其类型取决于实际传入参数的类型;

注3:可以在定义形参时,为形参赋默认值;

注4:构建具有形参的属性或者sequence的流程如下:

2.在属性中使用局部变量

(1) 在序列或者属性的内部可以局部定义变量,而且可以对这种变量进行赋值;

(2) 变量接着子序列放置,用逗号隔开。如果子序列匹配,那么变量赋值语句执行每次序列被尝试匹配时,会产生变量的一个新的备份。

注1:在有形式参数的属性或序列中,局部变量名不能与形参名相同;

注2:局部变量不能用于延迟范围中指示延迟,因为延迟范围需要在代码析构时就必须确定,而局部变量只有在调用时才存在(???);

注3:局部变量不能用于信号位宽的指定,因为信号位宽需要在代码析构时就必须确定,而局部变量只有在调用时才存在(???);

注4:局部变量仅限于在当前定义的序列或者属性中可见;

 

3.在序列匹配时调用子程序

(1) SVA可以在序列每次成功匹配时调用子程序。同一序列中定义的局部变量可以作为参数传给这些子程序。

注1:子程序的用法与局部变量类似,都是附加在相应的子序列之后,用逗号分隔;在子序列匹配后,调用子程序;

注2:可以将局部变量作为子程序的参数进行传递;

(2)示例

 

(3)示例

 

 

 

posted on 2021-11-25 16:28  _见贤_思齐  阅读(151)  评论(0编辑  收藏  举报

导航