是否可以在 verilog 中将输入端口作为数组?
Is it possible to take input port as array in verilog?
module median_five(out1,a[0],a[1],a[2],a[3],a[4],en,clka);
input [7:0] a[0:4];
output out1;
endmodule
**报错。
module median_five(out1,a,b,c,d,e,en,clka);
input [7:0] a,b,c,d,e;
output out1;
endmodule
**没错
但我想在数组中输入 a、b、c、d、e,例如:
array[0]<=a;
array[1]<=b;
array[2]<=c;
array[3]<=d;
array[4]<=e;
Verilog 不支持二维数组 作为模块的端口。仅 SystemVerilog 支持此功能。
在 first 代码段中,您正在传递 二维数组 a
作为输入,这是不受支持的。在 后者 的情况下,一个 单维向量 被传递给工作正常的模块。
不清楚您想用 array
做什么。这里有一些选项。您可以 在模块 本身内部声明二维数组。如下所示:
module median_five(out1,a,b,c,d,e,en,clka);
input [7:0] a,b,c,d,e;
output out1;
ref [7:0] array [5]; // array local to module
//always @(posedge clka) // use non blocking assignments
always @(*) // use blocking assignments
begin
// .. Some stuff
array[0]=a;
array[1]=b;
array[2]=c;
array[3]=d;
array[4]=e;
//..
end
//.. some other stuff
endmodule
您可以做的另一件事是 展平数组 并将其作为输入传递。在这里,我已经将 each of 8 bit input (a
,b
,c
etc. each) 扁平化为 single vector (in
) 并相应地分配每个 array 的单个元素。
module top (in, out);
input [31:0] in; // flattened array as input
output [31:0] out;
wire [7:0] array [0:3]; // local array
assign {array[3],array[2],array[1],array[0]} = in;
//... some operations/procedural blocks etc.
assign out = {array[3],array[2],array[1],array[0]};
endmodule
也参考Inputs as two dimensional array link for a similar question. There is a similar blog post。
module median_five(out1,a[0],a[1],a[2],a[3],a[4],en,clka);
input [7:0] a[0:4];
output out1;
endmodule
**报错。
module median_five(out1,a,b,c,d,e,en,clka);
input [7:0] a,b,c,d,e;
output out1;
endmodule
**没错
但我想在数组中输入 a、b、c、d、e,例如:
array[0]<=a;
array[1]<=b;
array[2]<=c;
array[3]<=d;
array[4]<=e;
Verilog 不支持二维数组 作为模块的端口。仅 SystemVerilog 支持此功能。
在 first 代码段中,您正在传递 二维数组 a
作为输入,这是不受支持的。在 后者 的情况下,一个 单维向量 被传递给工作正常的模块。
不清楚您想用 array
做什么。这里有一些选项。您可以 在模块 本身内部声明二维数组。如下所示:
module median_five(out1,a,b,c,d,e,en,clka);
input [7:0] a,b,c,d,e;
output out1;
ref [7:0] array [5]; // array local to module
//always @(posedge clka) // use non blocking assignments
always @(*) // use blocking assignments
begin
// .. Some stuff
array[0]=a;
array[1]=b;
array[2]=c;
array[3]=d;
array[4]=e;
//..
end
//.. some other stuff
endmodule
您可以做的另一件事是 展平数组 并将其作为输入传递。在这里,我已经将 each of 8 bit input (a
,b
,c
etc. each) 扁平化为 single vector (in
) 并相应地分配每个 array 的单个元素。
module top (in, out);
input [31:0] in; // flattened array as input
output [31:0] out;
wire [7:0] array [0:3]; // local array
assign {array[3],array[2],array[1],array[0]} = in;
//... some operations/procedural blocks etc.
assign out = {array[3],array[2],array[1],array[0]};
endmodule
也参考Inputs as two dimensional array link for a similar question. There is a similar blog post。