微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 求助,为何数据无法写入到帧中去?

求助,为何数据无法写入到帧中去?

时间:10-02 整理:3721RD 点击:

  1. task fabric_monitor::receive ();
  2. byteunsigned data_q[$];
  3. byteunsigned data_array[$];
  4. logic [7:0]data;
  5. logicsop= 1;
  6. logiceop= 0;
  7. intdatasize;
  8. //fabric_framefrm;
  9. while((sop == 1)||(eop == 1))begin
  10. @this.m_itf.cb;
  11. sop= this.m_itf.sop ;
  12. data = this.m_itf.data;
  13. eop= this.m_itf.eop ;
  14. end
  15. while ((sop == 0)&&(eop == 0))begin
  16. @this.m_itf.cb;
  17. sop= this.m_itf.sop ;
  18. data = this.m_itf.data;
  19. eop= this.m_itf.eop ;
  20. //$display("data = %d", data);
  21. data_q.push_back (data);
  22. end
  23. datasize= data_q.size ();
  24. $display ("datasize=%d",datasize);
  25. for (int i = 0; i < datasize; i++)begin
  26. data_array[i] = data_q[i];
  27. $display("data_array[%d]=%d", i,data_array[i]);
  28. end
  29. this.frm.payload = new[datasize - 8];
  30. this.frm.unpack_bytes(data_array);
  31. $display("payload.size=%d",this.frm.payload.size);
  32. $display("frm.payload[%d]=%d",4,frm.payload[4]);
  33. $display("frm.uid.frame_id=%d",frm.uid.frame_id);
  34. this.put_port.put (this.frm);
  35. 求大神帮我看一下,这个代码哪里出了问题,能够从interface中读出数据,但是无法写入到frm中,unpack_bytes的代码如下:[code]virtual function void unpack_bytes (byte unsigned packet [$]);
  36. this.uid.sport[ 7: 0] = packet[0];
  37. this.uid.sport[15: 8] = packet[1];
  38. this.uid.dport[ 7: 0] = packet[2];
  39. this.uid.dport[15: 8] = packet[3];
  40. this.uid.frame_id[ 7: 0] = packet[4];
  41. this.uid.frame_id[15: 8] = packet[5];
  42. this.uid.frame_id[23:16] = packet[6];
  43. this.uid.frame_id[31:24] = packet[7];
  44. for(int i = 0; i < this.length; i++)begin
  45. this.payload [i] = packet [i+8];
  46. end
  47. endfunction

复制代码


ps,写回到payload中的数据都是0

for(int i = 0; i < this.length; i++)begin
我猜length的值为0,所以根本没有赋值过。
另外UVM中自己带了unpack_bytes功能,为什么要自己写一个?

确实是这样,没有对length进行赋值,重新写unpack_bytes是因为我导师让我override这个函数的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top