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)示例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?