System verilog 将未打包的数组类型作为参数传递

System verilog 将未打包的数组类型作为参数传递,system-verilog,System Verilog,我创建了一个简单的模块,比如添加一些管道延迟。我将数据类型设置为参数,这样它就可以处理复杂的事情,比如结构。我有这样的想法: module pipe #(parameter type T = int, parameter DELAY = 0) ( input clk, input T data_in, output T data_out); T pipe[DELAY]; always_ff @(posedge clk) begin

我创建了一个简单的模块,比如添加一些管道延迟。我将数据类型设置为参数,这样它就可以处理复杂的事情,比如结构。我有这样的想法:

module pipe
   #(parameter type T = int,
     parameter DELAY = 0)
   (
    input clk,
    input T data_in,
    output T data_out);

   T pipe[DELAY];
   always_ff @(posedge clk) begin
     pipe[0] <= data_in;
     for(int i = 1; i<DEPTH; i++) begin
       pipe[i] <= pipe[i-1];
     end
   end
   assign data_out = pipe[DELAY-1];
endmodule
logic [7:0] my_data [16];
logic [7:0] my_data_delayed [16];
pipe #(.T(type(my_data)), .DELAY(2)) i_pipe
  (
   .clk(clk),
   .data_in(my_data),
   .data_out(my_data_delayed)
  );

是否有方法获取变量的类型,以便将其传递给此参数

在键入问题时,我想出了一个答案。
类型
运算符(中的第6.23节)规范满足我的需要。因此,我的实例如下所示:

module pipe
   #(parameter type T = int,
     parameter DELAY = 0)
   (
    input clk,
    input T data_in,
    output T data_out);

   T pipe[DELAY];
   always_ff @(posedge clk) begin
     pipe[0] <= data_in;
     for(int i = 1; i<DEPTH; i++) begin
       pipe[i] <= pipe[i-1];
     end
   end
   assign data_out = pipe[DELAY-1];
endmodule
logic [7:0] my_data [16];
logic [7:0] my_data_delayed [16];
pipe #(.T(type(my_data)), .DELAY(2)) i_pipe
  (
   .clk(clk),
   .data_in(my_data),
   .data_out(my_data_delayed)
  );
当然,这会导致我的工具中出现编译错误,因此它看起来并没有得到普遍支持


我的工作是创建
管道
模块的实例数组。

您可以使用
typedef
定义数据类型:

typedef logic [7:0] my_type [16];
my_type my_data;
my_type my_data_delayed;
pipe #(.T(my_type), .DELAY(2)) i_pipe
  (
   .clk(clk),
   .data_in(my_data),
   .data_out(my_data_delayed)
  );
剩下的问题是它是否能与您的模拟器一起工作。我在上试用过,与风投合作过,但没有Riviera PRO(收到“此版本不支持”的消息)



我能够得到
typedef结构{logic[7:0]数据[16];}我的类型开始工作。不太干净,但这是一个解决办法。

Cadence Incisive 14.2说“当前此数据类型不支持类型参数重写”@nguthrie,是否使用了
struct
帮助?确实如此,但有点难看。我将继续使用实例数组的当前解决方法。希望有朝一日会支持类型运算符,因为它似乎最有用。