Command line arguments 如何在systemverilog中以加号形式获取值数组?

Command line arguments 如何在systemverilog中以加号形式获取值数组?,command-line-arguments,verilog,system-verilog,Command Line Arguments,Verilog,System Verilog,如何在systemverilog中获取作为参数的值数组,我的要求是我需要从命令行获取未定义大小的命令数组,以及如何将这些参数获取到数组/队列 例如: +CMDS=READ、WRITE、READ\u N\u WRITE:应将其放入数组?根据(第21.6节“命令行输入”),系统函数$value$plusargs接受字符串,而不是数组。您必须在Verilog中解析字符串,这可能非常麻烦(请参阅第6.16节“字符串数据类型”了解字符串运算符) 其他选择可能是: 使用几个加号:+CMD1=READ+CMD

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

例如:

+CMDS=READ、WRITE、READ\u N\u WRITE
:应将其放入数组?

根据(第21.6节“命令行输入”),系统函数
$value$plusargs
接受字符串,而不是数组。您必须在Verilog中解析字符串,这可能非常麻烦(请参阅第6.16节“字符串数据类型”了解字符串运算符)

其他选择可能是:

  • 使用几个加号:
    +CMD1=READ+CMD2=WRITE
  • 通过
    $readmemh
    从文件中读取数据,但仅限于数字数据
  • 通过
    $fopen

  • $value$plusargs
    不支持数组,但支持字符串。参见§21.6“命令行输入”。在SystemVerilog中解析字符串虽然有点麻烦,但仍然非常可行,特别是当分隔符表示为单个字符时。这里是一个通用字符串解析器,使用SystemVerilog队列对索引和字符串方法
    substr
    进行重新编码,这些方法在§7.10“队列”和§6.16.8“substr”中定义

    然后将其与
    $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]);
    
    完整工作示例:

    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]);