在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2195|回复: 2

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

[复制链接]
发表于 2014-10-10 17:12:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x




  1. task fabric_monitor::receive ();
  2.     byte  unsigned data_q[$]    ;
  3.     byte  unsigned data_array[$];
  4.     logic [7:0]    data    ;
  5.     logic          sop  = 1;
  6.     logic          eop  = 0;
  7.     int            datasize;
  8. //    fabric_frame   frm;
  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
发表于 2014-10-10 17:48:29 | 显示全部楼层
for(int i = 0; i < this.length; i++)begin

我猜length的值为0,所以根本没有赋值过。

另外UVM中自己带了unpack_bytes功能,为什么要自己写一个?
 楼主| 发表于 2014-10-11 08:19:05 | 显示全部楼层
回复 2# doogo


    确实是这样,没有对length进行赋值,重新写unpack_bytes是因为我导师让我override这个函数的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 14:38 , Processed in 0.018574 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表