将2D数组转换为任意位的正确方法是什么?如果可能的话。说我有
module foo(input clk,
input [31:0] shift_amount);
.
.
.
reg [31:0] array[0:79];
.
.
.
always@(posedge clk) begin
if(!reset)
// so something
else
// shift my array by the shift amount
end
endmodule
对于1D数组,我可以做类似于数组<< shift_amount
但是说我有这样的数组
0: XXXXXXXX
1: XXXXXXXX
2: XXXXXXXX
3: c0ffeeee
4: c0dec0de
.
.
79: 1234568A
我想把所有东西都移到n位置(本例中为3),比如
0: c0ffeeee
1: c0dec0de
2: 13e1441a
3: 12441111
4: fffff22a
.
.
.
77: 00000000
78: 00000000
79: 00000000
可以吗?如果是这样的话?
答案 0 :(得分:2)
使用for循环。请记住使用索引保护并使用非阻塞分配(<=
)。
//...
integer i;
always@(posedge clk) begin
if (!reset) begin
// so something
end
else begin
// shift my array by the shift amount
for (i=0; i<80; i=i+1)
if (i+shift_amount < 80) // index guard
array[i] <= array[i+shift_amount];
else
array[i] <= 32'b0;
end
end
//...