网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> 评测 >> FPGA板卡评测 >> Xilinx >> 文章正文
  [组图]运用FPGA测试的一些有效办法           ★★★ 【字体:
运用FPGA测试的一些有效办法
作者:Free    文章来源:本站原创    点击数:    更新时间:2008-2-20    
【摘要】 对于芯片前端设计而言,在流片前的测试是保证芯片正常工作的重要环节。本文针对FPGA验证办法中遇到的一些棘手问题,提出了自己的解决企图并在实际工程中加以运用,取得了良好的成果。

【关键词】 FPGA 测试 时序 代码一致性

引言

随着芯片设计技术越来越成熟,越来越多的产品选择运用SoC(System on Chip)的技术实现。然而,每一次流片不必然都能达到预期的成果。根据 Synopsys公司统计,有超过60%的公司需要重新流片(respin)。在这个过程中挥霍了大批的金钱,一次修正平均的破费就超过100万美元。如果一旦错过了商品推出的最佳时机,那么错过市场时机的代价则以数千万美元计,甚至更高。据统计,在需要respin的芯片中有43%是在前端的设计和实现的时候产生的逻辑功效过错。如何避免或减小如此高的风险是每一个设计单位思考的问题。

现在行业内有两种解决此问题的企图,第一种企图是运用越来越先进的EDA仿真工具仿真测试。业界产品的两大巨头Synopsys和Cadance都推出了自己的解决企图。然而,EDA工具非常昂贵,却不必然能满足每一个项目的请求。另外,EDA工具的仿真时间很长。用一套无线通信体系举例,初始化的过程就需要半天的时间,每收发一帧都需要3-4个小时,因此在有限的时间内不可能完成比较全面的测试(测试时采纳的都是并行运算的办法,工作站都是Sun Blade2000的配置)。最后,仿真软件再完美也不是实际的硬件操作,因此某些只可能在硬件上产生的问题,无法通过仿真来获得。比如某些时序问题和功耗问题。另外,硬件的“脾气”比较古怪,经常会涌现一些意想不到的状况,这些都是仿真软件无法模拟出来的。第二种解决企图是采纳FPGA进行真实的硬件测试。比如Xilinx公司的EasyPath解决企图。然而运用这种企图也面临着一些需要解决的问题,比如如何使设计的产品可以既在ASIC上工作,又在FPGA上正常工作,如何保证FPGA与ASIC 的一致性。针对这些问题的解决办法是本文重点讨论的内容。

本文的测试实例和测试办法均来源于北京市嵌入式重点实验室的无线局域网芯片项目,本项目的产品目前已经成功流片。这些测试办法的运用对项目的顺利进展起到了症结性的作用,起到了良好的成果。
 
时序问题的解决

我们知道FPGA可以接受的时钟和所容许的时序远远低于ASIC。但作为ASIC产品而言,我们在设计的时候又往往采纳较高的时钟速率。由于ASIC时钟树与布线相对自由,故对于高速率设计解决起来相对容易。对于Xilinx FPGA而言,尽管采纳了90nm工艺的Virtex-4可以支撑的性能高达 500M[1],但是其时钟树和布线资源相对固定,因此一旦在编译和布局布线的时候处置不当,就会产生时序冲突(timing violation)。产生时序冲突的成果,轻则使设计的逻辑与实际布局布线后的网表不一致,重则导致布局布线基础无法通过,从而致使验证无法进行。

我们在解决时序问题的时候采纳了五种不同的办法。其中一种办法是应在设计中就加以注意,两种在综合的时候进行,还有两种在布局布线时采纳。

设计过程中注意时序问题

若盼望设计的产品能够在FPGA验证平台上顺利的完成验证,在设计过程中就需要注意尽量多的运用FPGA的内部资源,如DSP48,乘法器,RAM,DCM等。

在我们的设计中有不少滤波器,这些滤波器正好可以运用DSP48[2]这个模块。该模块如图-1所示,为乘加结构。滤波器若不运用这种模块,则需进行大批的乘、加运算。这样不但挥霍资源,而且很容易导致时序无法满足请求。而如果运用这样的模块,则基础上所有的滤波器都不再处于“最差路径”上。

 
 
图 1 DSP48示意图

对于乘法器,如果运用slice搭建不仅挥霍资源,而且性能差,位宽一旦比较宽就会导致时序涌现问题。Xilinx的ISE中配有 Core Generator这个工具。通过该工具可以生成需要的乘法器。运用这些乘法器来代替普通的乘法器,可以达到满意的成果。除了乘法器,还可以运用该工具产生RAM和DCM等,在此不再赘述。
 
综合过程解决时序问题

我们运用 Synplicity公司的Synplify工具进行综合,这是业界通常运用的综合工具之一。选择该工具最重要的原因在于它与Xilinx的FPGA配合的很好。我们做过实验,通过该工具综合产生成果报表,再通过ISE产生真实布局布线后的报表。对这两个报表的时序估计部分进行比较,我们发明两者之间惊人的相似,最差路径之间的差异不超过1ns。

我们知道,综合的时候需要设置束缚,最重要的是时钟束缚。这个束缚限制了体系工作的频率。为了降低体系对于时钟抖动的敏感性,我们采纳的第一个办法是在设置时钟束缚的时候将此束缚值设的略高于实际的时钟频率。这样做有一个前提,那就是在综合后不得有负的时钟余度(time slack)涌现。当没有负的时钟余度涌现的时候,进步时钟束缚可以有效避免因时钟抖动而引入的时序问题,但是如果因为进步了束缚中时钟频率,而导致负的时钟余度的涌现,那么有可能导致在布局布线过程中产生时序冲突而无法正常布局布线。在这种情况下,就不宜进步束缚中的时钟频率。

在综合中采纳的第二个办法是运用综合工具提供的pipeline和retiming功效[3]。这些功效可以调剂存放器的位置,使之在不改变逻辑的前提下,将存放器的位置调剂的更加合理,如图-2所示。这个功效重要用于组合逻辑过长且不合理的情况下。当然,如果某些乘法器位数过宽而成果没有存放的时候也会导致组合逻辑时序紧张。当产生这种情况而retiming功效又无法纠正时,就需要设计者在做设计的时候对乘法器的输出成果做一拍存放,同时其余的掌握逻辑也要做相应的调剂。

 
 
图 2 retiming 示意图

布局布线阶段解决时序问题

当综合工作完成,进入布局布线的阶段后,仍然有两种办法可以改进逻辑时序问题。

第一种是手动增加并调剂BUFG(Global Clock Buffer)。BUFG是Xilinx的全局时钟资源,所有时钟树的起点都是BUFG,位于 FPGA的北极和南极。当布线后仍有负的slack时,有可能是某些当作时钟运用的信号没有被放上时钟树,此时就要手动将这些信号放上BUFG。若遇到门控时钟,还应该运用BUFGMUX资源。另外,在Virtex-4中,北边的BUFG重要负责北部的时钟,南部的BUFG负责南部的时钟。在我们的项目中,共有十余个时钟,因此,BUFG位置的选择也很症结。有些时候,工具不能解决一切问题,只有手动调剂BUFG的位置,或将BUFG的位置信息写入用户束缚文件才可以取得较满意的成果。

在Virtex-4中共有16个BUFG,若都被运用且经手动优化后仍不满足请求 ,那么还可以运用ISE提供的Floorplanner工具,对设计的各个模块手动进行位置摆放,使各个模块尽量靠近自己所运用的时钟树。

代码一致性

对于经过FPGA验证的代码而言,最担心的是经过验证的代码和进行流片的代码不一致。导致这个现象产生的原因是多种的,其中版本掌握和由于FPGA、ASIC专用器件不一致而引起的问题是最常见的两个问题。前者不在本文的讨论范畴,故在此略过。

对于经过FPGA验证的代码,为了能够使被测代码可以顺利的在FPGA进行验证,根据2.1节所述,一般都采纳了FPGA专用的器件。这些FPGA专用器件在ASIC中是不存在的。为领会决这个问题,我们通常采纳“假代码”(Fake Code)解决。

顾名思义,“假代码”就是在代码中保留FPGA专用器件的名称和接口,但是在FPGA和ASIC中运用不同的器件内核。该器件若在FPGA下运用则运用 FPGA专用器件,若在ASIC下运用,则运用自己编写的代码。尽管这种做法仍然无法保证代码的完全一致,但是却最大限度的避免了代码的差异。

结论

终究运用EDA 仿真工具还是运用FPGA进行流片前的功效验证一直是业内讨论的热点话题,不同的设计、测试人员也有自己的观点。本文针对运用FPGA进行验证测试所遇到的一些问题提出了相应的解决办法,对于运用FPGA进行验证测试的工程师有必然的参考意义。

【参考文献】
1 《Virtex-4 User Guide》 Xilinx Corp.
2 《XtremeDSP for Virtex-4 FPGAs User Guide》 Xilinx Corp.
3 《Synplify Pro User Guide》 Synplicity, Inc.

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章: 没有了

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号