System verilog 使用文件名字符串作为SystemVerilog接口参数?

System verilog 使用文件名字符串作为SystemVerilog接口参数?,system-verilog,System Verilog,是否可以使用字符串作为SystemVerilog接口参数。我有4个相同接口的实例,我想知道是否可以为每个实例包含不同的断言文件 我的界面如下所示: interface dai_if #(P_WD_DATA = 24, string P_FILE_NAME = "assertion_file_name")(); //Internal Signal Defined Here `include "assertion_file_name"

是否可以使用字符串作为SystemVerilog接口参数。我有4个相同接口的实例,我想知道是否可以为每个实例包含不同的断言文件

我的界面如下所示:

interface dai_if #(P_WD_DATA = 24,
                   string P_FILE_NAME = "assertion_file_name")();


    //Internal Signal Defined Here


    `include "assertion_file_name"

endinterface : dai_if
dai_if #(.P_WD_DATA(P_WD_DATA),
         .P_FILE_NAME(DAI_SER_IN_FILE))
         dai_ser_ivif();
在顶层,我实例化了四个实例,代码如下:

module tb_top;

    parameter P_WD_DATA = 24;
    parameter string DAI_SER_IN_FILE  = "dai_ser_in_checkers.v";
    parameter string DAI_SER_OUT_FILE = "dai_ser_out_checkers.v";
    parameter string DAI_PAR_IN_FILE  = "dai_par_in_checkers.v";
    parameter string DAI_PAR_OUT_FILE = "dai_par_out_checkers.v";
然后我举例说明了每个接口,如下所示:

interface dai_if #(P_WD_DATA = 24,
                   string P_FILE_NAME = "assertion_file_name")();


    //Internal Signal Defined Here


    `include "assertion_file_name"

endinterface : dai_if
dai_if #(.P_WD_DATA(P_WD_DATA),
         .P_FILE_NAME(DAI_SER_IN_FILE))
         dai_ser_ivif();
这是正确的方法,还是我遗漏了什么


感谢

您不能使用参数来定义包含文件,因为“包含宏”是在参数评估之前很久执行的(请注意,诸如“包含”和“定义”之类的宏是作为预处理的一部分运行的,而参数是在细化过程中定义和使用的;编译的一个阶段)

但是,有一些方法可以获得所需的行为。您可以使用参数字符串有条件地实例化包含文件中的代码,而不是使用参数字符串直接包含文件,如下所示:

module top;
  ...
  myInterface #(.assertType("TYPE1")) myInstance();
  ...

interface myInterface #(parameter assertType = "TYPE0") ();
  ...
  // NOTE: This is NOT inside any process block (like always, initial, etc)
  case (assertType)
    "TYPE0": begin
      `include "assert_type0.sv"
    end
    "TYPE1": begin
      `include "assert_type1.sv"
    end
    "TYPE2": begin
      `include "assert_type2.sv"
    end
  endcase
  ...
endinterface
在上面的例子中,在编译过程中,来自所有文件的所有断言代码都将被包括在内,但只有那些生效的断言代码将包含在参数指定的case分支的文件中,而其他断言代码将保持未实例化状态