我们如何将整数变量放入任务字符串中?
Posted
技术标签:
【中文标题】我们如何将整数变量放入任务字符串中?【英文标题】: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)处理到任务调用中。
我希望我现在能够给出更清晰的描述,并且希望有人知道如何做到这一点。
【问题讨论】:
嗨,欢迎来到 ***!很难理解你的问题。您能否尝试更清楚地编写问题并突出显示您的代码,以便人们可以更好地帮助您。 好的,抱歉我的解释不够清楚。 【参考方案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)],...);
【讨论】:
以上是关于我们如何将整数变量放入任务字符串中?的主要内容,如果未能解决你的问题,请参考以下文章