System verilog 如何将整数变量放入任务字符串中?

System verilog 如何将整数变量放入任务字符串中?,system-verilog,System Verilog,实际上,我的任务是读取寄存器: task read_reg(bit[31:0] reg_addr,bit [0:31] rd_beat...); 如您所见,第一个输入参数是32位寄存器的地址。寄存器地址通过以下参数定义: parameter int REG_0 = 32'h80440050; //R 因此,当调用任务读取寄存器时,可以将参数传递给任务: read_reg(REG_0,….); 阅读例如REG_0 现在,这是我想进一步参数化的任务调用,因此我不想硬编码参数名REG_0,但我想

实际上,我的任务是读取寄存器:

task read_reg(bit[31:0] reg_addr,bit [0:31] rd_beat...);
如您所见,第一个输入参数是32位寄存器的地址。寄存器地址通过以下参数定义:

parameter int REG_0 = 32'h80440050; //R
因此,当调用任务读取寄存器时,可以将参数传递给任务:

read_reg(REG_0,….);
阅读例如REG_0

现在,这是我想进一步参数化的任务调用,因此我不想硬编码参数名REG_0,但我想通过另一个变量部分处理它:

bit [1:0] num=0;
然后,在调用任务时,我想使用变量num,而不是硬编码REG_0,例如:

read_reg(REG_$num$,...)
只是我不知道如何将上面示例中的num值0转换为任务的调用


我希望我现在能够给出一个更清晰的描述,并且有人知道如何做到这一点。

无法从变量中形成标识符名称。你需要一个数组。你能行

parameter int REG[4]  = {32'h80440050, //R
                         32'h80450050,
                        ...};
read_reg(REG[num],...)
也可以创建关联数组

int REG[string] = '{"REG_0":REG_0,"REG_1":REG_1,...};
read_reg(REG[$sformatf("REG_%0d",num)],...);

嗨,欢迎来到StackOverflow!很难理解你的问题。你能不能试着把问题写得更清楚,突出你的代码,这样人们就能更好地帮助你。好的,很抱歉,我的解释不够清楚。