微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 最近使用uvm_ral update有些疑惑,望大神指点!

最近使用uvm_ral update有些疑惑,望大神指点!

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

最近研究uvm_reg,使用auto_predict的方式连续对同一个寄存器进行set和update,如果set的值是一样的,总线只会有一次写操作;代码大致为
automatic uvm_status_e status;
model.rega.set(1);
model.rega.update(status);
model.rega.set(1);
model.rega.update(status);
model.rega.set(1);
model.rega.update(status);
看update源码我理解为:
需要m_mirrored != m_desired才会跳转到下一步write阶段,在第一次update的时候write会使用do_predict将
m_mirrored更新为写入的值,如果下一次set的m_desired一直为上一次的值,则之后就不会有write操作;
我想到的两种解决方式为:
1.不用update,直接使用model.rega.write(model.rega.get());
2.每次完成后使用model.reset()将值reset;
我理解是否有问题,或者有更好的解决方式,update的正确使用方法望大神指点迷津!

update的作用就是判断期望值(desired_value)是否与镜像值(mirrored_value)一致,如果不一致,将期望值写入dut,并且更新镜像值;由于你前期操作中可能可能按照以下方式进行设置,导致镜像值自动更新为写入的参数“model.default_map.set_auto_predict(1)”
如果将设置如下model.default_map.set_auto_predict(0),小编可以再试试,不过这个地方最好设置为1,否则使用寄存器模型的意义就不大了。

你的第一种方式就是使用get函数取期望值,将其重新写入到dut中,总线上可定会有操作的
第二种方式是的作用我不确定,不知是将期望值与镜像值全部修改为复位预设值还是两个中的一个设置为复位预设值,需要查询一下源码
我有个小问题,为什么需要对寄存器操作后返回的状态加入automatic机制,里面存在多个进程么?
automatic uvm_status_e status;

小编可以在看看使用model.default_map.set_auto_predict(0)时,如果期望值与镜像值不一致时,如果进行write()操作与update()操作的结果是否一致
1)总线上执行dut总线写操作(这个应该都会有);
2)寄存器是否都可以将镜像值更新为期望值(write应该不会有,但update就不确定了);

env中设置set_auto_predict(1),这样省事,如果设为0那就得用Explicit Prediction方式;automatic其实没必要,我开始还以为uvm_status_e有什么特殊用处,后来翻源码发现就是UVM_IS_OK判断,这处加的是多余的;
我使用reset是由于我默认值是0,所有每次reset就会将m_mirrored和m_desired都恢复回reset状态,要是这时候set的是0,update依旧直接return,不会进入下一步write;
非常感谢,还没考虑使用auto_preict为0的方式,前期先用auto predict尝试;

你有联系方式么?可以短消息我,我有些疑问想问下

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

网站地图

Top