声明矢量端口而不在Verilog中指定它们的大小

时间:2018-10-31 21:31:42

标签: verilog

在Verilog(2001?)中声明模块时,是否可以说某些端口是向量而未指出它们的大小?此处的目标是处理任何大小的矢量端口,而不必通过参数指定大小

我知道我可以编写类似于Verilog的内容,但是我想知道是否有办法摆脱多余的WIDTH_DATA参数:

module my_module
#(
  parameter  WIDTH_DATA = 48
)
(
  input  Clk, En,
  input  [WIDTH_DATA-1:0] Data_in,
  output Ready,
  output reg [WIDTH_DATA-1:0] Data_out
);

在VHDL中,可以使用如下声明:

entity my_module is
  port (
    Clk      : in std_ulogic;
    En       : in std_ulogic;
    Data_in  : in std_ulogic_vector;
    Ready    : out std_ulogic;
    Data_out : out std_ulogic_vector
  );
end entity;

然后,模块实现可以在编译时使用Data_in来了解Data_in'length的大小(与Data_out相同)。

1 个答案:

答案 0 :(得分:1)

在Verilog中是不可能的。

您可以使用interface构造在SystemVerilog中完成所需的操作。您可以参数化一个接口,然后将该接口(或一组接口)连接到my_module

interface my_intf #(int WIDTH);
  logic [WIDTH-1:0] data;
endinterface
module my_module(input clk, en,
                 my_intf in, out,
                 output ready);
  // $bits(in.data) - gives you the WIDTH
  // typedef type(out.data)  out_type // local typedef 
endmodule
module top;
  my_intf #(8) I1;
  my_intf #(16) I2;
  bit clk, en, ready;
  my_module M1 (.clk,.en, .in(I1), .out(I2), .ready);
endmodule