我可以在systemverilog中合成一个参数化函数,其中结构用作参数吗?

我可以在systemverilog中合成一个参数化函数,其中结构用作参数吗?,verilog,system-verilog,synthesis,Verilog,System Verilog,Synthesis,我试图合成一个参数化函数,其中结构作为参数给出。我在参数化函数的开头出现以下错误 “标记“虚拟”处或附近出现语法错误。” 我试图编译这个简单的包 package def; typedef struct packed { logic[10:0] SIZE1; logic[10:0] SIZE2; } my_struct; endpackage import def::*; virtual class my_class #(parameter my_struct new

我试图合成一个参数化函数,其中结构作为参数给出。我在参数化函数的开头出现以下错误 “标记“虚拟”处或附近出现语法错误。”

我试图编译这个简单的包

   package def;

typedef struct packed {
    logic[10:0] SIZE1;
    logic[10:0] SIZE2;
} my_struct;
endpackage


import def::*;

virtual class my_class #(parameter my_struct new_struct = '{10,11});
static function [new_struct.SIZE2-1:0] adder (input [new_struct.SIZE1-1:0] a, b);
return a+b; 
endfunction
endclass

module top 
#(parameter my_struct new_struct2 = '{63,64})
(input logic [new_struct2.SIZE1-1:0] a, b,
output logic [new_struct2.SIZE2-1:0] y) ;
assign y = my_class #(.new_struct(new_struct2))::adder(a,b); 
endmodule
我做错什么了吗?或者Synopsys DC不支持此功能

(更新:代码已更新,可使用Synopsys DC合成此代码)

根据§5.6.7使用静态类的参数化任务/函数参数,该类必须是
虚拟的
,并在
$unit
声明空间中定义。这意味着该类不能在包内定义。正如论文所指出的,这是一个奇怪的需求

尝试将类移出包。您也可以尝试将函数导入
$unit
范围,但不确定这是否可行

...
endpackage : def
import def::my_class; // or def::*;
...

所以我从包中删除了这个类,现在它可以用Synopsys DC合成。我尝试了import def::my_class,但它不起作用。我已经更新了问题中可以合成的代码。可以将类移出包。那么,如何在多个文件中重用该类?