Приоритетный случай с циклом for внутри процедурного блока always_comb выдает ошибку?

#verilog #system-verilog #modelsim

#verilog #system-verilog #modelsim

Вопрос:

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

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

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

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

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

//code*******************************************

 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:

Такого синтаксиса для генерации элементов 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
  

Комментарии:

1. Понял. Итак, в общем, если мне нужно писать элементы обращения без какого-либо приоритета, я просто удаляю оператор ‘break’?

2. Удаление break в этом примере дает вам поведение параллельного случая.