我可以在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,但它不起作用。我已经更新了问题中可以合成的代码。可以将类移出包。那么,如何在多个文件中重用该类?