как сделать круговое смещение для массива через Verilog - PullRequest
1 голос
/ 28 февраля 2020

На языке C существует массив x [0], x [1], ..., x [127], для заданного числа k в [0, 127) мы различаем операцию сдвига влево как y [n] = x [(n + k)% 128], для n = 0,1,2 ..., 127

Теперь я пытаюсь реализовать это в FPGA, так как их так много я хотел бы получить результат как можно быстрее.

Я сделал это следующим образом,

module LEFT_SHIFT(
    input clk,
    input rst,
    input [31:0] data_in[0:127])
    input [6:0]  shift,
    output reg [31:0] data_ou[0:127]
);

integer i;
always @ (posedge clk)
begin
    if (rst)
        for (i=0;i<128;i++)
            data_out[i] <= 32'bb0;
    else
        for (i=0;i<128;i++)
            data_out[(i+shift)%128] = data_in[i];
end

endmodule

Этот код хорош с точки зрения скорости, ресурса и времени? Я похож на ОЗУ, но ОЗУ не выводит всю память одновременно.

Большое спасибо,

Джерри

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Если вы замените оператор Mod (%) на репликацию входных данных, чтобы сделать круговой сдвиг, вы могли бы упростить задачу для компилятора. Я попробовал это на инструменте синтеза от крупного поставщика инструментов ASI C, и результаты были совершенно другими.

if (rst)
  for (integer i=0;i<128;i++)
    data_out[i] <= 32'b0;
else begin      
  logic [31:0] tmp [0:255];
  for (integer i=0;i<128;i++) begin
    // replicate input data
    tmp[i]     = data_in[i];
    tmp[i+128] = data_in[i];
  end

  for (integer i=0;i<128;i++)
    data_out[i] <= tmp[128-shift+i];
end
0 голосов
/ 29 февраля 2020

Это огромный мультиплексор, который потребляет много логических c ресурсов в ПЛИС. Я видел такие вещи раньше, чем sh инструменты. Возможно, вы захотите добавить туда более одного регистра.

Что касается скорости, ресурса и времени, то это зависит от того, насколько быстро вы хотите, чтобы он работал, и сколько у вас свободных ресурсов. Это может быть хорошо на низкой скорости на большой FPGA или невозможно на более высокой скорости или на маленькой / полной FPGA. Но нет необходимости рассуждать о ресурсах и сроках, просто создайте их и посмотрите, что произойдет.

...