联系我们

  • E-mail:tr@zxopen.com
  • E-mail:canny@zxopen.com
  • 点击交谈! 点击交谈! 点击交谈!

验证FPGA设计:模拟,仿真,还是碰运气?

现在的许多FPGA用户工作中都要用到模拟。但是,什么时候才能不用模拟,直接将设计放到芯片里?

 

 * 大型FPGA设计中需要采取类似于 ASIC设计的流程。

 

 * 在验证流程中,有必要将模拟和基于FPGA 的仿真混合使用。

 

 * 对于模拟和仿真的混合尚无公认的指导性方法。

 

 * 通过简短的调查,提出了一种可为大家接受的验证先进FPGA设计的建议方法。

 

 曾几何时,要验证 FPGA 的逻辑设计,可以先编译、写入,然后按下评估板上的复位按钮。但是,随着FPGA规模的增大,这种被Xilinx公司软件产品营销总监Hitesh Patel 称为“blow and go”(逃生法)的验证方式已不能满足要求。要做出一个近乎完美的有百万个门的设计,达到可以从封装引脚就可以调试的地步,成功的机会非常之渺茫。因此,FPGA设计组也开始采取ASIC设计组已使用多年的方法,采用基于软件的设计模拟。

 

 但是这种方法也引出了一系列重要的问题: FPGA设计中模拟的作用应该跟在ASIC设计中一样吗?验证人员是否还是要在某个时刻将设计装入产品FPGA并马上开始测试它?如果是这样,这个时刻是在什么时候?为了弄清设计团队现在都在做什么,我们询问了一些工作中与FPGA用户关系最紧密的人。作为参考,我们还询问了几个在验证过程中采用FPGA 原型来进行ASIC设计团队,以了解他们的意见。

 

 优点和缺点

 

 多数人讨论验证流程时,首先会比较模拟和在FPGA内验证的优劣。尽管有经验的读者可能会觉得乏味,本文也还是采用类似的模式。

 

 模拟的一个很大的优点自然是它的访问能力。该方法可以以时钟周期分辨率观察RTL (寄存器传输层)设计中任何信号。只要有必要,对设计状态的控制可以达到任何水平。达到可观性和可控性的唯一限制就是对RTL的了解程度和对模拟环境的掌握程度。你可以在有限的设计领域交互式地工作,也可以构建运行好几天的大型试验。构建的模拟项目运行相对较快,所以可以快速地对很多东西进行试验。

 

 模拟的另一优点是现在的多数模拟环境都可以很好地使用OVL(开放验证库,Open Verification Library)或SystemVerilog断言。经常可以找到直接的方法将这些断言输入到模拟环境中。随着基于断言的验证日益普遍,这点就越发重要。此外,通过模拟环境还可以将设计的激励和测量部分与设计本身分割开。这看起来似乎不是主要问题,但是,在密集验证工作中,这一特点对于保证设计的完整性会很重要。

 

 但是,模拟比较慢。“如果你在做一个有2百万或3百万个门的块,模拟非常好,” 硬件仿真设备厂商Eve的营销副总裁Lauro Rizzatti说。“但是,在有多个块的层次,模拟会变慢,最终达到完全不可用的程度。”

 

 设计的复杂度并不是唯一的限制因素。Altera公司技术营销高级经理Phil Simpson指出,如果设计本身就需要大量数据来进行验证,即使在块的级别模拟也会变得不实用。他以视频编解器为例说明这个问题。在视频编解器中内部状态非常之多,所以可能只有在15分钟的视频短片中间才能表露出问题。但是,对15分钟高清视频压缩和解压的模拟会非常费劲。

 

 对电路内方法的讨论

 

 FPGA 内验证方法的优劣与模拟正好相反。首先, 显然FPGA 很快。人们经常可以以全速运行设计。不过,在某些情况下,这样做就意味着时序收敛问题会较多,超乎设计早期预期的程度。另外,与模拟不同,将多个模块综合到设计中时,FPGA 并不会降速。这样就可以测试整个设计,而非单个块,并且可以以大量的实际数据集来运行测试,而不是采用精心编制的测试用例。

  由于FPGA速度较快,而且它的I/O部件就是实际应用所需要的I/O部件,所以也可以采用系统中测试设计:可以在装入目标系统的FPGA开发板上测试,或者,如果目标PCB(印刷电路板)可以用的话,就在目标PCB上测试。这样的测试可以消除测试用例是否能够如实反映设计工作环境的疑虑。另外,在实际使用的电路板上测试设计可以暴露出I/O方面的问题——例如电气问题、信号完整性问题,或是在高速串行协议下不兼容问题。这些问题用其他方法几乎无法检测,而系统内测试则会形成一个软件测试平台,带来额外的好处。

  这些优点都是系统级验证方面的。但Altera公司的Simpson指出:在芯片内测试块也有一些有用的优点。“一旦将某个块装入FPGA,就可以使用嵌入式处理器核(如Nios)来辅助调试过程,” Simpson说。“例如,处理器核可以使数据进出芯片,可以控制测试时序。这样,在块周边电路还没做好的时候就可以单独测试某个块。”

  “在我们的自有IP(知识产权)开发部门,我们编写了在Nios核上运行的事务处理器,以此来生成伪随机测试,” Simpson 接着说。“据我所知,这样的做法在用户中还不普遍,但它非常有价值。”