如何使用 genvar 变量访问输入信号?
How can I use genvar variable to access input signals?
我有一个包含 30 个向量输入的模块。我需要有关 for 循环分配的帮助。
module test (
input [3:0] i0,
input [3:0] i1,
input [3:0] i2,
...
input [3:0] i29
);
wire [3:0] int_i [0:29];
genvar j;
generate
for (j=0; j<30; j=j+1) begin
assign int_i[j] = i(j) //need help here
end
endgenerate
endmodule
在 Verilog 中有没有一种简单的方法可以做到这一点。我知道我可以通过创建二维输入向量在 System verilog 中做到这一点。但是有没有办法在 Verilog 中做到这一点?
在 Verilog 中执行此操作的唯一方法是将二维数组展平为单个向量。
module test (
input [30*4-1:0] i;
);
wire [3:0] int_i [0:29];
genvar j;
for (j=0; j<30; j=j+1) begin
assign int_i[j] = i[4*j+:4];
end
这是 systemverilog 的一个特性,在 verilog 中,这应该是将输入数组打包成一个向量(我包含了一个参数以实现自动化):
module test
# (
parameter WIDTH = 4,
parameter DEPTH = 30
) (input [(WIDTH*DEPTH)-1:0] i);
wire [WIDTH-1:0] int_i [DEPTH-1:0];
genvar j;
generate
for(j=0; j<DEPTH; j=j+1) begin: assign_i_gen //..(don't forget to name the for loop)
assign int_i[j] = i[(WIDTH*j)+:WIDTH];
end
endgenerate
我有一个包含 30 个向量输入的模块。我需要有关 for 循环分配的帮助。
module test (
input [3:0] i0,
input [3:0] i1,
input [3:0] i2,
...
input [3:0] i29
);
wire [3:0] int_i [0:29];
genvar j;
generate
for (j=0; j<30; j=j+1) begin
assign int_i[j] = i(j) //need help here
end
endgenerate
endmodule
在 Verilog 中有没有一种简单的方法可以做到这一点。我知道我可以通过创建二维输入向量在 System verilog 中做到这一点。但是有没有办法在 Verilog 中做到这一点?
在 Verilog 中执行此操作的唯一方法是将二维数组展平为单个向量。
module test (
input [30*4-1:0] i;
);
wire [3:0] int_i [0:29];
genvar j;
for (j=0; j<30; j=j+1) begin
assign int_i[j] = i[4*j+:4];
end
这是 systemverilog 的一个特性,在 verilog 中,这应该是将输入数组打包成一个向量(我包含了一个参数以实现自动化):
module test
# (
parameter WIDTH = 4,
parameter DEPTH = 30
) (input [(WIDTH*DEPTH)-1:0] i);
wire [WIDTH-1:0] int_i [DEPTH-1:0];
genvar j;
generate
for(j=0; j<DEPTH; j=j+1) begin: assign_i_gen //..(don't forget to name the for loop)
assign int_i[j] = i[(WIDTH*j)+:WIDTH];
end
endgenerate