class MSG_TRANSACTION extends uvm_sequence_item;
int index =0 ;
int index_inpkg =0 ;
bit [07:00] msgtype ;
bit [15:00] msglen ;
byte unsigned msgbody[$] ;
endclass
class MSG05_TRANSACTION extends MSG_TRANSACTION;
bit [4*8-1:00] TradeDate ;
bit [1*8-1:00] Type ;
bit [2*8-1:00] Index ;
string MyString ;
`uvm_object_utils_begin(MSG05_TRANSACTION)
`uvm_field_int(TradeDate , UVM_ALL_ON | UVM_DEC | UVM_NOPACK)
`uvm_field_int(Type , UVM_ALL_ON | UVM_DEC | UVM_NOPACK)
`uvm_field_int(Index , UVM_ALL_ON | UVM_DEC | UVM_NOPACK)
`uvm_field_int(MyString , UVM_ALL_ON | UVM_STRING | UVM_NOPACK)
`uvm_object_utils_end
endclass
initial begin
MSG_TRANSACTION tmpq[$];
MSG05_TRANSACTION msg05_tr;
for(int i=0;i<10;i++) begin
msg05_tr = new("msg05_tr");
msg05_tr.MyString = $sformatf("%0d", i);
tmpq.push_back(msg05_tr);
end
foreach(tmpq[i])
msg05_tr.print(); //你会发现,MyString 全都打印出最后一个值
end
猜测:string是不定长度的,内存分配空间可能不是跟固定长度的在一起的,所以改成定长的就可以了 如 bit [63:00] MyString ;