|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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]
平时没怎么注意过这个,所以比较疑惑,还烦请前辈赐教~
|
|