SystemVerilog已经支持参数化数据类型?

和BlueSpec和Chisel等等高级硬件语言相比,SystemVerilog缺乏对硬件模块(module)的泛型定义。或者说,SystemVerilog还不能将module对待成class从而实现对module的继承。SystemVerilog的泛型支持依赖于参数(parameter),但是长久以来parameter本身必须是以一个编译时可求值的常数(SystemVerilog已经支持浮点数的参数)。但是现在,SystemVerilog看来已经开始支持类型parameter,这绝对是个好事。如果参数可以是一个类型而不是一个数,那么我们就可以传一个结构类型作为参数到模块,实现模块的接口的泛型支持。不过一个很重要的问题是:

好像现在的类型参数只能被使用于class而不能用于module!?

如果参考IEEE Std 1800-2012 Section 6.25 Parameterized data types

virtual class C#(parameter type T = logic, parameter SIZE = 1);
  typedef logic [SIZE-1:0] t_vector;
  typedef T t_array [SIZE-1:0];
  typedef struct {
    t_vector m0 [2*SIZE-1:0];
    t_array m1;
  } t_struct;
endclass

module top ();
  typedef logic [7:0] t_t0;
  C#(t_t0,3)::t_vector v0; C#(t_t0,3)::t_array a0;
  C#(bit,4)::t_struct s0;
endmodule

其中,class C的参数T就是一个类型参数,用来定义t_array的类型。在module top中,a0的数据类型实际上是logic [7:0]。但是这种类型的参数式定义却使用了对象这么扭曲的方式。我估计下面的代码估计还不支持吧。(要是可以该省多少代码哦。。。)

module top#(parameter type T = logic) ();
  T a0;
endmodule
Advertisements

关于 W. Song
Research Associate in the University of Cambridge

One Response to SystemVerilog已经支持参数化数据类型?

  1. 匿名 says:

    good!

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: