【UVM避坑】记录 UVM / SV 使用过程中遇到的琐碎问题

简介: 【UVM避坑】记录 UVM / SV 使用过程中遇到的琐碎问题

◼ uvm_hdl_force失败,force失败



这里就不提找不到hierarchy引起的force失败了,只介绍一种 我以为force成功了,其实未按我的预期进行force的情况。


 模块u0中的wire a接入模块u1.rx及u2.rx,此时我想对u1、u2的rx force不同的值,采用如下force操作是错误的。由于两个wire信号源头相同,编译器解析时存在概率将其认定为同一条wire,第二行force的有可能会覆盖掉第一行的force操作。


force u1.rx = 1; // uvm_hdl_force亦然
force u2.rx = 0; // uvm_hdl_force亦然


 稳妥的做法是找到该信号在u1、u2内过一级触发器之后的信号进行force。

20201202110452429.png



 

◼ 成功解决 uvm_hdl_force问题:You may not have sufficient PLI/ACC capabilites enabled for that path


   先看下debug_access选项参数,是不是要force的路径无法access,实在不行+debug_access+all


   +debug_access+all还不行的话,看下vcs是不是加了+applylearn选项,加了该选项的话,编译的时候会忽略+debug*,删掉+applylearn




◼ $random_range(min, max) 随机失败,未按要求随机


遇到问题:使用 $urandom_range系统函数进行随机的时候,发现产生的数值与预期不符。


解决办法:原因是urandom_range随机范围上限是32 bit,上限数值max位宽很大的话只取低32 bit




◼ “import” is not expected to be used in this context


遇到问题:编译错误,提示语法错误,具体错误信息 “import” is not expected to be used in this context


问题解决:看下parsing log里,报错点是否有ifdef没写endif,当前文件找不到就到上一个parsing的文件去找




◼ define 编译报错


出现问题:sv/uvm define 代码块编译报语法错误,找不到问题

问题解决:检查行尾的换行符“\”之后是否有多余符合,尤其是空格,有多余符号会报错



◼ uvm/sv function、task使用ref、input、output、inout进行参数传递


出现问题:使用ref、input、output、inout进行参数传递时,参数传递的值不符合个人预期


问题解决:以上ref/input/output/inout等的作用域并非其后的一个参数,而是下一次出现ref/input/output/inout之间的所有参数。使用时应慎之又慎,在传参方向变化时及时纠正。



◼ 跑仿真编译器被kill


出现问题: 跑仿真的时候,编译阶段被kill,没有语法报错,主要错误提示信息如下

Internal error in tool's source file "xmr.cc" line 7430.
Please send these messages to vcs_support@synopsys.com.
An unexpected termination has occurred in /eadtool/synopsys/vcs/P-2019.06-SP2-1S/linux64/bin/vcs1 dut to an assertion failure in the tool.
Hostname xxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
--- Stack trace follows:
"/eadtool/synopsys/vcs/P-2019.06-SP2-1S/bin/scs": not in executable format: File format not recognized
#0 0x********
#1 0x********



问题解决:在实例化类的时候,type_id::create(),忘了写create,加上就好了



◼ uvm phase jump 用法


phase.jump(uvm_reset_phase::get());
目录
相关文章
|
Kubernetes 容器
【K8s源码品读】002:Phase 1 - kubectl - create的调用逻辑
我们的目标是查看`kubectl create -f nginx_pod.yaml` 这个命令是怎么运行的。
60 0
|
前端开发
【前端验证】对uvm_info宏的进一步封装尝试
【前端验证】对uvm_info宏的进一步封装尝试
|
索引
【UVM源码学习】uvm_packer
【UVM源码学习】uvm_packer
968 0
|
编解码 并行计算
再论WRF模式报错:traj_opt is zero, but num_traj is not zero ,如何解决问题,成功运行
再论WRF模式报错:traj_opt is zero, but num_traj is not zero ,如何解决问题,成功运行
再论WRF模式报错:traj_opt is zero, but num_traj is not zero ,如何解决问题,成功运行
|
Serverless
emprical 模块学习与分析 note6
emprical 模块学习与分析 note6
206 0
【UVM源码学习】uvm_heartbeat
【UVM源码学习】uvm_heartbeat
251 0
【UVM源码学习】uvm_heartbeat
【UVM源码学习】uvm_report_server
【UVM源码学习】uvm_report_server
348 0
【UVM源码学习】uvm_report_server
|
安全
【UVM源码学习】uvm_links
【UVM源码学习】uvm_links
166 0
【UVM源码学习】uvm_links
【UVM源码学习】uvm_event
【UVM源码学习】uvm_event
330 0
【UVM源码学习】uvm_event
【UVM源码学习】uvm_barrier
【UVM源码学习】uvm_barrier
153 0
【UVM源码学习】uvm_barrier