FPGA设计开发中应用仿真技术解决故障的方法

发布者:心愿成真最新更新时间:2012-02-11 关键字:FPGA  仿真  故障 手机看文章 扫描二维码
随时随地手机看文章
   

本文针对FPGA实际开发过程中,出现故障后定位困难、反复修改代码编译时间过长、上板后故障解决无法确认的问题,提出了一种采用仿真的方法来定位、解决故障并验证故障解决方案。可以大大的节约开发时间,提高开发效率。


    FPGA近年来在越来越多的领域中应用,很多大通信系统(如通信基站等)都用其做核心数据的处理。但是过长的编译时间,在研发过程中使得解决故障的环节非常令人头痛。本文介绍的就是一种用仿真方法解决故障从而减少研发过程中的编译次数,最终达到准确定位故障、缩短解决故障时间的目的。文例所用到的软件开发平台为Altera公司的Quartus II,仿真工具为ModelSim。

问题的提出
    系统开发在上板调试过程中,有时候出现的bug是很极端的情况或很少出现的情况,而现在通常的做法是:在故障出现的时候通过SignalTap把信号抓出来查找其问题的所在、修改程序;在改完版本后,先要对整个工程进行重新编译,然后再上板跑版本进行验证,看看故障是否解决。


这样就会出现三个问题:
①有时候故障很难定位,只知道哪个模块出错,很难定位到具体的信号上,给抓信号带来麻烦。如果故障定位不准确,漏抓了关键信号,则需要重新在SignalTap里添加信号、编译版本并再次上板定位故障,浪费时间。
②故障定位后,修改代码还需要再编译一次产生新版本的下载文件,修改后若还有问题则要重复这一过程,这样从故障定位到修改完成需要很多次编译。
③上板重新进行验证时,如果这个bug的出现的几率很小,短时间内不再复现,并不能说明在极端情况下的故障真的被解决了。
举例说明:

图1 SignalTap抓出的bug出现时的数据

图2 SignalTap抓信号界面


    例如在一个基带系统的FPGA逻辑版本中,输出模块调用了一个异步FIFO,某一时刻FIFO已空的情况下多读了一个数据,产生了bug,如图1所示。


    该输出模块的功能是判断FIFO中是否有大于4个数据可读出,若大于则连续输出4个数据作为一组。系统中采用异步FIFO的内部读数据指针来做判断,而异步FIFO读写数据需要跨时钟域,需要至少2个时钟周期的握手时间,导致数据指针不准确。在判断的时钟沿,虽然显示有超过4个的数据可读,但是因为握手时间的延迟实际上FIFO中可能只有3个数据。


图1中rdreq为FIFO的读使能信号,在4个时钟周期内有效,但是只读出了3个数(数据0D2086C9F被读了两次),因为FIFO在第4个时钟周期已经读空。这里应该改成同步FIFO,由于同步FIFO数据的读写只在一个时钟域内进行,就没有这个握手时间延迟的问题了。


    定位这个故障的时候我们可以很容易知道是哪个模块出了问题,但是具体是其内部的哪个信号还需要下些功夫,如果出错信号隐藏的很深,很难一次就抓到需要的信号;而且即使我们抓到了正确的信号,如果故障在改完之后没有解决,则还需要重新修改、再进行编译,耗费时间;即使改过之后故障不再复现,也有可能是因为bug出现的条件苛刻,无法证明故障真的解决了。


针对这三个问题,笔者提出如下想法:
    虽然定位具体的出错信号很困难,但是定位是哪个模块出错很容易,在bug出现的时候我们可以抓出这个模块的全部输入信号,考虑是否可以利用这些信号在仿真环境下重建bug出现的条件,利用仿真环境具体定位错误信号的位置。


    定位好错误信号的具体位置后,修改代码,再用相同的条件进行仿真。这样可以通过对修改前后输出数据的对比,很直观的验证修改是否成功,从而在修改成功后只需编译一次即可,节省时间。


    上板后bug不复现也可以排除是由于极端情况很难满足造成的,去除了后顾之忧,彻底解决了故障。

仿真解决故障的方法
    通过对这个异步FIFO问题的解决,可以证明这种通过所抓信号建立bug存在条件,定位、清除bug的方法是可行的。步骤如下:

图3 SignalTap II List File界面


①将bug出现时SignalTap抓的信号保存成文档文件


Quartus II 平台用SignalTap抓到信号的界面如图2所示。
在信号名称上单击右键,选择图2所示Create SignalTap II List File选项,生成如图3格式界面。
图3中界面上半部分显示的是list对信号个数及信号名的描述,下半部分是采样点所对应的信号值,带h的表示是十六进制数值。
将list file另存为文本格式文件即可,如图4所示。

图4 “另存为”选项界面
此后可以把这个文本文件中无用的描述删掉,只留SignalTap抓出来的数据(空格、h等符号也要删掉),另存为.dat文件供仿真使用。
有了故障出现时的输入数据,我们就可以在仿真环境下构建故障出现的条件。

②利用.dat文件建立bug出现的条件
    用verilog语言编写仿真文件(testbench),使用语句$readmemh或$readmemb将.dat文件中的数据存储到一个设定的ram中,如:$readmemh(“s.dat”,ram)。
注意$readmemh读取是按照十六进制数据进行(认为.dat文件中的数据都是十六进制数),会自动将其转换为4位二进制数存入ram中,所以设定的ram位宽要是.dat文件中数据位宽的4倍;使用$readmemb时,存储SignalTap所抓信号时,信号都要先设定为binary类型,ram位宽就是.dat文件数据的位宽。ram的深度为.dat文件中数据的个数。
然后在程序里把ram中数据按照所对应时钟沿输出到一个寄存器变量中,ram地址累加即可。
always@(posedge clk)
begin
data<=ram[addr];
addr<=addr+1'b1;
end
复现bug存在条件时,需将模块的输入信号与ram中的数据位相对应,仿真文件调用模块时,将寄存器data对应位作为输入接入即可。
在仿真环境中复现bug波形如图5所示。
把图5和图1进行比较,可见通过这种方法我们在仿真环境下建立了bug出错时的环境,得到相同的输出出错数据。
③修改程序后在仿真环境验证修改是否成功
修改程序后,我们只要使用同样的环境进行仿真,并且有针对性的观察bug是否解决。本例中出现bug的原因是使用了异步FIFO,改成同步FIFO后,问题应该就会解决,我们可以通过仿真验证。修改程序后仿真的波形如图6所示。
由图6可见,修改后相同的条件FIFO读出4个数,说明没有读空,符合要求,bug解决。图7为版本编译后上板使用SignalTap抓取的信号波形,以作比较。

图5 modelsim环境下复现的出错数据

图6 修改程序后相同条件下的输出数据

图7 修改程序后SignalTap抓的信号
比较后易见,波形完全相同,说明方法可行。

总结
    文中描述的方法可针对各种的故障的解决。在故障出现时,只需定位出错的模块,这些模块内嵌一些子模块也无妨;抓信号时将故障模块的输入输出信号抓出即可;利用输入信号重建故障环境,若仿真输出信号和所抓输出信号相同,说明故障环境建立正确;用这个仿真平台就可以具体定位是哪个子模块、哪个信号出错,而不需要在SignalTap中把这些信号抓出来;并且在修改代码后可以验证是否修改成功,节省时间,很明确的证明故障真的被解决了,事半功倍。

关键字:FPGA  仿真  故障 引用地址:FPGA设计开发中应用仿真技术解决故障的方法

上一篇:出租车计价器VHDL程序
下一篇:基于FPGA NiosII的MPEG-4视频播放器

推荐阅读最新更新时间:2024-05-02 21:54

自动驾驶究竟需要什么样的仿真
仿真对于自动驾驶的重要性已不言而喻,自动驾驶的仿真通过数学建模的方式将实际的应用场景进行数字化还原,建立尽可能接近真实世界的系统模型,无需实车直接通过软件进行仿真测试便可达到对 自动驾驶系统 及算法的测试验证目的。 可以说,一套好的仿真环境可以非常精确地完成对于自动驾驶系统功能性、安全性方面的验证,从而保障自动驾驶的顺利落地。那么,对于自动驾驶而言如此重要的仿真技术目前发展如何,在未来又将以怎样的形式助力自动驾驶的量产落地呢? 仿真究竟在仿什么? 针对自动驾驶而言,现如今的仿真系统具体需要仿造哪些内容,提供哪些输入给到算法模块呢? 首先是还原与真实世界一致的交通静态元素,比如道路、交通标志、护栏、树木、建筑等等。当
[汽车电子]
自动驾驶究竟需要什么样的<font color='red'>仿真</font>?
大众DSG故障居汽车消费者关注首位
    又到一年“3·15”,产品质量维权等信息再次成为舆论关注的焦点,其中汽车产品便是消费者投诉问题的大户。     据中国汽车质量网的数据显示,2012年共收到11631宗汽车投诉。其中最引人关注的就是大众DSG故障,至今仍有投诉。     在盖世汽车网近日的汽车质量问题调查中,大众DSG故障以26%的关注度居首,超出第二名“福克斯发动机漏油”10个百分点。业内人士对此表示,因为上述品牌车型在华销量庞大,因此质量问题的波及面也广。     不过据记者了解,目前大众方面仍拒绝就DSG故障进行召回,仅是软件升级。 投诉影响力居首     影响力取决于汽车产品在市场上的销量。大众品牌在其两家合资公司(一汽大众
[汽车电子]
小电流接地系统单相接地故障选线方法研究
1. 小电流接地系统单相接地故障研究现状 国内外采用的小电流接地选线方法很多, 归纳起来有以下几种: 绝缘监测 法、有功电流接地保护法、功率方向接地保护法、暂态电流接地保护法、残流增 量接地保护法、用模糊神经网络理论改进的传统“零序电流比幅法、零序有功分 量比幅法、 能量法” 注入信号寻迹法、 、基于小波分析的选线方法, 客观地说, 这 些方法都存在一定的缺陷。近年又研究出了几种新方法, 归纳起来有: 阻抗法、S 注入法、智能法、区段查找法和行波法等几种。阻抗法的原理是基于输电线为 均匀线, 即假设故障回路阻抗或电抗与测量得到故障点的距离成正比。 根据计算 的信息的来源不同可分为单端阻抗法与双端阻抗法。由于故障点过渡电阻、分布
[电源管理]
小电流接地系统单相接地<font color='red'>故障</font>选线方法研究
西门子工业以太网通讯网络仿真
1  序言 工业以太网提供了针对制造业控制网络的数据传输的以太网标准。该技术基于工业标准,利用了交换以太网结构,有很高的网络安全性、可操作性和实效性,最大限度地满足了用户和生产厂商的需求。工业以太网以其特有的低成本、高实效、高扩展性及高智能的魅力,吸引着越来越多的制造业厂商。 2  工业以太网的特点 工业以太网是专为工业应用专门设计的,它遵循国际标准ieee802.3(ethernet)的开。放形式,多供应商的高性能的区域和网络单元。工业以太网一般用于对时间要求不太严格、需要传送大量数据的通信场合。将以太网高速传送技术引入到工业控制领域,使得企业内部互联网、外部互联网和国际互联网提供的技术和广泛的应用已经进入生产和过程  自动
[嵌入式]
应用EDA仿真技术解决FPGA设计开发中故障的方法
  本文针对FPGA实际开发过程中,出现故障后定位困难、反复修改代码编译时间过长、上板后故障解决无法确认的问题,提出了一种采用仿真的方法来定位、解决故障并验证故障解决方案。可以大大的节约开发时间,提高开发效率。   FPGA近年来在越来越多的领域中应用,很多大通信系统(如通信基站等)都用其做核心数据的处理。但是过长的编译时间,在研发过程中使得解决故障的环节非常令人头痛。本文介绍的就是一种用仿真方法解决故障从而减少研发过程中的编译次数,最终达到准确定位故障、缩短解决故障时间的目的。文例所用到的软件开发平台为Altera公司的Quartus II,仿真工具为ModelSim。    问题的提出   系统开发在上板调试过程中,有时
[嵌入式]
应用EDA<font color='red'>仿真</font>技术解决<font color='red'>FPGA</font>设计开发中<font color='red'>故障</font>的方法
电子设备电磁兼容仿真模型
随着电气、电子设备的大量应用,电磁波无处不在,它们对于电子设备而言都是潜在得干扰源。但是,若在一个系统中各种用电设备能和谐地是相互兼容的、正常稳定地工作而不致相互发生电磁干扰,则系统中的用电设备是相互兼容的。电磁兼容具有很多复杂的影响因素,要正确建立模型比其它领域要难的多,针对这种情况,我们对电子设备电磁兼容仿真中关键技术-缝隙进行了研究,提出了缝隙转移阻抗等效建模思想。 1电磁兼容仿真建模技术 电磁兼容建模技术是用于建立输入参数(如辐射源、各种激励等)和输出参数(各种响应)之间关系的一种技术。对于任何电磁场泄漏模型,都可以用下面抽象的表达式来表示: 在实际屏蔽体上不可避免地会存在各种孔洞和缝隙结构,所以通过孔洞和缝隙的
[电源管理]
电子设备电磁兼容<font color='red'>仿真</font>模型
基于PC104总线和数据采集板实现综合测试设备故障监测系统的设计
故障监测系统的方案设计 对于测试设备和某控制系统,它们之间由电缆相连,测试设备向控制系统发出控制信号、发送数据及接收控制系统返回的状态信号均通过电缆传输,因此,综合测试设备和控制系统在各测试步骤中的工作状态均在这些电缆中有所反映。为此,本文提出了如图1所示的总体设计方案。 在设备连接关系上,故障监测诊断系统通过信号转接箱与控制系统以及综合测试设备相连,当测试设备对控制系统进行综合测试时,信号转接箱将控制系统及其综合测试设备所产生的各种信号转接后送至信号调理单元,由信号调理单元完成对信号的滤波、限幅、整形、放大、隔离等处理。同时,PC104计算机通过PC总线向数据采集板发出控制指令,控制相应的继电器组和模拟开关工作,接通需要采集
[测试测量]
基于PC104总线和数据采集板实现综合测试设备<font color='red'>故障</font>监测系统的设计
利用FPGA技术实现数字通信中的交织器和解交织器
    摘要: 介绍用FPGA实现数字通信中的交、解交织器的一种比较通用的方案,详细说明了设计中的一些问题及解决办法。还介绍了一种实现FPGA中信号延时的方法。     关键词: 交织器与解交织器  FPGA技术  地址序列  最小时延  信号延时     在现代数字通信系统中,FPGA的应用相当广泛。尤其是在对基带信号的处理和整个系统的控制中,FPGA不但能大大缩减电路的体积,提高电路的稳定性,而且先进的开发工具使整个系统的设计调试周期大大缩短。 1 交织器与解交织器的原理     数字通信中经常用信道编码来提高数据传输的可靠性,其中一些信道编码加入了交织模块,以进一步提高抗干扰性
[网络通信]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved