在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1519|回复: 2

[求助] systemverilog task 引用省略某些output

[复制链接]
发表于 2023-4-27 12:36:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 nannan666 于 2023-4-27 12:38 编辑

各位前辈,小弟遇到一个问题,比较困惑。我在一个sv中定义了一个结构体以及一个task,输入name,获取command和address。
但是我在其他位置调用这个函数的时候,想省略掉一些不需要的值,就会报错。具体如下:

sv:

typedef struct {
    string name;
    logic [15:0] command;
    logic [15:0] address;
}test001_stru;

test001_stru test001[] = '{
    '{ "TEST1", 16'h5608,16'h0108 },
    '{ "TEST2", 16'h1608,16'h1008 },
    '{ "DD", 16'h160C,16'h0021 }
};
task automatic get_test001_value(string cmd_name, output logic [15:0] cmd_value,output logic [15:0] cmd_address);
    for (int i = 0; i < test001.size(); i++)
        begin
            if (test001.name == cmd_name)
                 begin
                      cmd_value   = test001.command;
                      cmd_address = test001.address;
                      $display("Command for name %s is %h", cmd_name, cmd_value,cmd_address);
                      return;
                 end
            end
    $error("Command not found for name %s", cmd_name);
    endtask
  
我在其他位置调用这个task:

       logic [15:0] cmd;
       logic [15:0] reg_addr;

get_test001_value("TEST1",cmd);

我省略了address这个output,这个语句是可以实现的,Xcelium 也没有错误。
不过当我想省略cmd时,编译器就报错了

get_test001_value("TEST1", ,  reg_addr);
Explicit default argument not declared forcorresponding formal argument [SystemVerilog].

很好奇为何第二种就会出问题,如果是因为在task中没有初值的话,那么为何第一次就可以呢。

后面我在task中加初值,
task automatic get_test001_value(string cmd_name, output logic [15:0] cmd_value=16'h0,output logic [15:0] cmd_address=16'h0);
编译器又报错default value declared for output or inoutargument [SystemVerilog]

平时没怎么注意过这个,所以比较疑惑,还烦请前辈赐教~


发表于 2023-4-27 13:39:52 | 显示全部楼层
1.根据SV绿皮书图1,图2的意思,形参可设置默认值, 就可以对部分参数进行传参,即调用task(.c(c)),task(,,c)等用法。

未设置没有默认值的形参,调用时不可省略。
2.根据图3的SV参考。output类型形参不可以给默认值,也就不可以省略。
SV1.png
SV2.png
SV3.png
 楼主| 发表于 2023-4-27 17:21:35 | 显示全部楼层


花伴星空 发表于 2023-4-27 13:39
1.根据SV绿皮书图1,图2的意思,形参可设置默认值, 就可以对部分参数进行传参,即调用task(.c(c)),task(, ...


谢谢您的指导啦。不过还是有点奇怪为啥我省略掉第二个output  Xcelium 没有报错。

get_test001_value("TEST1",cmd);



难道是编译器允许这么写

弱弱问您一下,您发的图三是哪一本书的资料哈~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-6 07:56 , Processed in 0.018671 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表