我想有一个像下面这样的结构来基于字符串队列声明变量名。下面没有编译。所以我想知道在Systemverilog中是否可以采用类似的方法。
下面是我想要实际实现的简化版本。
`define declare_int(NAME) int ``NAME`` = 1;
string str_q[$] = {"a", "b", "c"};
foreach (str_q[i]) begin
`declare_int(str_q[i])
end
注意:我知道`declare_int(a)
会转换为int a = 1;
。但是如上例所示,我需要一个foreach循环来多次调用这个宏,因此宏的输入必须是某种数据类型,就像这种情况下的string
一样。目的是在队列随时间变化时自动声明东西。
换句话说,如何定义`declare_int
宏,以便`declare_int("a")
转换为int a = 1;
?
答案 0 :(得分:2)
由于Verilog没有被解释但是在模拟中编译,我怀疑在运行时动态声明变量的方法。但是,有一些工作可以达到类似的效果。
我认为你能得到的最接近的东西是一个关联数组,其中键作为你的名字(a,b,c)和值的值。例如,代替您的代码,您将拥有:
int vars[string];
string str_q[$] = {"a", "b", "c"};
foreach (str_q[i]) begin
vars[str_q[i]] = 1;
end
...
// To use the variable, just do:
vars["a"];
有关关联数组的更多信息:http://www.asic-world.com/systemverilog/data_types13.html