获得" ...不是精化时间常数" ......但我还没定义那个阵列?

时间:2016-06-20 14:31:44

标签: system-verilog

在下面的代码片段中,我收到此错误:

来源信息:

  

x.data [theword] [thebyteH:thebyteL] =   $ urandom_range(0,255);   '这'不是精化时间常数。要纠正错误,您可以   将此const变量转换为参数或localparam。

数据记录的几何形状,只是一个内存,在definition_pkg中声明。在Base_txn和中创建数据记录对象 我可以像这样直接访问它:

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

我不知道为什么我得到一个详细时间错误,因为for循环中发生的所有事情(我认为)是我索引已经存在的对象。

任何建议,解释或解决方案都表示赞赏。

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  

1 个答案:

答案 0 :(得分:2)

将其写为

x.data[theword][thebyteL +:8] = $urandom_range(0,255) ;  

请参阅Indexing vectors and arrays with +: