完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
6个回答
|
|
对于任何设计验证 (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 工程师想要覆盖相同宽度的多个变量的 walk0/walk1 模式仓,那么他/她可以创建和使用宏,用于所有需要 walk1/walk0 模式仓覆盖的此类信号。 示例: 宏定义: 宏的用法: 宏在覆盖组中的的应用 很多时候,在验证项目中,需要在不同的位置编写相同的覆盖率,例如,主组件和从组件中的相同代码。我们可以为覆盖组定义通用宏,该宏可用于所有此类组件。 示例: 宏定义: 宏的用法: "STRING"是"bus_cg_macro"宏的参数。考虑到使用宏的"STRING"参数,将替换覆盖组、覆盖点及仓。 |
|
|
|
宏在SV断言中的应用
与覆盖率一样,在许多DV 项目中,我们有一些常见的断言,可以在多个位置和不同的组件中使用。 例如,在主机和从机中需要检查,信号值在没有重置时,是否在每个时钟周期中都会不断变化。我们可以定义一个宏,并在主机和从机中使用它。 宏定义: |
|
|
|
只有小组成员才能发言,加入小组>>
695 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
653浏览 9评论
649浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
781浏览 6评论
628浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:05 , Processed in 1.236411 second(s), Total 91, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号