System verilog 为什么在对变量进行宏赋值时,值会发生变化?
在下面的代码中<代码>`附加(芒果)代码>返回25。其中asSystem verilog 为什么在对变量进行宏赋值时,值会发生变化?,system-verilog,System Verilog,在下面的代码中`附加(芒果)返回25。其中asval=`append(MANGO)存储在val中的值是53。为什么会这样 `define T_APPLE_FRUIT 13 `define T_MANGO_FRUIT 25 `define append(MOD) `"`T_``MOD``_FRUIT`" module test; bit[7:0] val; initial begin $display(`append(MANGO)); $display ("\n\n
val=`append(MANGO)代码>存储在val中的值是53。为什么会这样
`define T_APPLE_FRUIT 13
`define T_MANGO_FRUIT 25
`define append(MOD) `"`T_``MOD``_FRUIT`"
module test;
bit[7:0] val;
initial begin
$display(`append(MANGO));
$display ("\n\n%d\n",val);
val = `T_MANGO_FRUIT;
$display ("%d\n",val);
val = `append(MANGO);
$display ("\n%d\n",val);
end
endmodule
第一个$display获取引用字符串作为参数,正如在宏中定义的那样。它应该显示这个字符串,没有其他内容。不知道为什么编译器会在那里执行错误的任务并显示一个数字
将“val”定义为位[7:0]
。这使得val
成为初始值为0
的2状态变量。因此,您的第一个$display应该打印0
'
将T\u MANGO\u FRUIT
宏的值指定给val
,该值为25,并按此显示
将一个字符数组作为双引号字符串(“T_MANGO_FRUIT”)分配给val
。同样,我也不知道为什么会得到53,它应该是84,这是第一个字符的ascii码T
。你使用了哪种编译器
我猜您希望将append
定义为:
`define append(MOD) `T_``MOD``_FRUIT
非常感谢您查看代码。一旦我指定了基本说明符并更改为“`define append(MOD)
T
MOD\u FRUIT`”。工作正常。
`define append(MOD) `T_``MOD``_FRUIT