2
Каков правильный способ смещения 2D-массива n произвольных бит? Если это вообще возможно. Скажем, у меня естьСдвиг 2D-массива в Verilog
module foo(input clk,
input [31:0] shift_amount);
.
.
.
reg [31:0] array[0:79];
.
.
.
[email protected](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
Я хочу, чтобы переместить все вверх по п (3 для этого примера), например
0: c0ffeeee
1: c0dec0de
2: 13e1441a
3: 12441111
4: fffff22a
.
.
.
77: 00000000
78: 00000000
79: 00000000
Это можно сделать нэ? Если да, то как?
Исправить. Если синтезатор умный, он может дать меньший мультиплексор для более крупных индексов. Например, индекс 79 имеет два возможных входа, индекс 77 имеет четыре возможных входа. Индекс 0 - худший случай, 81-к-1 mux (сам + 79 других записей + 32'b0). Может возникнуть проблема синхронизации с таким большим мультиплексором. Если это так, вам понадобится конвейер, который будет использовать дополнительные часы. – Greg