2014-04-30 16 views

risposta

15

Per default, SystemVerilog passa matrici per valore, copiando l'intero array.

Si consiglia di passare gli array per riferimento quando possibile per motivi di prestazioni.

  • Se si desidera modificare la matrice, utilizzare ref.
  • Se si desidera che la funzione legga l'array, utilizzare const ref.

Esempio:

function void pass_by_value(int array[5], int queue[$], int assoc[int]); 
    // Default. 
    // A copy of the arrays is made in this function 
    endfunction 

    function void pass_by_ref(ref int array[5], ref int queue[$], 
          ref int assoc[int]); 
    // Original arrays are being referenced 
    endfunction 

    function void pass_by_const_ref(const ref int array[5], 
            const ref int queue[$], 
            const ref int assoc[int]); 
    // Original arrays are being referenced 
    // And they can be read but cannot be modified in this function 
    endfunction 

Esempio su EDA Playground: http://www.edaplayground.com/x/2m9