为什么我在解压数据时无法分配队列以及如何正确执行?
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旧方法分步执行即可。
我正在尝试解压固定格式的打包邮件。但是我不能正确地做到这一点,因为当编译器(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旧方法分步执行即可。