从SignalTap II中获取“最真实”的仿真测试向量(ZZ)
在实际工作中,经常会遇到这样的情况:在硬件调试中采用SignalTap II反复多次编译并最终捕获到问题的原因时,才会发现,原来这个问题是逻辑问题,是可以在仿真环境下发现并快速解决的。先前没能从仿真中发现这个问题,要么是因为尚未或难以创建对应的测试向量,要么是因为仿真环境下的测试向量与真实环境下的测试条件存在微小的差异。对于设计工程师来说,由于缺乏相应的技术能力、开发时间,甚至是耐心,我们不可能像验证工程师那样对设计进行全面的仿真验证;即使仿真验证很充分,在实际应用中的测试也会发现仿真验证未曾发现的问题。总之,在FPGA设计上板测试后,总会发现或多或少的逻辑bug,,这些bug对应的仿真向量在已有的仿真验证环境中往往都被遗漏了。
那么,有没有一种亡羊补牢的方法可以让我们在硬件调试中发现逻辑bug后,“快速准确”地创建遗漏的测试向量,并且在仿真环境下重现和解决bug呢?由于仿真环境可以给我们提供对RTL设计最佳的可控制性和可观测性,在仿真环境中定位bug,会比通过SignalTap II多次修改信号列表和编译节省许多时间,解bug也就不会那么耗时和痛苦。通过最近一段时间的思考和今天的尝试,我找到了这一方法!
让我们一起来看看这种方法:
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获得的优势就失去了。
在步骤5中,我采用了SignalTap II的信号波形输出功能,把波形转化为对应的信号取值列表,输出为文本文件;通过文本文件,原本复杂多变的波形文件就可以被其它程序读取并准确地转化为HDL文件,这里我采用的编程语言是Tcl。
采用这一方法,我花费了4个小时完成了Tcl脚本程序,在1个小时的时间内就定位并解决了不久前PV测试出现的一个问题。如果在现有的仿真环境中手工添加该测试向量,可能会花费比写Tcl脚本更少的时间,但是不能保证重现该问题,调试和反复修改测试用例是潜在的工作量;如果在SignalTap II中调试该问题,由于需要多次编译,大概要花费相当的时间,但是Tcl脚本只需要写一遍就可以重用,这一时间成本是可以摊薄到以后的各次调试中去的。
SignalTap II捕获硬件信号波形的原理是基于周期采样,波形中每一个数据样点对应于一个时钟周期。所以,在生成测试向量时,必须产生对应于SignalTap II采样时钟的时钟波形,用来规范测试向量的时序。这里,可以采用VHDL的wait until (clk='1'); 语句,或者Verilog的@(posedge clk); 语句产生相应的定时等待,使每一个采样点对应的激励波形按照采样时钟顺序变化。这一处理,可以在本文所附的示例程序中找到。
附图:

SignalTap II中波形输出为列表的功能

在Modelsim中运行生成测试向量的Tcl脚本
do stp2hdl.tcl是命令,其余的就是从Modelsim命令行传递给tcl脚本的三个参数$1 $2 $3。stp1_auto_signaltap_found.txt对应第一个参数,0和7这两个参数对应stp1_auto_signaltap_found.txt文件中信号列表的索引。替换这些参数,就可以适用于其他的应用环境。

Modelsim中对特定模块生成testbench的工具

Modelsim中采用SignalTap II捕获的测试向量进行RTL级单元仿真的结果
程序实例下载:http://yunpan.cn/QD9r7Qip7yww8
从SignalTap II中获取“最真实”的仿真测试向量(ZZ)的更多相关文章
- Kubernets中获取客户端真实IP总结
1. 导言 绝大多数业务场景都是需要知道客户端IP的 在k8s中运行的业务项目,如何获取到客户端真实IP? 本文总结了通行的2种方式 要答案的直接看方式一.方式二和总结 SEO 关键字 nginx i ...
- Tomcat 8.5中获取客户端真实IP及协议
获取客户端真实IP ServletRequest接口提供了getRemoteAddr方法用于获取客户端IP,但是当客户端通过代理服务器访问后端服务器的时候,服务器调用getRemoteAddr方法会返 ...
- 在richtextbox中获取最真实的字符串像素大小
设计器: partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.Com ...
- SignalTap II逻辑分析仪的使用
一.例子 我们使用如图1所示的verilog代码所实现的开关电路作为例子.这个电路把DE系列开发板上的前8个开关简单的和对应的8个红色LED相连接.它是这样工作的:在时钟(CLOCK_50)的上升沿读 ...
- SignalTap ii的使用
1.实现原理 SignalTap II获取实时数据的原理是在工程中引入Megafunction中的ELA(Embedded Logic Analyzer),以预先设定的时钟采样实时数据,并存储于FPG ...
- 在有nginx做反向代理时候,如何获取用户真实Ip信息
在获取用户的Ip地址时,不一定可以获取到用户真实的地址信息,这要看代理服务器的类型,代理服务器有普通匿名代理服务器,高匿代理服务器,像这种情况很难获取到用户真实的Ip地址 假如用户没有使用匿名代理服务 ...
- 7个获取访问者真实IP的方法,速学!!!
通常情况下,网站访问并不是简单地从用户的浏览器直达服务器,中间可能部署有CDN.WAF.高防.例如,采用这样的架构:“用户 > CDN/WAF/高防 > 源站服务器” .那么,在经过多层代 ...
- nodejs之获取客户端真实的ip地址+动态页面中引用静态路径下的文件及图片等内容
1.nodejs获取客户端真实的IP地址: 在一般的管理网站中,尝尝会需要将用户的一些操作记录下来,并记住是哪个用户进行操作的,这时需要用户的ip地址,但是往往当这些应用部署在服务器上后,都使用了ng ...
- spring中获取当前项目的真实路径
总结: 方法1: WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext ...
随机推荐
- javascript中window与document对象、setInterval与setTimeout定时器的用法与区别
一.写在前面 本人前端菜鸟一枚,学习前端不久,学习过程中有很多概念.定义在使用时容易混淆,在此给向我一样刚踏入前端之门的童鞋们归纳一下.今天给大家分享一下js中window与document对象.se ...
- 【JavaScript】JavaScript DOM 编程
在开发的时候,最主要是对DOM进行操作.DOM:Document Object Model 文本对象模型. DOM能够以一种独立于平台和语言的方式訪问和改动一个文档的内容和结构. DOM是针对xml( ...
- 过滤NSString中的Emoji
有时候由于项目需求.要过滤NSString中的emoji. 比方下面情况: 要跟android互通,android假设还没做这方面的支持. 内容做为手机短信发出去. 思路例如以下,遍历NSString ...
- match函数
match(s, r [, a]) Return the position in s where the regular expression r occurs, or 0 if r is not p ...
- 利用JNDI的命名与服务功能来满足企业级API对命名与服务的访问
包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务: 可以同时连接到多个命名或目录服务上: 建立起逻辑关联,允许把名称同Java对象或资源关联起来,而不必知道对象或资源的物理ID. JNDI ...
- 【HDU 5305】Friends 多校第二场(双向DFS)
依据题意的话最多32条边,直接暴力的话 2 ^ 32肯定超时了.我们能够分两次搜索时间复杂度降低为 2 * 2 ^ 16 唯一须要注意的就是对眼下状态的哈希处理. 我採用的是 十进制表示法 跑的还是 ...
- ionic2常见问题-启动后白屏问题
问题描述 app启动后大概有几秒白屏,才会显示首页,如下gif图 启动有白屏.gif 解决方法1 请查看以下3张图的标注 图 1-最初config.xml配置 图 2-更改后的splash配置 图 3 ...
- PHP中常用的字符串函数?
1.strlen() 2.strpos() 3.mb_strlen()
- jprofiler_监控远程linux服务器的JVM进程(转 非常棒)
几天前写了一篇文章,jprofiler_监控远程linux服务器的tomcat进程(实践),介绍了使用jprofiler怎样监控远程linux的tomcat进程,这两天想了想,除了可以监控tomcat ...
- ubuntu12.04 安装nginx+php+mysql (lnmp)的web服务器环境
1.Ubuntu12.04 安装nginx+php+mysql (lnmp)的web服务器环境 http://blog.db89.org/ubuntu12-04-install-nginx-php-m ...