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

时间:2019-09-03 09:25:10

标签: 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硬编码到其中,但我想部分地通过另一个变量来处理它:

bit [1:0] num=0;

然后我不希望在调用任务时对REG_0进行硬编码,而是要为它使用变量“ num”,所以类似:

read_reg(REG_$num$,...)

只是我不知道如何将num的值(在上面的示例中为0)处理到任务的调用中。

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

1 个答案:

答案 0 :(得分:1)

无法通过变量形成标识符名称。您需要一个数组。你可以做

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)],...);