VCS后仿调试记录(Pre 您所在的位置:网站首页 ipad手势操作返回上一级怎么操作 VCS后仿调试记录(Pre

VCS后仿调试记录(Pre

2023-06-04 06:31| 来源: 网络整理| 查看: 265

文章目录 环境调整 仿真参数 UCLI命令 X态清理 仿真时间 主要问题记录

在项目搭建和调试后仿环境时做了很多工作,因此希望总结一下使用VCS做芯片后仿的步骤和遇到的一些主要问题。芯片后仿真又可分为PR前仿真(综合后)和PR后仿真(布局布线后),本文记录Pre-PR仿真的部分。

环境调整

PR前门仿采用的是RTL插入DFT后的综合网表,因此首先需要修改filelist,将原有top及各子模块RTL替换为综合后的网表文件,然后需要处理一些编译问题,主要有以下问题:

一些逻辑在综合后被优化了,interface中如果用到需要移除; memory内一些hierarchy路径有变化,需要修改相应后门访问方法; CPU有一些AXI输出信号高比特被tie为0了,导致综合优化后实际位宽变小,这部分编译不会报错,但会影响功能,如果用AXI VIP作为dummy cpu使用时需要修改VIP相关配置。 仿真参数

在仿真综合后网表时需要添加以下一些编译选项:

+nospecify 仿真时忽略specify路径延时 +notimingcheck 仿真时关闭时序检查 -add_seq_delay 0.01ns 设置或覆盖时序UDP(user-defined primitive)的延时,参数如无时间单位则采用timescale的时间单位

还有一些其他选项及其含义,这里不需要用到,仅作参考:

+delay_mode_zero 所有门和路径延时替换为0 +delay_mode_unit 忽略所有模块路径延时,并更改为`timescale的最小时间精度 +no_notifier 关掉时序检查产生不定态,时序检查任务不会改变notifier的值,避免标准单元输出不定态 +optconfigfile+ 自定义文件配置设计的一些时序控制属性,例如:

module { mod1}{ noSpecify}; instance { mod1.mod2_inst.mod3_inst}{ noIopath}; tree { mod1,mod2}{ noTiming};

支持的属性包括:

noIopath Disables module path delays in the pecified module instances. Iopath Enables module path delays in the specified module instances. noSpecify Disables the specify blocks in the specified module instances. Specify Enables specify blocks in the specified module instances. noTiming Disables timing checks in the specified module instances. Timing Enables timing checks in the specified module instances.

UCLI命令

仿真时出现问题可以通过ctrl+C进入UCLI命令交互模式进行调试,建议在编译时添加-debug_access+all启用。这里整理了调试过程中比较有用的一些UCLI命令:

run 运行仿真直到遇到$stop或者设置的断点 run 运行指定时间后停止 step 单步调试 scope 显示当前顶层 show 显示当前模块信息 restart 重新启动工具并停在0时刻 senv activeScope 显示synopsys环境项下的当前作用域 force 0 将信号值force为0 force -deposit 0 给信号值设置为0 release 释放对信号的force -h 查询cmd命令的帮助

由于UCLI命令本身是基于Tcl的,因此UCLI也可以执行一些Tcl脚本,例如初始化一些寄存器值,或者做一些loop调试,后面会介绍到。

X态清理

综合后由于RTL替换为逻辑门,会有一些X态传递问题需要发现。部分X态问题可在RTL仿真时加入VCS编译选项 -xprop开启X-propagation功能调试,目前支持以下三种模式:

-xprop=vmerge,不定义-xprop的默认模式,典型的verilog行为,比较乐观; -xprop=tmerge,仅定义-xprop的默认模式,更接近真实门级行为,在输出有多个可能的情况下为X态; -xprop=xmerge,比门级仿真更悲观的一种行为,X态会无条件传播。

另外可以直接调用系统函数如 $set_x_prop("vmerge") 在case中选择指定的xprop模式;还可以用-xprop=指定一个xprop配置文件,单独控制某些模块的xprop开关。 下面整理了一些可能出现X态问题的场景和仿真环境中的解决方法:

Memory:无复位,默认为X,一般提前向模型中后门写0解决。这里又有一些问题需要注意: 0时刻或过早的后门写入可能无效,模型如果监测到其他X态输入会将memory重写为X; 模型未监测到前门写入时输出Q端保持X态,可能需要直接force Q端,等前门写入后再release; UPF仿真在加电前的force都是无效的。 无复位寄存器:上电后会产生X态,一般只能通过force-release方法解决。 同步复位寄存器:需要采时钟沿生效,解决方法是先给时钟,使一些寄存器复位值生效后再正常上电。 异步复位寄存器:需要采时钟/复位沿生效,上电后各子系统如果先解复位再配置时钟可能会导致复位值未生效,因此修改为上电后先使能子系统时钟,然后配置复位,最后解复位,并且都需要间隔一定延时等待子系统响应生效。 DFT和PAD输入:综合后会一些模块会插入DFT端口,如OCC、EDT、IJTAG等,是从PAD上输入的信号,一些中断唤醒输入也来自PAD输入,因此直接force PAD口或通过interface赋初值即可。 模拟IP:通常都没有复位,由于是behavior model,可以直接修改模型给寄存器赋初值。 仿真时间

后仿相比前仿消耗的时间要多很多,编译和仿真时间都有明显增加,因此缩短后仿时间很有必要。

验证的时间成本有三个维度,仿真时间、CPU运行时间和真实世界的时间。在前仿中已经采用了一些手段以缩短仿真时间:改写一些参数化设计的模块参数(综合后参数会固化);force一些信号或计数器的值来跳过一些时间;软件配置一些时序控制寄存器等。CPU运行时间的优化一般依赖于验证环境,比如尽量控制线程开辟、优化循环、修改仿真选项、关闭波形dump、减少打印log、增量或单次编译等。真实时间可能要依靠一些手段以优化效率,如多服务器并行计算、作业管理优化、上硬件加速器等。

在后仿时可以根据需要选用以下方法以加快一些仿真速度:

直接force上电模块输出信号和模拟状态信号等跳过硬件上电; force efuse上电读完成信号,跳过上电启动前加载efuse的时间; 修改DDR模型内的时序参数来加快一些时序要求的复位后等待上电时间; 在不影响验证的情况下,尽量配置高频率时钟; 单独验证某子系统功能时,可以关闭一些其他子系统的时钟; 太小的仿真时间精度可能会影响CPU运行时间且占用更大内存,因此可尽量设置大一点的时间精度。 主要问题记录

除X态问题外,调试门仿时主要卡在了以下一些问题上,这里做一些记录。

0延时loop 仿真时发现时间无法推进,用ucli调试发现进入了zero delay loop,这里用到了一个监测loop的tcl小脚本,在ucli中source该脚本,然后比如执行loop_detect 1000就是step 1000次并dump到loop.txt。根据保存的结果发现在lib中一些cell进入了loop,因此修改并添加了一些延时。 #!usr/bin/tcsh proc loop_detect { args} { set help "-help" if { [string equal $args $help ] != 1 } { config followactivescope on set i 0 while { $i puts "Usage: loop_detect " } } proc run_step { } { redirect -f loop.txt -a { set x [step]}; redirect -f loop.txt -a { set y [scope]}; puts $x; puts $y; }

ICG时序问题 一些IP在DC综合后自动生成了一些ICG (Integrated Clock Gating cell)。由于修改cell delay时给ICG也加了delay,导致delay后的上升沿没有采到D端。尝试修改了多次延时时间,仅在延时设为0时仿真波形才正确,否则就是有glitch或者采不到。这里0延时仅用于功能仿真,还是要参考PR网表引入门延时和布线延时后的实际情况。

DDR时序问题 在读DDR时读出了X态,定位到RAM口时序有问题,最后发现在DDR的模拟模型中通过specify块定义了路径延时,而在后仿中定义了-nospecify(lib中给每个cell都定义了0延时的specify块,无nospecify会导致进0延时loop)。这里尝试了几种方法:修改DDRC时序寄存器配置,未成功;不定义-nospecify,尝试用+optconfigfile+指定cell为noSpecify,未成功;定义-nospecify,并将dlygen模型中的specify延时改为rtl内定延时表述,可以解决。在DDR中也发现了其他X态问题,并在前仿中通过xporp仿真复现。因此建议在后仿前先用xprop清理一下X态问题。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有