芯片验证中使用zebu加速的经验总结
(1) compile related
1)zebu环境中,可能会出现这种情况,zebu mem model使用了define FPGA, macro_stdcell.v中也使用了define FPGA, 然后我们需要macro_stdcell.v走FPGA那一路,zebu mem model走没有define FPGA的那一路,这里需要注意自己手动修改macro_stdcell.v中的define.(不走FPGA那一路,macro_stdcell.v中的时钟逻辑仿真时会出错)
2)uvm1.1-d与uvm1.2差异较大,移植代码从vcs环境到zebu环境中时要注意uvm版本一致
3)综合时由于资源(查看zTopbuild.log中的LUT, REG等cost)不够导致错误,可以先关闭dump或者dump较少层次的hierarchy,或者可以调整project.utf中design_size-number_of_module num, 有的zebu环境中num为1~5,一个module有12个FPGA.
4)zebu中,RTL中的synopsys_translate_off和sysnopsys_translate_on之间的code不会被编译,需要添加vhdlan/vlogan的一些库文件,采用vcs 3步法在analysis中添加,需要在脚本编译文件所在的目录中copy一份synopsys_sim.setup文件过来,并添加如下:
在synopsys_sim.setup中添加:
dware : ./dware/lib
dw01 : ./dw01/lib
dw02 : ./dw02/lib
dw03 : ./dw03/lib
dw04 : ./dw04/lib
dw05 : ./dw05/lib
dw06 : ./dw06/lib
gtech : ./gtech/lib
(2) simulation related
1) 对于HW中mem的访问,用hierarchy的方式进行duxie时,method采用task类型
2) 在HW中对mem的访问,使用系统函数$readmemh/$writememh, 或者采用hierarchy的方式访问,对于同一个地址,写数据后需要delay一段时间才能正确读出.
3)在仿真加速时,需要查看各部分代码中时间的消耗情况,然后来进行优化,可以采用打印系统函数的方式来确认时间消耗分布,如下所示:
$system("echo xxx time is >> debug_time.log");
$system("data >> debut_time.log");
(3) dump波形 and coverage
1) simxl.fsdb文件中只能查看SW中的信号,如果想看HW中的信号,除了添加dump的信号路径,产生的.ztdb文件需要先转化成.zwd文件,然后再用verdi打开才能查看HW中的信号.
2)dump的波形有时候看到reset前和reset后信号都为X态,可能是dump波形格式qiwc产生的波形有问题,dump波形时采用fwc格式能解决这个问题(fwc格式占用资源比较多,综合会比较慢).
3)zebu中不能收集code cov,可以收集function coverage,在utf文件中添加coverage -enable true, assertion synthesis -enable ALL, 在simv中添加-simxl=enable_dut_fcov, enable_dut_sva, 能够正常产生simv.vdb文件.
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)