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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 10426|回复: 17

[求助] 求助:UVM中peek与poke的问题

[复制链接]
发表于 2012-8-13 18:36:43 | 显示全部楼层 |阅读模式

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

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

x
各位:
     正在学习UVM中对register model的backdoor访问。使用peek的时候有点问题,想不出到底为什么,于是上来请教大家。
     我在my_test中的run_phase中这样写:



  1. phase.raise_objection(this);
  2.         begin
  3.              uvm_status_e  status;
  4.              addr=32'h0;
  5.              data=32'h0;
  6.              repeat(1024) begin
  7.                   reg_tb0.apb_slave.n_ram.write(status.addr,data);
  8.                   addr++;
  9.                   data +=2'b10;
  10.              end
  11.              addr=32'h0;
  12.              repeat(1024) begin
  13.                   reg_tb0.apb_slave.n_ram.peek(status,addr,data);
  14.                   reg_tb0.apb_slave.n_ram.read(status,addr,data1);
  15.                   $display("peek @%0h=%0h\t\tread @%0h=%0h",addr,data1,addr,data);
  16.                   addr++;
  17.              end
  18.         end
  19.         phase.drop_objection(this);


复制代码
可是,结果跑出的结果如下:
peek @0=d712         read @0=1
peek @1=1              read @1=11
peek @2=1              read @2=21
peek @3=1              read @3=31
peek @4=1              read @4=41
peek @5=1              read @5=51
peek @6=1              read @6=61
peek @7=1              read @7=71
. . .                           . . .
peek @3ff=1            read @3ff=3ff1

我有点不大明白,为什么peek出来的所有的数都不对呀?
 楼主| 发表于 2012-8-14 11:11:05 | 显示全部楼层
没人知道么?
自己顶上去。
发表于 2013-7-22 22:48:55 | 显示全部楼层




    这个算是backdoor访问么?怎么看着像一般的寄存器访问操作呢?
发表于 2013-7-22 22:52:49 | 显示全部楼层
后来如何解决的,问题出在哪里?
 楼主| 发表于 2013-7-23 13:01:21 | 显示全部楼层
回复 4# huobaihua

peek使用的hierarchy写错了。就是写register model的时候
发表于 2013-7-23 14:13:18 | 显示全部楼层


回复  huobaihua

peek使用的hierarchy写错了。就是写register model的时候
oscillator_cn1 发表于 2013-7-23 13:01




    也在做memory的backdoor访问操作,不是很清楚uvm_mem.svh源文件中的函数peak/poke和write/read的区别,write/read不支持backdoor访问 ? 另外hdl_path和地址之间是如何绑定的,hdl_path的作用是什么,在函数中视乎不需要指定这个路径??

   求楼主再给解释一下……

   另外是否有backdoor的访问方式的example,能不能给个参考。谢谢
发表于 2013-7-23 14:13:20 | 显示全部楼层


回复  huobaihua

peek使用的hierarchy写错了。就是写register model的时候
oscillator_cn1 发表于 2013-7-23 13:01




    也在做memory的backdoor访问操作,不是很清楚uvm_mem.svh源文件中的函数peak/poke和write/read的区别,write/read不支持backdoor访问 ? 另外hdl_path和地址之间是如何绑定的,hdl_path的作用是什么,在函数中视乎不需要指定这个路径??

   求楼主再给解释一下……

   另外是否有backdoor的访问方式的example,能不能给个参考。谢谢
发表于 2013-7-23 14:13:25 | 显示全部楼层


回复  huobaihua

peek使用的hierarchy写错了。就是写register model的时候
oscillator_cn1 发表于 2013-7-23 13:01




    也在做memory的backdoor访问操作,不是很清楚uvm_mem.svh源文件中的函数peak/poke和write/read的区别,write/read不支持backdoor访问 ? 另外hdl_path和地址之间是如何绑定的,hdl_path的作用是什么,在函数中视乎不需要指定这个路径??

   求楼主再给解释一下……

   另外是否有backdoor的访问方式的example,能不能给个参考。谢谢
 楼主| 发表于 2013-7-24 08:56:06 | 显示全部楼层
backdoor是直接通过hdl_path访问寄存器或者ram,就像平时写的“u_dut.apb_slave.regA=16‘h45"一样。这样访问是不消耗仿真时间的,而read/write是通过总线访问需要消耗仿真时间。hdl_path那个我忘了,应该是没有什么关系吧,如果需要backdoor访问,则需要指定正确的hdl_path,不然就会像我这个问题一样了。我出现这个问题是地址对了,但是hdl_path错了,因此前后门的数值对不上。
发表于 2013-7-24 10:41:10 | 显示全部楼层


backdoor是直接通过hdl_path访问寄存器或者ram,就像平时写的“u_dut.apb_slave.regA=16‘h45"一样。这样访 ...
oscillator_cn1 发表于 2013-7-24 08:56



在uvm1.1c的库文件中,uvm_mem.svh的1434行起 有下面的这段代码,想请问,这里面的rw.path就是所谓的hdl_path了,是如何传递进来,以及和offset进行绑定的呢?
谢谢

task uvm_mem::write(output uvm_status_e      status,
                    input  uvm_reg_addr_t    offset,
                    input  uvm_reg_data_t    value,
                    input  uvm_path_e        path = UVM_DEFAULT_PATH,
                    input  uvm_reg_map       map = null,
                    input  uvm_sequence_base parent = null,
                    input  int               prior = -1,
                    input  uvm_object        extension = null,
                    input  string            fname = "",
                    input  int               lineno = 0);
   // create an abstract transaction for this operation
   uvm_reg_item rw = uvm_reg_item::type_id::create("mem_write",,get_full_name());
   rw.element      = this;
   rw.element_kind = UVM_MEM;
   rw.kind         = UVM_WRITE;
   rw.offset       = offset;
   rw.value[0]     = value;
   rw.path         = path;
   rw.map          = map;
   rw.parent       = parent;
   rw.prior        = prior;
   rw.extension    = extension;
   rw.fname        = fname;
   rw.lineno       = lineno;
   do_write(rw);
   status = rw.status;
endtask: write
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-15 03:20 , Processed in 0.026120 second(s), 9 queries , Gzip On, Redis On.

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