Система Verilog, как суммировать значения массива? - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь суммировать значения массива с помощью System Verilog.

Мои данные объявлены так:

reg     signed  [23:0]    n2 [31:0];
reg     signed  [15:0]    w2 [195:0];

w2 - это регистр со значением в нем.

for(int i2=0; i2<32; i2++) begin
        for(int  j2=0; j2<196; j2++) begin
            n2[i2] <= n2[i2] + w2[j2];
        end
    end
end

Мне нужно сложить 196 * 16 бит (* 32), поэтому требуется 24 бит (* 32)?

Я попытался смоделировать свой дизайн, и у меня есть только X в n2 рег.

Кроме того, я запускаю анализ RTL и открываю разработанный проект, и у меня появляется следующее предупреждение:

[Synth 8-324] index 10 out диапазона

Он указывает на линию:

for(int  j2=0; j2<196; j2++) begin

, но я не знаю почему.

1 Ответ

1 голос
/ 28 марта 2020

У меня есть только X в n2 reg.

Конечно, у вас есть.
В начале n2 не инициализируется, поэтому он содержит все X-es. Теперь вы добавляете числа к X-es, которые все еще дают вам X-es. Это так же, как если бы вы добавляли неинициализированную переменную в большинстве языков.
Попробуйте это:

for(int i2=0; i2<32; i2++) begin
    n2[i2] <= w2[0];
    for(int  j2=1; j2<196; j2++) begin
        n2[i2] <= n2[i2] + w2[j2];
    end
end

(Я сохранил ваш <=, поскольку не знаю контекста. Но У меня есть сомнения, это правильно)

У меня есть предупреждение ...

Я не могу помочь вам с вашим предупреждением синтезатора. Я не вижу ничего очевидного неправильно, но опять же вы предоставили только очень маленький фрагмент кода.

...