在我的验证环境中,我有不同的寄存器类型,名称几乎相同,只是索引不同,例如:timer_load_0
等timer_load_1
。我尝试创建一个获取 2 个参数的宏:(string
没有索引的寄存器的“名称”)和uint
(寄存器的索引)并返回“连接”寄存器类型的变量。例如我想要这个命令:
my_idx : uint = 0;
create_reg "timer_load" my_idx;
将返回变量timer_load_0
。
我的宏代码:
define <var_by_idx'action> "create_reg <name'any> <idx'exp>" as computed {
var idx : uint = <idx'exp>.as_a(uint);
result = appendf("%s_%d",<name'any>, idx);
};
我得到的编译错误:
Error: Looking for a number but found 'my_idx'
at line 45 in @macros
var idx : uint = <idx'exp>.as_a(uint);
during execution of a define-as-computed macro:
at line 380 in @timer_monitor
create_reg "timer_load" my_idx;
该宏不能识别my_idx
为uint
变量,而是string
.. 感谢您的帮助。