在Verilog中移动2D数组

时间:2015-02-26 00:21:33

标签: arrays verilog bit-shift

将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

可以吗?如果是这样的话?

1 个答案:

答案 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
//...