1.仿真log中报出大量的"include_coverage not located, did you mean ***"?

(1) user在构建register model或者集成register model的过程中,可能会调用uvm_reg::build_coverage(), uvm_mem::build_coverage(), uvm_reg_block::build_coverage();而在build_coverage()函数内,会调用uvm_resource_db::read_by_name()函数,该函数又会调用get_by_name()函数,接着调用uvm_resource.svh中的get_by_name()函数与lookup_name()函数,lookup_name()函数在特定条件下,会调用spell_check()函数,而"include_coverage not located, did you mean ***"正式spell_check()函数报出来的;

(2) 其实,问题很简单!当调用uvm_resource_db::read_by_name()函数时,uvm会检查name字符串(该处指"include_coveage")是否有在相应的关联数组rtab中记录过,如果没有就会报错;如果在调用uvm_resource_db::read_by_name()前,进行过uvm_resource_db::set()对name字符串进行记录,则不会报该类错误!

(3) 该种情况中,大概率是调用了build_coverage函数,该函数会读取resource,但是没有调用include_coverage()进行resource的set;

2.调用regmodel前门配置寄存器的过程中,发生了hang的情况,hang在uvm_reg_map do_bus_write函数内的bus_req.end_event.wait_on()处;

(1) hang的原因是define了UVM_DISABLE_AUTO_ITEM_RECORDING;

(2) 具体原因为:

(2.1) bus_req.end_event.wait_on()需要在bus_req.end_event的触发下,才能结束; 而bus_req.end_event.trigger则在uvm_transaction的function end_tr内发生;

(2.2) uvm_component的function end_tr内会调用uvm_transaction.end_tr()函数;

(2.3) uvm_sequence_base的task start()以及finish_item()都会调用uvm_component的task end_tr(); 但是uvm_reg_map采用的是uvm_sequence.finish_item(); 所以研究uvm_sequence的finish_item() task; 该task内在调用sequencer.end_tr()之前会先检测sequencer.is_auto_item_recording_enabled()函数的返回值,因为当前场景下定义了UVM_DISABLE_AUTO_ITEM_RECORDING,导致is_auto_item_recording_enabled()的返回值为0,所以hang;

注1:https://bbs.eetop.cn/thread-863236-1-1.html这个帖子遇到了同样的问题;

3.在使用uvm后门函数时,遇到”UVM_ERROR: set:unable to write to hdl path(...)  You may not have sufficient PLI/ACC capabilites enabled for that path“;

(1) 出现这个问题是可以简单的理解为VCS缺乏权限造成的,需要在编译选项中加上-debug_all,打开所有权限即可解决这个问题。

(2) 来源:https://bbs.eetop.cn/thread-886462-1-1.html;

4.使用uvm后门方式(本质调用uvm_hdl_deposit())配置寄存器失败?

(1) int uvm_hdl_deposit(string path, uvm_hdl_data_t value): 将path指定的信号,设定为value值;($deposit函数及其与force的区别见vcs user guide-后续的仿真事件会覆盖掉deposit的值,force则不然);

(2) 寄存器模型后门写时,需要注意如果在reset期间后门写一个reg类型变量(尤其是seq内后门写寄存器时,如果seq内寄存器配置的时机不合适),可能不会达到预期结果; 原因就在于deposit和force不同,当信号值受其他因素影响而改变时,会覆盖deposit值; reset期间, reg类型变量可能会在always块内被赋值为0,进而覆盖deposit值;

最新文章

  1. ThreadLocal 工作原理、部分源码分析
  2. xamarin UWP中MessageDialog与ContentDialog的区别
  3. [deviceone开发]-一个很炫的手势动画示例
  4. 频率直方图(hist)
  5. galera cluster各种问题专贴
  6. CodeForces - 404B(模拟题)
  7. [转]Ubuntu 软件安装、查找、卸载--apt-get、apt-cache命令安全
  8. (翻译) Android ListView 性能优化指南
  9. rownum使用方法
  10. 在 Linux 上使用 VirtualBox 的命令行管理界面
  11. JAVA(六)数据库/网络编程/新IO
  12. Python实现文件备份
  13. Android View体系(八)从源代码解析View的layout和draw流程
  14. Python MQTT订阅获取发布信息字典过滤
  15. screen 状态为Attached 连不上
  16. linux上创建PV/VG/LV
  17. 04_Docker入门(下)之docker镜像和仓库的使用
  18. 【数据库】SQL两表之间:根据一个表的字段更新另一个表的字段
  19. centos下apache安装
  20. Mac OS下开启自带的apache服务

热门文章

  1. ACR2022的辩论:DMARDs在pre-RA中的作用
  2. 代码随想录算法训练营day06 | leetcode 242、349 、202、1
  3. 吐血整理!2万字Java基础面试题(带答案)请收好!
  4. Vue 组件VueComponent中_ _proto_ _ 原型对象的指向(指向Vue的原型对象 _ _proto_ _)
  5. 【树莓派】在vscode中连接树莓派并编写代码
  6. 两张表合并到一个VO里面
  7. 客户端发送信息给服务器以及服务器接收客户端发来的信息(socket)
  8. [Unity]关于Physic Material,物理碰撞
  9. ERNIE1-2
  10. ansible自动化管理