因此,通常当您有一个需要可变数量输入的模块时,您可以创建一个连接输入的单个向量,这样您只需要更改向量的宽度 - 而不是输入端口的数量。
例如:
模块加法器
#(
参数WIDTH = 16,//每个输入的大小
参数INPUTS = 4,//输入数量
)
(
输入线[WIDTH * INPUTS-1:0] data_in,
。
。
。
);
//然后你可以将输入重新排列成一个向量数组:
reg [WIDTH-1:0] input_array [0:INPUTS-1];
整数i;
总是@ *
for(i = 0; i 以下为原文
The problem with Verilog is that you can't pass an array in the port list (unless you're actually using SystemVerilog). So typically when you have a module that wants a variable number of inputs, you instead make a single vector that concatenates the inputs so you only need to change the width of the vector - not the number of input ports. For example:
module adder
#(
parameter WIDTH = 16, // size of each input
parameter INPUTS = 4, // number of inputs
)
(
input wire [WIDTH*INPUTS-1:0] data_in,
. . .
);
// then you can re-arrange inputs into an array of vectors:
reg [WIDTH-1:0] input_array [0:INPUTS-1];
integer i;
always @*
for (i = 0;i < INPUTS;i = i + 1) input_array = data_in[i*WIDTH +: WIDTH];
-- Gabor