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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: 桅杆

[解决] 寄存器模型执行read/write会死循环。

[复制链接]
发表于 2019-8-28 10:57:21 | 显示全部楼层


桅杆 发表于 2019-8-28 10:28
上面的代码是为了方便debug另外写的,只为了看reg_modle的read/write 操作,组件上只有一个sequencer。
现 ...


class A extends uvm_sequencer;
    reg_model rm;
    `uvm_component_utils( A )
    function new( string name="A", uvm_component parent );
        super.new( name );//, parent );
    endfunction
    virtual task configure_phase( uvm_phase phase );
        super.configure_phase( phase );
        $display("???????????????????? 11");
    endtask
    virtual task main_phase( uvm_phase phase );
        uvm_status_e  st;
        uvm_reg_data_t value;
        super.main_phase( phase );
        phase.raise_objection( this );
        $display("????????????????????");
        rm.test_0.read( st, value, UVM_FRONTDOOR );
        $display("!!!!!!!!!!!!!!!!!!!!");
        $display("hhhhhhhhhhhhhhhhhhh value is %d", value);
        phase.drop_objection( this );
    endtask
endclass

这是你的读写操作所在嘛?  uvm_sequencer 扩展一个A 来做读写操作 ?  

且 reg_model 在case 0 和 A都例化了?

寄存器读写操作 一般 直接放在  testcase  main_phase 进行
 楼主| 发表于 2019-8-28 13:48:10 | 显示全部楼层


诸葛小天 发表于 2019-8-28 10:57
class A extends uvm_sequencer;
    reg_model rm;
    `uvm_component_utils( A )


case0  中例化了 A(sequencer)  test, reg_model rm, 通过 " A.rm = this.rm", sequencer 中的rm应该与case0中rm是指向同一个的。
你说的testcase 是指sequence吗?  在《UVM实战中》中,sequence 通过p_sequencer 进行reg_model的读写操作,这个reg_model实质应该还是sequencer的,
我这种方式应该也没问题,最后都是在sequencer下的main_phase启动。
不过在sequence 中的操作方式我也试过,也是卡死了。
发表于 2019-8-28 17:10:49 | 显示全部楼层
把sequencer中该死的reg_model拿掉,reg_model -> adapter -> sequencer -> driver, 这就是ral命令的传递,你在sequencer里又调用reg_model,就形成一个循环了,sequencer都不知道该干嘛
 楼主| 发表于 2019-8-29 10:31:04 | 显示全部楼层


idealm 发表于 2019-8-28 17:10
把sequencer中该死的reg_model拿掉,reg_model -> adapter -> sequencer -> driver, 这就是ral命令的传递, ...


sequencer 中的reg_model是指向case0下的reg_model的呀。
实际应该是在sequencer的main_phase下,发起读取reg_model,也就是case0下的reg_model的。
所以应该是没问题的吧?
如果sequencer下没有reg_model,我应该在哪个组件下调用read,write函数呢?这里我不懂该怎么改,希望能指点一下。
发表于 2019-8-29 17:28:28 | 显示全部楼层
本帖最后由 goodivan 于 2019-8-29 17:45 编辑

apapter中reg没有给transaction赋值
发表于 2019-8-30 09:41:14 | 显示全部楼层
死循环,通过log打印信息定位下那出问题了,adapter帧数据是否产生?driver是否接收到? 还是挂死在monitor采集上?



 楼主| 发表于 2019-8-30 11:46:56 | 显示全部楼层
统一回复各位,问题解决了。确实是卡死在bus_driver里,二楼一开始就指明要害了。怪我太蠢没查出来,之后又一直忽略。
谢谢诸位的回复。
sequence 中有 寄存器 read/write 是要等到driver的seq_item_port.item_done() 才会结束. 估计read函数本身会调用uvm_do()。
 楼主| 发表于 2019-8-30 11:50:30 | 显示全部楼层


诸葛小天 发表于 2019-8-30 09:41
死循环,通过log打印信息定位下那出问题了,adapter帧数据是否产生?driver是否接收到? 还是挂死在monitor ...


上面的小程序卡死在sequence里了,一直在等待driver的item_done,而这个测试小程序没有driver.....我的验证环境下是卡死在driver里,第一次检查忽略了一些信号,以为没问题。
感谢一直帮我分析。
 楼主| 发表于 2019-8-30 11:51:19 | 显示全部楼层


goodivan 发表于 2019-8-29 17:28
apapter中reg没有给transaction赋值


adapter 试过里面没任何操作也是没关系的。
发表于 2021-7-29 19:58:58 | 显示全部楼层
请问这个问题最后如何解决的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-27 11:04 , Processed in 0.026585 second(s), 6 queries , Gzip On, Redis On.

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