路科验证的个人空间 https://blog.eetop.cn/1561828 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

设计验证项目中的强大功能

热度 1已有 1561 次阅读| 2020-12-10 11:13 |系统分类:芯片设计| IC验证

 

对于任何设计验证 (DV) 项目,遵循最佳编程规范可让团队成员的日子过得更轻松。另一方面,当代码被重用时,或者当代码从一个所有者移交给另一个所有者以完成将来的任何改进时,不良的代码风格会导致很多问题。有时,它会导致代码中的大量返工和修补程序,使代码很难在项目的后期阶段或将来需要重用的项目中得以维护。

 

很多时候,在做设计验证项目时,需要将较大的代码段分成较小的块,以使代码更易于阅读和调试(也用于可重用的目的)。这种较小的代码片段可用于 DV 环境中的不同位置,用于多个组件/模块等。

 

任务和函数可用于将大型复杂代码分解为更小、更简单的代码片段,这些代码易于阅读和理解。函数和任务主要用于在验证环境中的几个位置执行常用功能,但它们的使用仅限于定义它们的模块或类访问边界。对于一些常见且经常用于不同且完全隔离的模块的代码,由于访问边界限制,无法直接重用函数/任务。

 

以简单示例为例,如果任务函数具有两个不同的监视器和两个不同的接口的通用代码,则 DV 工程师大多需要在两个监视器中添加重复的代码。在许多其他情况下,我们也会看到代码重复。"System Verilog 宏"是解决此类重复问题的众多解决方案之一。

 

如果正确使用了 SV 环境,这种宏非常有效,有助于节省大量时间。本文讨论了此类 SV 宏及其语法,并提供了一些示例,说明在设计验证期间可用于节省时间。

 

 

什么是宏?

术语"宏"是指替换一行或几行文本代码。使用指令"'define"为替换代码创建宏。宏一旦定义后,它可以在编译单元范围内有需要的任意位置使用

 

它可以用 (') 字符后跟宏名称调用。可以使用参数定义宏。参数可用于自定义宏以广泛使用,如函数任务。可以使用默认值定义此类宏参数,这样,如果 DV 工程师不传递任何特定值,宏将替换默认值。

 

 

宏示例

单行宏:

如上面的示例代码所示,宏"val"和"addition"是单行宏。

 

多行宏:

 

上述代码是多行宏的示例。如上所述,对于多行宏,新行前面有一个反斜杠"\"。如果行的反斜杠不存在,则它被视为宏的最后一行。反斜杠将不存在于使用宏和替换实际宏代码的实际代码中。

 

注意:行末的斜杠"\"后不应有空格或字符,否则编译器会报错。

 

 

根据以下三个特殊字符(引号)的用法以及参数定义宏的可能语法,它替换的实际代码具有不同的含义。可以使用以下三个引号形成所有可能的宏:

 

 

1. “``” (两个撇号)

"''"的引用可以用于给定的参数形成信号/变量名称。

 

示例:

宏定义:

 

宏的用法:

 

宏替换的实际代码 :

 

我们可以看到 ARG1 = 3 用于形成变量的名称。(即m_mst_3和mst_3_lcl)

 

 

2. “`” “(撇号后跟双引号)

 

“`” “的引用可用于将参数解释为字符串。

 

示例:

宏定义:

 

宏的用法:

 

宏替换的实际代码:

 

We can see the ARG1 is replaced with string name “a” in the $display statement.

我们可以 在显示语句中看到 ARG1被替换为字符串名称"a"。

 

 

3. "`\`" "(撇号后跟反斜杠,再撇号后跟双引号)

“ `\`” “引用可用于转义序列替换参数。

 

示例:

宏定义:

 

宏的用法:

 

宏替换的实际代码:

 

我们可以看到,参数在执行$display行中被替换成了"reg_a",打印结果为“Reg name : “reg_a”, value:`hXYZ"。

 

 

下一节显示了用例场景的基本示例,其中宏可以根据 DV 的需求使用。此类宏的用法可以扩展到更多用例。

 

 

宏在覆盖点中的应用

如果 DV 工程师想要覆盖相同宽度的多个变量的 walk0/walk1 模式仓,那么他/她可以创建和使用宏,用于所有需要 walk1/walk0 模式仓覆盖的此类信号。

 

示例:

宏定义:

 

宏的用法:

 

 

宏在覆盖组中的的应用

很多时候,在验证项目中,需要在不同的位置编写相同的覆盖率,例如,主组件和从组件中的相同代码。我们可以为覆盖组定义通用宏,该宏可用于所有此类组件。

 

示例:

宏定义:

 

宏的用法:

 

"STRING"是"bus_cg_macro"宏的参数。考虑到使用宏的"STRING"参数,将替换覆盖组、覆盖点及仓。

 

 

宏在SV断言中的应用

与覆盖率一样,在许多DV 项目中,我们有一些常见的断言,可以在多个位置和不同的组件中使用。

 

例如,在主机和从机中需要检查,信号值在没有重置时,是否在每个时钟周期中都会不断变化。我们可以定义一个宏,并在主机和从机中使用它。

 

宏定义:

 

宏的用法:

 

 

宏在测试案例中的应用

在自检寄存器写入/读取测试中,每次读取后,将针对预期的读取数据检查读取值。考虑到设计的复杂性,我们可能有多个块,对于每个块,我们可能有相应的寄存器测试。对于每个这样的测试,我们可以有一个通用的宏进行自检。

 

自检测宏:

 

宏的用法:

 

 

宏在程序块的应用

宏可以用以涵盖多个位置常见的过程块代码。

 

程序块中的宏:

 

宏的用法:

 

本文介绍了一些宏示例,但 DV 工程师可以根据项目要求和可重用目的创建和使用类似的宏。

 

 

结论

基于本文中解释的正确语法来使用SV的宏,DV 工程师可以在较小的区块中分解较大的复杂代码,并在许多地方重用它。宏在定义后可以在编译单元的任意位置使用。工程师可以通过输入参数以用宏来形成标识符名称。

 

此外,他/她可以重用普通标识符/名称使用的名称。例如,"signal_name"和"`signal_name"会有不同的处理。他/她可以多次定义宏,在宏调用时,编译器读取最新定义,并考虑该调用。

 

SV 宏是最强大的功能之一,如果可以在了解透彻后正确使用,并在DV项目中明智运用,宏可以帮助节省大量的时间,并使代码更具可读性和效率。

 

 

关于作者

Ronak Bhatt是eInfochips的验证工程师。他在 ASIC 设计验证方面拥有 18 年的行业经验,在 IP 级和芯片级功能验证方面都拥有工作经验。他在功能和基于 SVA 的验证方面也拥有实践经验。

 

原文链接:https://www.design-reuse.com/articles/45979/system-verilog-macro-a-powerful-feature-for-design-verification-projects.html

 

 

扫描上图二维码可直达课程页面,马上试听

 

往期精彩:

路科发布| 稳中带涨!25w成芯片校招薪资平均底!2020应届秋招数据全面分析!

相约今晚8点 2020 IC秋招经验分享与数据分析

V2Pro 2020秋M1 我对你的迷惑和选择都深以为然

V2Pro春季班普遍学撑了,秋季班7月报名你还敢来么

UVM RAL模型:用法和应用

我们准备做第二期线下培训,依旧认真且严肃

如果你突然被裁员了,你的Plan B是什么?

[彩虹糖带你入门UVM]

理解UVM-1.2到IEEE1800.2的变化,掌握这3点就够

 


点赞

发表评论 评论 (1 个评论)

回复 gskaixx1314 2021-6-18 16:24
     每篇文章都看了 hhh  感谢

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 23:24 , Processed in 0.017023 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部