VCS后仿调试记录(Pre-PR)

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

环境调整

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

  1. 一些逻辑在综合后被优化了,interface中如果用到需要移除;
  2. memory内一些hierarchy路径有变化,需要修改相应后门访问方法;
  3. 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 <time>                  运行指定时间后停止
step                        单步调试
scope                       显示当前顶层
show                        显示当前模块信息
restart                     重新启动工具并停在0时刻
senv activeScope            显示synopsys环境项下的当前作用域
force <signal> 0            将信号值force为0
force -deposit <signal> 0   给信号值设置为0
release <signal>            释放对信号的force
<cmd> -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=<file>指定一个xprop配置文件,单独控制某些模块的xprop开关。
下面整理了一些可能出现X态问题的场景和仿真环境中的解决方法:

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

仿真时间

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

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

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

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

主要问题记录

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

  1. 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 < $args} {
      run_step
      incr i
    }
  } else {
    puts "Usage: loop_detect <no. of iteration>"
  }
}

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

  2. 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态问题。

  • 25
    点赞
  • 175
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: vcs仿真 -deraceclockdata race命令是vcs仿真器中的一个用法,在进行时钟域(clock domain)处理时非常有用。该命令的作用是删除仿真器中的数据并修复由于时钟域交叉引起的问题。 时钟域交叉是指在系统设计中,不同的时钟信号以不同的速率运行,可能会导致数据在时钟域之间的相互交叉。这种交叉可能会导致在仿真过程中出现时序(timing)和同步(synchronization)问题。通过使用-vcs仿真器的deraceclockdata选项,我们可以解决这些问题。 具体来说,-deraceclockdata race选项用于检测和纠正由于时钟域交叉引起的竞争条件(race condition)的问题。它在仿真期间监测数据流经过不同时钟域的情况,并根据时钟域之间的关系来解决并发读写问题。 使用-vcs仿真器的-dereaceclockdata race选项时,仿真器将根据给定的配置文件对模拟的数据进行纠正。这个配置文件告诉仿真器哪些数据流被视为交叉的,并根据时钟域之间的关系来修复它们。 总而言之,vcs仿真器中的-deraceclockdata race选项是一种解决时钟域交叉问题的方案。它通过识别并修复可能导致时序和同步问题的交叉数据流,提高了设计的准确性和稳定性。 ### 回答2: vcs仿真 -deraceclockdata raceVCS仿真工具的一个选项。它可以用于race条件检测。 在多线程程序中,如果两个或多个线程同时访问和修改共享数据,可能会出现race条件。race条件指的是对共享数据的竞争访问,结果取决于这些线程的执行顺序,从而导致不确定的行为。 -vcs仿真 -deraceclockdata race选项能够帮助开发人员检测和排除race条件。当使用该选项时,VCS仿真工具会在运行时追踪和记录每个线程对共享数据的访问和修改操作。然后,它会分析这些操作的执行顺序以检测是否存在race条件。 如果存在race条件,VCS仿真工具会生成相应的报告,指示在哪些地方可能会出现race条件以及可能的执行顺序。开发人员可以根据这些报告来识别和修复race条件,从而提高程序的稳定性和可靠性。 总而言之,vcs仿真 -deraceclockdata race选项是VCS仿真工具中用于race条件检测的一个功能。它通过跟踪和分析多个线程对共享数据的访问和修改操作来帮助开发人员发现潜在的race条件,并提供相应的报告以指导修复。这有助于提高程序的稳定性和可靠性。 ### 回答3: vcs仿真是一种常用的电路设计验证工具,可以帮助工程师在设计阶段评估电路的性能和功能。在vcs仿真中,-deraceclockdata race是一个选项,用于识别和解决时序问题。 时序问题主要指的是在电路中存在的由于时钟信号引发的数据冲突或竞争。当数据在时钟上升沿或下降沿发生改变时,可能会导致信号传输延迟,从而出现数据冲突。这种情况下,电路的行为将变得不可预测,导致设计错误或功能失败。 -deraceclockdata race选项在vcs仿真中非常有用,它可以帮助工程师及早发现和解决时序问题。具体而言,该选项可以检查不同时钟域中数据的传输时间,以确定是否存在潜在的冲突或竞争条件。如果存在时序问题,vcs仿真工具会生成警告或错误信息,以指示设计中的问题。 通过使用-deraceclockdata race选项,工程师可以及时发现潜在的电路时序问题,并通过调整设计、提高时序容量或使用适当的同步电路来解决这些问题。这样可以确保设计的性能和稳定性,并降低开发过程中出现不良结果的风险。 总之,vcs仿真中的-deraceclockdata race选项对于识别和解决时序问题非常重要。通过使用该选项,工程师可以确保设计的准确性和可靠性,提高电路的性能和功能效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小破同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值