如何将字符串转换为变量名?

时间:2014-10-07 15:39:37

标签: macros verilog

我想有一个像下面这样的结构来基于字符串队列声明变量名。下面没有编译。所以我想知道在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;

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