在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
相同)。
答案 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