为什么我在解压数据时无法分配队列以及如何正确执行?

Why i can't allocate queue when unpack data and how to do it right?

我正在尝试解压固定格式的打包邮件。但是我不能正确地做到这一点,因为当编译器(irun)找到队列时,它会将所有剩余数据解压缩到队列中。 当我尝试分配队列时,出现错误。如何正确解压打包的消息?可能需要使用各种方法? 这是我的代码:

class packet;
  byte bytestream[$] ;
  byte start = 8'h11, stop = 8'h99;
  rand byte data[$];
  rand byte length ;

  constraint length_c { length inside {[3:6]}; data.size() == length; }

  task pack();
        if (!randomize())$finish;
        bytestream = { >> {start,length,data,stop}};
        $display("PACKED_PACKET @: start=%h; length=%h; data=%p; stop=%h;",start,length,data,stop);
  endtask // pack

  task unpack();
        { >> {start,length,data,stop}} = bytestream ;
        $display("UNPACKED_PACKET @: start=%h; length=%h; data=%p; stop=%h;",start,length,data,stop);
  endtask // unpack
endclass

packet p = new ;

module tb_uvm;      
   initial
     begin 
        $display("Start test");
         p.pack();
         p.unpack();
        $display("END test");
     end 
endmodule

似乎是工具问题,当我在 EDA Playground 上尝试时,您提供的代码在 VCS 和 Riviera-PRO 上运行良好。

您的工具可能缺少对流式运算符的支持,因此您只需按packing/unpacking旧方法分步执行即可。