【问题标题】:How can we put an integer variable into a task string?我们如何将整数变量放入任务字符串中?
【发布时间】:2019-09-03 09:25:10
【问题描述】:

确实,我有一个读取寄存器的任务:

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)处理到任务调用中。

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

【问题讨论】:

  • 嗨,欢迎来到 StackOverflow!很难理解你的问题。您能否尝试更清楚地编写问题并突出显示您的代码,以便人们可以更好地帮助您。
  • 好的,抱歉我的解释不够清楚。

标签: system-verilog


【解决方案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)],...);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2011-12-09
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    相关资源
    最近更新 更多