原创 从SignalTap II中获取“最真实”的仿真测试向量

2010-6-22 11:54 5913 10 28 分类: FPGA/CPLD
    在实际工作中,经常会遇到这样的情况:在硬件调试中采用SignalTap II反复多次编译并最终捕获到问题的原因时,才会发现,原来这个问题是逻辑问题,是可以在仿真环境下发现并快速解决的。先前没能从仿真中发现这个问题,要么是因为尚未或难以创建对应的测试向量,要么是因为仿真环境下的测试向量与真实环境下的测试条件存在微小的差异。对于设计工程师来说,由于缺乏相应的技术能力、开发时间,甚至是耐心,我们不可能像验证工程师那样对设计进行全面的仿真验证;即使仿真验证很充分,在实际应用中的测试也会发现仿真验证未曾发现的问题。总之,在FPGA设计上板测试后,总会发现或多或少的逻辑bug,,这些bug对应的仿真向量在已有的仿真验证环境中往往都被遗漏了。 riple
    那么,有没有一种亡羊补牢的方法可以让我们在硬件调试中发现逻辑bug后,“快速准确”地创建遗漏的测试向量,并且在仿真环境下重现和解决bug呢?由于仿真环境可以给我们提供对RTL设计最佳的可控制性和可观测性,在仿真环境中定位bug,会比通过SignalTap II多次修改信号列表和编译节省许多时间,解bug也就不会那么耗时和痛苦。通过最近一段时间的思考和今天的尝试,我找到了这一方法! riple

    让我们一起来看看这种方法:
1. 在硬件测试中稳定重现bug。
2. 通过代码分析,初步确定bug产生的模块。
3. 通过SignaTap II,捕获产生bug模块的输入输出。
4. 通过分析该模块的输入输出,确认bug在流经该模块后产生。
5. 把SignalTap II中捕获到的所有输入信号波形转化为HDL测试平台中的测试向量。
6. 针对该模块和上一步得到的测试平台运行单元仿真测试,在仿真测试中观察该模块输出,确认bug在仿真环境下重现。
7. 采用该仿真环境查找并定位bug产生的原因。
8. 采用该仿真环境确认对bug的修改是正确和可靠的。
9. 重新编译并测试修改后的FPGA设计。

    上述各个步骤,除了5、6之外,都可以与仅采用SignalTap II的硬件调试过程中的步骤对应起来。在步骤5中,快速、准确是这种方法的关键。如果把波形转化为测试向量的过程耗时、易错,那么通过步骤7获得的优势就失去了。 riple
    在步骤5中,我采用了SignalTap II的信号波形输出功能,把波形转化为对应的信号取值列表,输出为文本文件;通过文本文件,原本复杂多变的波形文件就可以被其它程序读取并准确地转化为HDL文件,这里我采用的编程语言是Tcl。 riple
    采用这一方法,我花费了4个小时完成了Tcl脚本程序,在1个小时的时间内就定位并解决了不久前PV测试出现的一个问题。如果在现有的仿真环境中手工添加该测试向量,可能会花费比写Tcl脚本更少的时间,但是不能保证重现该问题,调试和反复修改测试用例是潜在的工作量;如果在SignalTap II中调试该问题,由于需要多次编译,大概要花费相当的时间,但是Tcl脚本只需要写一遍就可以重用,这一时间成本是可以摊薄到以后的各次调试中去的。 riple

    SignalTap II捕获硬件信号波形的原理是基于周期采样,波形中每一个数据样点对应于一个时钟周期。所以,在生成测试向量时,必须产生对应于SignalTap II采样时钟的时钟波形,用来规范测试向量的时序。这里,可以采用VHDL的wait until (clk='1'); 语句,或者Verilog的@(posedge clk); 语句产生相应的定时等待,使每一个采样点对应的激励波形按照采样时钟顺序变化。这一处理,可以在本文所附的示例程序中找到。


    附图:
点击看大图
SignalTap II中波形输出为列表的功能

点击看大图
在Modelsim中运行生成测试向量的Tcl脚本

点击看大图
Modelsim中对特定模块生成testbench的工具

点击看大图
Modelsim中采用SignalTap II捕获的测试向量进行RTL级单元仿真的结果

程序示例:zip

相关链接:
FPGA设计开发中应用仿真技术解决故障的方法(图) 这篇文章启发我找到了这一调试方法,向原文的两位作者致谢。本篇博客文章提出了原文思路的另外一种实现方法。

Automating the FPGA Design Debug Process: When Full Visibility is Needed
This comprehensive approach cuts greatly into the time it takes to pinpoint the
cause of the particularly vexing bugs caused by intermittencies. It takes
advantage of FPGAs' speed for most of the debugging effort and transfers the
task to a simulator when full, detailed analysis is required. In essence,
TotalRecall technology can be thought of as a "fast-forward
button" for simulators
.

Using hardware to accelerate simulation - ref design This is real-time acceleration, with Ethernet connection and Modelsim PLI.

PARTNER CONTENT

文章评论18条评论)

登录后参与讨论

ash_riple_768180695 2009-12-21 11:48

谢谢ygfeagle朋友的关注。请注意第二幅附图应用示例中的第一行,do stp2hdl.tcl是命令,其余的就是从Modelsim命令行传递给tcl脚本的三个参数$1 $2 $3。stp1_auto_signaltap_found.txt对应第一个参数,0和7这两个参数对应stp1_auto_signaltap_found.txt文件中信号列表的索引。替换这些参数,就可以适用于其他的应用环境。我更新了附带的程序示例,添加了stp1_auto_signaltap_found.txt文件。

用户1412275 2009-12-20 16:06

这个文章实用性很强, 以前一个老同事用C++写了相似的东西,今天看到riple也遇到同样的问题,但是我不太懂TCL看了一会,后面的还理解的 但是 set stpFileName $1 set stpSigRange [list $2 $3] 这两句话不太懂,$1代表什么呢$2 $3又是? 谢谢riple了

ash_riple_768180695 2009-9-30 19:43

不用谢。得知大家有所收获,这是最让我高兴的事了!

用户145710 2009-9-28 23:19

受到启发,迅速找到了项目中的BUG,感谢

用户221170 2009-9-13 07:00

高,可惜不熟悉tcl!

ash_riple_768180695 2009-9-8 08:42

这确实是个问题。对于存在时序逻辑的模块,光捕获外部输入,不捕获内部状态还是不够的。谢谢你指出这一点,我会考虑解决方案的。

用户1122702 2009-9-7 09:56

riple兄:我有一个疑问:当你的模块存在状态机或者计数器时,它们的状态是无法通过短期的输入向量决定的,在这种情况下是否有好的解决办法呢?

coyoo 2009-8-13 14:01

那我就先啃下tcl,AZA

ash_riple_768180695 2009-8-12 09:02

http://group.ednchina.com/2220/

ash_riple_768180695 2009-8-12 09:02

受特权同学的启发,我建立了Modelsim小组,恳请大家加入,共同讨论、进步。
相关推荐阅读
ash_riple_768180695 2015-12-18 11:06
学习示例程序:FPGA快速系统原型设计--敏捷实践
        学习与开发板配套的示例程序,是敏捷实践的起点。示例程序是厂商针对开发板上提供的硬件资源和接口量身定做的工程,可以展示其FPGA芯片的功能和性能特点。从示例程序入手最大的好处就是:示...
ash_riple_768180695 2015-11-03 16:46
开发板选取:FPGA快速系统原型设计--敏捷实践
    既然是“实践”,就不能只谈编码和仿真,必须要上板运行、调试。这个虚拟项目的目标是实现一块兼容Intel82574L以太网控制器的千兆网卡,需要运行在一块具备PCIe接口和10/100/10...
ash_riple_768180695 2015-10-22 12:41
开篇:FPGA快速系统原型设计--敏捷实践
    虽然借用了 “系统原型开发”的标题,本系列文章将围绕FPGA IP级别的开发这个主题展开,如果可能的话,将扩展至FPGA System级别的开发。     先上一篇PPT:RSPwFP...
ash_riple_768180695 2013-08-26 10:21
学习SystemVerilog(二)——学习它的理由
    学习SystemVerilog的理由也很多,我在阅读SystemVerilog for Design 和 SystemVerilog for Verification两本书前言的过程中,总...
ash_riple_768180695 2013-08-26 10:19
学习SystemVerilog(一)——不学习它的理由
    想要学习SystemVerilog已经很久了。曾经尝试通过Accellera网站上给出的LRM学习,怎奈内容众多,找不出入手点和重点,只能望而却步。虽然手头有三本SystemVerilog...
ash_riple_768180695 2011-06-26 23:20
Hardware-Assisted IEEE1588 Implementation Analysis
06/18/11 11:00:05 PM         最近一段时间在研究IEEE1588-2008精确时间同步协议(PTP)。该协议可以在软件中实现,如果需要提高时间同步...
EE直播间
更多
我要评论
18
10
关闭 站长推荐上一条 /3 下一条