sv小技巧

fengbohan1 发布于 24 天前 81 次阅读


sv小技巧

宏定义转换字符串

有时候会想将宏定义作为字符串传递给函数。直接传递是不行的,可以采用下面的方法

不带参数的宏

`define PATH TB.DUT
$display(`"`PATH`");

带参数的宏

`define PATH(num) TB.DUT``num
int temp;
$display($sformatf($sformatf("%s", `"`PATH(%0d)`"), temp));

force 和 uvm_hdl_force

区别

区别 参数的区别
force 只能对静态变量操作 force后的后门路径不是字符串
uvm_hdl_force 静态变量,动态变量都可以 uvm_hdl_force后的后门路径是字符串

⚠ 如果uvm_hdl_force​后不是字符串,编译不会报错,但是无法正确force值。

vcs和verdi的一致性问题

查看波形有两种常用的方式:

  1. verdi 吃文件列表,编译设计,然后手动选择波形(当前常用的方法)
  2. 命令行查看:verdi -ssf wave.fsdb -sswr wave.rc

第一种方法,只要有波形文件就可以查看波形。但是存在和vcs不一致的问题

  • generate​块缺省名字时,vcs和verdi的默认块名字不相同。
  • 分析upf的时候,对于缺省端口方向的iso语句,vcs默认钳位输出(和dc行为一致),verdi默认钳位输入。
  • 当RTL代码已经更新,但是波形是用旧代码仿真的时候,使用第一种方法就会出现verdi中波形和代码不一致的情况。

第二种方法,需要确保vcs编译的simv.daidir​文件夹存在,不然无法载入设计(只能看波形,没有对应代码)。还需要确保当前终端已经正确设置vcs​和verdi​的环境。如果只设置verdi​环境,仍然无法查看代码。

如果使用第二种方法查看波形,推荐设置别名ss​,快速设置vcs​和verdi​环境。

alias ss "setdt vcs2020.03 && setdt verdi2020.03"

测试一下能不能更新

此作者没有提供个人介绍
最后更新于 2024-11-28