在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: eesub

[求助] systemverilog如何实现可变参数宏

[复制链接]
 楼主| 发表于 2013-12-21 17:10:02 | 显示全部楼层
回复 10# ligang1986718


   哥,我要这样的功能有啥用。。。
   好好看看1楼好吗?
发表于 2013-12-22 10:55:39 | 显示全部楼层
本帖最后由 ligang1986718 于 2013-12-22 11:00 编辑

回复 11# eesub

你要的功能:   我想把 "hello,world,%d",'h8 当做统一的参数传进去,单是编译器会检测到“,”认为是两个参数。



大家不要说DIS的宏给两个参数,因为我可能需要打印这样的信息,"hello,world,%d,%d",'h8,'h19
我的方式:
`define DIS1 "hello,world,%d",'h8
`define DIS2 "hello,world,%d,%h",'h8,5'd15
`define DIS3 "hello,world,%d,%h,%d",'h8,5'd15,6'h11
`define DIS11 "hello,world,%d"
`define DIS22 "hello,world,%d,%h"
`define DIS33 "hello,world,%d,%h,%d"


$display(`DIS1);
$display(`DIS2);
$display(`DIS3);
$display(`DIS11,data1);
$display(`DIS22,data1,data2);
$display(`DIS33,data1,data2,data3);


还有,请好好看看我上一次的回答:我问楼主你是要实现这个功能吗?你就这么不客气的答复?好心帮你花时间回答,我找罪受...


如果是你1楼写的方式 ,就是DIS换成$display有意义? 一定要实现你1楼的写法那么7楼给你的回答就是最好的,好好想想你要实现什么功能。

7# 的回答:define DIS $display 就可以实现一楼的操作
发表于 2013-12-27 17:52:33 | 显示全部楼层
回复 12# ligang1986718
楼主说了要实行的是类似C里面可变参数宏,像下面这样的

[size=12.800000190734863px]#defien err(...)    fprintf(stderr, __AV_ARGS__)

[size=12.800000190734863px]宏调用 err("%s file total %dMB.\n", "hello.c", 2) ;
[size=12.800000190734863px]预处理后为: fprintf(stderr, %s file total %dMB.\n", "hello.c",2) ;


[size=12.800000190734863px]SV就是没法定义可变参数的宏。


[size=12.800000190734863px]你这一堆 DIS** 有什么意义么?没有任何灵活性
 楼主| 发表于 2013-12-27 20:18:56 | 显示全部楼层
回复 13# nativeda


   谢谢你帮我回答。
发表于 2013-12-28 20:56:55 | 显示全部楼层
回复 13# nativeda


   `define DIS(str) $display(str)

然后,`DIS("hello,world,%d",'h8);

`DIS("hello,world,%d",'h8);比$display("hello,world,%d",'h8);优点在哪里?7#的回答不能实现这个功能?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-15 14:26 , Processed in 0.020123 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表