System verilog 得到一个“答案”;。。。不是一个时间常数“。。。但是哈文';我不是已经定义了那个数组吗?

System verilog 得到一个“答案”;。。。不是一个时间常数“。。。但是哈文';我不是已经定义了那个数组吗?,system-verilog,System Verilog,在下面的代码片段中,我得到了以下错误: 资料来源: x、 数据[theword][thebyteH:thebyteL]= $urandom_范围(0255); “this”不是时间常数。要更正错误,您可以 将此常量变量转换为参数或localparam 数据记录的几何结构,即内存,在定义_pkg中声明。在Base_txn中创建一个数据记录对象,然后 我可以直接访问它,如下所示: x.data[0][7:0] = x.frameID ; 我不知道为什么会出现精化时间错误,因为在for循环中

在下面的代码片段中,我得到了以下错误:

资料来源:

x、 数据[theword][thebyteH:thebyteL]= $urandom_范围(0255); “this”不是时间常数。要更正错误,您可以 将此常量变量转换为参数或localparam

数据记录的几何结构,即内存,在定义_pkg中声明。在Base_txn中创建一个数据记录对象,然后 我可以直接访问它,如下所示:

x.data[0][7:0]  = x.frameID ;   
我不知道为什么会出现精化时间错误,因为在for循环中发生的(我认为)一切都是因为我正在索引一个已经存在的对象

任何建议、解释或解决方案均受欢迎

定义_pkg.svh 序列号.sv
class Base_txn扩展了uvm_序列_项;
兰德数据记录数据;
...
类sequencethingy扩展了uvm_序列#(Base_txn);
...  
int字节4val;
在这个词里面;
内提拜梯;
国际电话公司;
// -----------------------------------------------------------------------  
功能无效构建(参考基准x);
...  
x、 数据[0][7:0]=x.frameID;
...  
对于(inti=8;i将其写成

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

谢谢,戴夫。太好了。
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  
x.data[theword][thebyteL +:8] = $urandom_range(0,255) ;