确实,我有一个任务来读取寄存器:
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)处理到任务的调用中。
我希望我现在能给出更清晰的描述,并且有人知道如何做。
答案 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)],...);