Случай приоритета с циклом for внутри always_comb Процедурный блок дает ошибку? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь построить кодировщик статического приоритета, например, 0011101010 ------> 0010000000

Обычно индекс с наибольшим значением должен быть равен одному, а остальные индексы должны быть равны нулю.

Я попробовал следующий код с modelsim, и он выдает ошибку:

** Ошибка: рядом с «для»: синтаксическая ошибка, неожиданная для

** Ошибка: синтаксическая ошибка, неожиданная ')', ожидаемая ';'

// код *******************************************

integer i;

always_comb begin

   priority case (1'b1)

      for ( i=0; i<16 ; i=i+1 ) 

         begin

           in[15-i] : out= 16'd2**(15-i);

         end

   endcase

end

1 Ответ

0 голосов
/ 08 апреля 2019

Нет такого синтаксиса для создания элементов case в цикле for. Вам просто нужно for петля

always_comb begin
      out  = 0;
      for (int i=15; i>=0 ; i-- ) 
           if (in[i]) begin
               out[i]= 1'b1;
               break;
           end
      end
...