我正在尝试实现一个数组右移器。
它接受一个整数数组,然后将所有内容右移到指定索引位置的右侧,并在索引位置插入指定的整数值。
例如
如果 arr = {1, 2, 3, 4, 5, 6, 7, .... 16}; idx = 4;插入值=0; 然后 new_arr = {1, 2, 3, 0, 4, 5, 6, ... 15}
下面是我的sv代码
// Right shifts the arrays from given index, and inserts given value.
`timescale 1ns / 1ps
module indexed_rsh(
input wire [511:0] arr,
input wire [3:0] idx,
input wire [31:0] insert_value,
output wire [511:0] new_arr
);
logic [0:15][31:0] arr_sig, new_arr_sig;
assign arr_sig = arr;
assign new_arr = new_arr_sig;
genvar i;
generate
for (i=0; i < 16; i = i + 1)
begin
always_comb
if(idx == i)
new_arr_sig [0:15][31:0] = {arr_sig[0:i-1][31:0], insert_value, arr_sig[i:14][31:0]};
end
endgenerate
endmodule
在 EDAplayground 上,我在第 21 行收到语法错误,并在第 23 行收到“错误:无效模块项”。
在 Vivado 中,我在第 23 行收到一条错误消息“前缀中不允许范围”。 如果前缀中不允许使用范围,那么索引 2D 数组的好方法是什么?
这是在给定的 32 位索引偏移处将 32 位值插入到 512 位值中的一种方法:
module indexed_rsh (
input wire [511:0] arr,
input wire [3:0] idx,
input wire [31:0] insert_value,
output reg [511:0] new_arr
);
always_comb begin
new_arr = arr;
for (int i=0; i<32; i++) begin
new_arr[i + (32 * idx)] = insert_value[i];
end
end
endmodule