gpt4 book ai didi

command-line-arguments - 如何在systemverilog中获取作为plusargs的值数组?

转载 作者:行者123 更新时间:2023-12-04 23:02:15 29 4
gpt4 key购买 nike

如何在 systemverilog 中获取值数组作为参数,我的要求是我需要从命令行获取未定义大小的命令数组,以及如何将这些参数获取到数组/队列

例如:
+CMDS=READ,WRITE,READ_N_WRITE : 应该是数组吧?

最佳答案

$value$plusargs不支持数组,它支持字符串。见 IEEE Std 1800-2012第 21.6 节“命令行输入”。在 SystemVerilog 中解析字符串只是有点麻烦,但仍然非常可行,尤其是当分隔符表示为单个字符时。这是一个通用的字符串解析器,它使用 SystemVerilog 队列来重新编码索引和字符串方法 substr定义于 IEEE Std 1800-2012 § 7.10 “队列”和 § 6.16.8 “Substr”

function void parse(output string out [], input byte separator, input string in);
int index [$]; // queue
foreach(in[i]) begin // find commas
if (in[i]==separator) begin
index.push_back(i-1); // index before comma
index.push_back(i+1); // index after comma
end
end
index.push_front(0); // first index
index.push_back(in.len()-1); // last index
out = new[index.size()/2];
foreach (out[i]) begin
out[i] = in.substr(index[2*i],index[2*i+1]);
/*$display("cmd[%0d] == in.substr(%0d,%0d) == \"%s\"",
i, index[2*i],index[2*i+1], out[i]); */
end
endfunction : parse

然后与 $value$plusargs 结合使用解析输入:
string cmd[];
string plusarg_string;
if ( $value$plusargs("CMDS=%s",plusarg_string) ) begin
parse(cmd, ",", plusarg_string);
end
foreach(cmd[i])
$display("CMD[%0d]:'%s'",i,cmd[i]);

完整的工作示例: http://www.edaplayground.com/s/6/570

关于command-line-arguments - 如何在systemverilog中获取作为plusargs的值数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20519349/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com