Ошибка синтеза в Verilog - PullRequest
       4

Ошибка синтеза в Verilog

1 голос
/ 04 августа 2011

Я пытаюсь реализовать алгоритм FatICA в Verilog.Я написал весь код, и до моделирования он не показывает ошибок, но когда я пытаюсь синтезировать код, он выдает ошибку ""; "ожидание вместо". ""

Я использую четыре модуля с плавающей запятойдля арифметического вычисления, и я сгенерировал 1000 экземпляров суммы, sqrt ... и т. д., используя цикл for для промежуточных вычислений. Ниже приведен код для генерации

genvar s;

generate
    for(s=1;s<=4000;s=(s+1))

    begin:cov_mul_ins 
            Float32Mul cov_mul  (.CLK(clk),
                        .nRST(1'b1),
                        .leftArg(dummy_14),
                        .rightArg(dummy_15),
                        .loadArgs(1'b1)
                        );
    end
endgenerate

Теперь я обращаюсь к отдельным экземплярам с помощьюТочка оператора

 for(d=1;d<=2;d=(d+1))

begin
   for(e=1;e<=2;e=(e+1))
    begin
       for(c=1;c<=1000;c=(c+1))
          begin
        if((d==1)&&(e==1))
            begin
            dummy_14=centered_data_copy[d][c];
            dummy_15=Parent.centered_data_float_trans[c][e];

        #10 ***cov_mul_ins[c].cov_mul***(.CLK(clk),
                             .nRST(1'b1),
                             .leftArg(dummy_14),
                             .rightArg(dummy_15),
                             .loadArgs(1'b1),
                             .product(cov_temp[c][1])
                             );

Буду признателен, если кто-нибудь сможет точно указать на мою ошибку. Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Несколько вещей на заметку:

  • Ссылки на модули не могут быть синтезированы. Это означает, что вы не можете «заглянуть внутрь» инстанцированных модулей, чтобы посмотреть на сети или вызвать функции, если вы хотите, чтобы этот код был синтезируемым. Хотя для тестовых стендов это здорово.
  • Ваша попытка вызова функции имеет задержку, которая будет игнорироваться, т.е. #10 cov_mul_ins[c].cov_mul ( ... );

Я могу видеть ваше мышление с помощью программного подхода «все-в-классе-и-вызов-методы». Это идеально подходит для испытательных стендов, но синтез будет жаловаться, как вы видели. Когда дело доходит до аппаратного обеспечения, вам нужно подумать об аппаратном обеспечении - спросите себя, какие блоки вам нужно построить для запуска алгоритма. Например, если вашему алгоритму нужно 30 умножений на каждую входную выборку, то вам понадобится либо 30 экземпляров множителя, либо один множитель и последовательность 30 ваших операций через него. Или 15 множителей, каждый из которых выполняет 2 умножения за период выборки, или 10 множителей, делающих 3 и т. Д ...

0 голосов
/ 04 августа 2011

Попробуйте удалить "# 10", потому что я думаю, что он не синтезируемый.

...