2016-06-20 4 views
1

Im Code-Fragment ich diesen Fehler bin immer:Eine "... keine Elaborationszeitkonstante" bekommen ... aber habe ich das Array nicht schon definiert?

Quellenangaben:

x.data[theword][thebyteH : thebyteL] = $urandom_range(0,255) ; 'this' is not an elaboration-time constant. To correct the error you may convert this const variable to a parameter or a localparam.

Die Geometrie des Datensatzes, nur ein Speicher, in dem definition_pkg erklärt. Ein Datensatz Objekt wird in der Base_txn erstellt und ich es direkt wie so zugreifen:

x.data[0][7:0] = x.frameID ; 

Ich weiß nicht, warum ich eine Ausarbeitung Zeitfehler bin immer da alles, was geschieht (glaube ich) in für Schleife ist, dass ich ein bereits existierendes Objekt indexiere.

Alle Vorschläge, Erklärungen oder Lösungen geschätzt.

definition_pkg.svh

`define REC_DATAWIDTH 32 
`define REC_ROWS 16 

typedef bit[`REC_DATAWIDTH-1:0] DataRec [`REC_ROWS] ; 

sequences.sv

class Base_txn extends uvm_sequence_item; 

    rand DataRec data; 
    ... 


class sequencethingy extends uvm_sequence#(Base_txn); 
    ... 
    int byte4val ; 
    int theword ; 
    int thebyteH ; 
    int thebyteL ; 

// ----------------------------------------------------------------------- 
function void build_S (ref Base_txn x); 
    ... 
    x.data[0][7:0] = x.frameID ; 
    ... 
    for (int i = 8 ; i <= (byte4val+8) ; i++) // byte8 is the location of S[0] 
    begin 
    theword = i/4 ; 
    thebyteL = 8*(i%4) ; 
    thebyteH = thebyteL + 7 ; 
    x.data[theword][thebyteH : thebyteL] = $urandom_range(0,255) ; 
    end 
endfunction 

... 

task body(); 
    Base_txn wd_tx; 
    ... 
    build_S(wd_tx) ; // give the processor some data 

Antwort

Verwandte Themen