在我们日常的使用中,宏定义一般如下:

`define DUT_TOP tb.dut_top

如果需要用到信号的hierarchy,需要借助宏定义,代码会简洁很多,但是直接用下面代码表示

$display("%s", `DUT_TOP);

会出现下面编译错误,是因为vcs直接把`DUT_TOP展开了

Error-[XMRE] Cross-module reference resolution error
a.sv, 8Error found while trying to resolve cross-module reference.token 'dut'.  Originating module 'tb', first module hit 'tb'.Source info: $display("path = %s", tb.dut);

此时需要将宏定义转义成string类型

`define DUT_TOP tb.dut
`define conv_str(DUT_TOP) `"DUT_TOP`"

这样就可以使用了,具体使用方法如下:

$display("hier = %s", `conv_str(`DUT_TOP));

放在结果如下:

Chronologic VCS simulator copyright 1991-2021
Contains Synopsys proprietary information.
Compiler version S-2021.09_Full64; Runtime version S-2021.09_Full64;  May 18 16:33 2022
hier = tb.dutV C S   S i m u l a t i o n   R e p o r t
Time: 0
CPU Time:      0.200 seconds;       Data structure size:   0.0Mb
Wed May 18 16:33:42 2022

详细测试代码如下:

关于sv中宏定义`define的增强使用相关推荐

  1. C#中宏定义#define、预处理#if #else #endif的使用

    C#中预处理的使用: 预处理指令并不会被编译为执行代码中的指令,但使用预处理指令可以选择编译程序中的哪部分代码.一般在调试代码时或在发布不同功能等级的软件版本中使用. 需要特别注意的是,宏定义必须在C ...

  2. 宏定义Define的一些用法

    ---转载百度文库 一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处 ...

  3. c语言中宏定义的字符替换#define M(x,y,z) x*y+z

    C语言中宏定义的字符替换问题 例子: 在c语言中定义如下宏 #define M(x,y,z) x*y+z 给定如下程序 #include<stdio.h> #include<stdl ...

  4. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

  5. [C++]宏定义#define A B C

    C++关于宏定义的用法,有形如#define A B C的格式,此时B和C都是已知的字符串常量. 在宏定义中. 可以把两个常量字符串连在一起 如果#define A "a" 那么宏 ...

  6. C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解

    宏定义是用一个标识符来表示一个字符串,在宏调用中将用该字符串代替宏名.给程序员提供了便利,使程序更加清晰,便于阅读和理解,进一步提高了程序的运行效率,对于嵌入式系统而言,为了能达到性能要求,宏是一种很 ...

  7. libev中ev_loop结构体中宏定义的理解

    libev源代码由于有各种宏定义,十分让人费解,作者这么写确实使得代码很简练,但也给读者的阅读带来了巨大的麻烦,下面将分析下ev_loop这个结构体的定义,加深对作者代码简化的理解,先上代码: str ...

  8. C语言中宏定义的使用

    1. 引言 1.1 宏定义的基本语法 1.2 宏定义的优点 1.3 宏定义的缺点 1.4 宏还是函数 2 使用宏时的注意点 2.1 算符优先级问题 2.2 分号吞噬问题 2.3 宏参数重复调用 2.4 ...

  9. verilog 定义位宽为1的_Verilog中宏定义位宽带来的问题

    Verilog 中宏定义位宽带来的问题 宏定义在 C 语言程序中的使用司空见惯,他的好处就在于可以大大提高代码的可读性和可 移植性.而在 verilog 中,也支持这个语法,在很多开源代码中也都能看到 ...

最新文章

  1. Python学习心得(二) 字典Dictionary
  2. C#读写xml文件最简单方法(操作配置文件)
  3. 阿里云搭建git mac客户端 2个git账号
  4. 基于Schema配置的AOP
  5. python菱形画法解释_用Python画棱形
  6. 收藏!数据建模最全知识体系解读
  7. 无心剑2022年七绝83首
  8. docker 安装portainer、gogs、redis、mongodb、es、rabbitmq、mysql、jenkins、harbor
  9. opencv 重用代码块记录
  10. Puppet apply命令参数介绍(五)
  11. LINUX编译libusb
  12. 数据库之SQL更新语句中update set from用法
  13. Threshold函数详解
  14. springboot基于微信小程序的高校学生疫情在校封闭管理系统的设计与实现毕业设计源码240904
  15. php计算周长,PHP实现的简单三角形、矩形周长面积计算器分享
  16. MySQL索引原理(标贝科技)
  17. (一)微信小程序支付前后台
  18. 【@Scheduled定时任务】
  19. javax.net.ssl.SSLException 两种解决方法 链接https接口
  20. 如何在sql内写循环语句

热门文章

  1. 安卓开发培训!没想到一个Handler还有中高级几种问法,看这一篇就够了!
  2. ppt如何转换pdf
  3. pdf转换软件在线转换
  4. mysql新加一列_mysql如何增加表中新的列?
  5. 从零开始学python第12天,每天至少半小时
  6. Android _自定义芝麻积分(装逼神器)
  7. 实验室安全事故读后感
  8. Vue-router 使用编程式导航多次执行会报错NavigationDuplicated的解决方法
  9. java判断扑克牌是否为顺子_程序算法设计题,判断扑克牌中的顺子
  10. 前端的短信验证码如何做(和后端配合)