Ошибка списка чувствительности

Я хочу вычислить сумму элементов массива. Элементы массива назначаются на каждом нарастающем фронте тактового сигнала (последовательно). Я не хочу получать сумму элементов на фронте следующего тактового сигнала, поэтому расчет суммы должен быть комбинационным. Я могу получить правильный результат в симуляции без каких-либо ошибок, но мой код не синтезируется в ISE (инструмент Xilinx Synthesis). Я работаю над Spartan3.

Мой код:

always @* begin
    sum = 0;
    for (i=0; i<K; i=i+1)
        sum = sum + shiftReg[i];    
end

ОШИБКА:

Xst: 902 - Неожиданное событие shiftReg в списке чувствительности всегда блока.

Искал решения. Один из способов - добавить все элементы shiftReg в список чувствительности, но в в моем проекте количество элементов K (K - параметр).


person Amir    schedule 21.04.2015    source источник


Ответы (1)


Боюсь, это ограничение синтезатора XST. В том же решении, которое вы предоставляете, говорится, что эта проблема была решена для устройств Virtex 6 и Spartan 6, поэтому это должно быть какое-то ограничение в отношении ресурсов в Spartan 3 или, что более вероятно, небольшая лень со стороны инженеров Xilinx.

Я протестировал этот примерный модуль:

module addall (
  input wire clk,
  input wire [3:0] addr,
  input wire load,
  input wire [7:0] din,
  output reg [7:0] tot
);

  reg [7:0] sr[0:15];
  always @(posedge clk) begin
    if (load)
      sr[addr] <= din;
  end

  integer i;
  always @* begin
    tot = 8'h00;
    for (i=0;i<=15;i=i+1)
        tot = tot + sr[i];
  end
endmodule

Хорошо синтезируется на Icarus Verilog + YOSIS 0.3.0 http://www.edaplayground.com/x/5q9 < / а>

Хорошо синтезируется в XST 12.4 с использованием устройства Spartan 6

Если я перейду на Spartan 3E, у меня будет та же ошибка, что и у вас с той же версией XST.

Возможный обходной путь: используйте Icarus Verilog с целью vhdl, чтобы преобразовать вызывающий ошибку модуль в VHDL и добавить его в свой проект вместо исходного модуля Verilog.

person mcleod_ideafix    schedule 21.04.2015
comment
Большое спасибо mcleod_ideafix, тестировал свой код на Spartan6. Эта ошибка исправлена. Я думаю ты прав. Вероятно, это связано с ограничениями в Spartan3. - person Amir; 21.04.2015