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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: doogo

[原创] 《UVM实战》24小时问答

[复制链接]
发表于 2014-10-23 15:24:51 | 显示全部楼层
请教个问题:
对于uvm_mem由于默认的数据位宽由`UVM_REG_DATA_WIDTH(64)决定,这就意味着我的memory大小只能是小于64bit的,那如果我的memory是深度128,宽度是120bit的话,我该如何建模 (假设我的cpu bus位宽为32位):
1. 改变UVM_REG_DATA_WIDTH为120,这样最简单,但会不会带来其它什么问题?
2. 如果不改变这个宏定义,有没有其它好的方法,特别是对backdoor方式如何指定hdl path?

非常感谢!
 楼主| 发表于 2014-10-23 17:32:53 | 显示全部楼层




   uvm_mem不受UVM_REG_DATA_WIDTH的限制
发表于 2014-10-25 16:03:54 | 显示全部楼层
作者你好!请教几个问题。

1.在2.3.4节中,谈到driver和monitor相似,把二者封装到agent类中,通过is_active来控制是否实例化my_driver。你用的例子中,数据没有经过处理直接转发。但是很多情况下驱动数据经过DUT后格式都变了,i_monitor和u_monitor实现方式就不同了吧?agent也应该以i_agent和o_agent区分开?

2.在2.4.3节中:
    a.在源代码中好像没有看到my_sequence的实例化,是在哪里实现的呢?
    b.uvm_config_db启动default_sequence是按照sequence类名来实现的,而不是仅启动某一个sequence实例?如果存在两个my_sequence实例,那么下面这句话会把两个实例都启动了?
      uvm_config_db#(uvm_object_wrapper)::set(this,
                                              "i_agt.sqr.main_phase",
                                              "default_sequence",
                                               my_sequence::type_id::get());
    c.如果有多个sequence实例,各自都调用了raise_objection和drop_objection,那么怎么判断仿真结束?
 楼主| 发表于 2014-10-25 16:41:04 | 显示全部楼层


作者你好!请教几个问题。

1.在2.3.4节中,谈到driver和monitor相似,把二者封装到agent类中,通过is_ac ...
longxigen 发表于 2014-10-25 16:03



1、是的
2、a,i_agt.sqr会自动实例化一个default sequence,不需要额外干预
     b,你的两个实例都不会启动,sqr会自己实例化一个default sequence。
     c,等到所有的objection都被drop才停止仿真。后文中都有介绍的。
发表于 2014-10-25 16:42:34 | 显示全部楼层
回复 144# doogo


   明白。感谢。
发表于 2014-10-27 13:56:11 | 显示全部楼层


uvm_mem不受UVM_REG_DATA_WIDTH的限制
doogo 发表于 2014-10-23 17:32




    不明白为什么不受限制?原代码定义:
task uvm_mem::write(output uvm_status_e   status,
                                 input   uvm_reg_addr_t offset,
                                 input   uvm_reg_data_t value,   // 可以看出value也是uvm_reg_data_t类型

typedef bit unsigned [`UVM_REG_DATA_WIDTH-1:0] uvm_reg_data_t ;
 楼主| 发表于 2014-10-27 20:15:56 | 显示全部楼层


不明白为什么不受限制?原代码定义:
task uvm_mem::write(output uvm_status_e   status,
    ...
gayball 发表于 2014-10-27 13:56



哦,不好意思,记错了。只记得内部不受限制,忘记掉外部write及read受宏宽度的限制了。
1、如果你只做frontdoor访问,其实没有必要对memory建模,要访问的时候,启动一个sequence,在sequence中读写即可。
2、不改变宏定义,肯定是没有办法建模的。
3、如果你不改宏定义,不想建模,又想做backdoor访问,那么可以直接调用uvm_hdl_read与uvm_hdl_deposit进行backdoor读写。具体的使用方法,你可以参考UVM的源代码。
发表于 2014-10-28 15:32:47 | 显示全部楼层
你好!请教一个验证相关的问题。
我们现在有一个BFM verilog model,用来接收DUT的数据,并保存到内部register memory里。
verilog验证环境下通过back door 读取相关数据用来比较。
现在我们想将这个BFM 集成到UVM环境中。一般要如何实现?
 楼主| 发表于 2014-10-28 17:17:35 | 显示全部楼层


你好!请教一个验证相关的问题。
我们现在有一个BFM verilog model,用来接收DUT的数据,并保存到内部regi ...
sunyzs 发表于 2014-10-28 15:32



这个要视具体的verilog model而定,没有标准的答案,而且会非常的复杂。
发表于 2014-10-29 15:23:06 | 显示全部楼层
doogo, 你好
  还请教你一个问题。
  以前是在questa下做uvm1.1d验证。今天切换到vcs mx2012.09工具下,仿真停止,报的错误是
phase  timeout of 9200 hit,phase "main"  ready to end.
还有一条警告就是 main_objection [OBJTN_CLEAR] object "uvm.uvm_shed_main" cleared objection counts for main_objection,和uvm实战144页的警告类似

在questa下仿真没有这写警告和报错。整个验证平台都没有改动。这个验证用例是有phase跳转的,只有一个domain.通过比对文件,发现questa下的uvm_phase.svh和vcs下的uvm_phase.svh差别很大,synopsys做了很大的改动。  我查了下相关的文档,没有这方面的说明。  
   
这个问题要怎么解决ing?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-6 20:31 , Processed in 0.029972 second(s), 7 queries , Gzip On, Redis On.

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