Как вернуть массив из функции с тем же именем, что и у функции в системном verilog? - PullRequest
0 голосов
/ 08 марта 2019
 module rev_array;

   int array_in[10]={0,1,2,3,4,5,6,7,8,9};

   typedef integer array[9:0];

   function array reverse(int array_in[10]);
     for(int j=$size(array_in)-1,int i=0;j>=0;j--,i++)
       begin     
         reverse[j]=array_in[i];
       end

     // working for(integer k=0;k<$size(array_in)-1;k++)
     // working   $display("reverse[%0d]:%0d", k, reverse[k]); 
     $display("inside function");             

   endfunction:reverse

   initial
     begin
       reverse(array_in);
       for(integer k=0;k<$size(array_in)-1;k++)
         begin
           $display("reverse[%0d]:%0d", k, reverse[k]);      
         end  
     end

 endmodule

Ошибка - [IUS] Незаконное использование области testbench.sv, 22 rev_array, "rev_array.reverse" Область не может использоваться в этом контексте

Ошибка - [XMRIBS] Неверный выбор бита testbench.sv, 22 Обнаружена ошибка в следующей межмодульной ссылке, неправильный выбор бита включен цель. Информация об источнике: $ display ("reverse [% 0d]:% 0d", k, rev_array.reverse [k]);

Я пытаюсь перевернуть массив и вернуть его в системную функцию verilog. Я могу увидеть перевернутый массив внутри функции, напечатав его, но когда я пытаюсь распечатать его, используя $ display вне функции, я думаю, что это не возвращается должным образом, в 4-й строке от конца, получая errorError- [IUS]

1 Ответ

1 голос
/ 08 марта 2019

обе ваши проблемы связаны со строкой, в которой вы используете reverse имя функции в качестве массива в $ display.

$display("reverse[%0d]:%0d", k, reverse[k]); 
--------------------------------^^^^^^^^^^

это недопустимый синтаксис, вызывающий оба сообщения.

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

initial
begin
    array result;
    result = reverse(array_in);
    //^^^^^^^^^^^^^^^^^^^^^^^^^//
    for(integer k=0;k<$size(array_in)-1;k++)
    begin
      $display("reverse[%0d]:%0d", k, result[k]);
                                   // ^^^^^^ //      
    end  
end

вызвать функцию и использовать возвращаемые результаты для отображения.

...