FPGA原型验证已是当前原型验证的主流且成熟的芯片验证方法——它通过将RTL移植到现场可编程门阵列(FPGA)来验证asic的功能,并在芯片的基本功能验证通过后就可以开始驱动的开发,一直到芯片TapeOut并回片后都可以进行驱动和应用的开发。


目前ASIC的设计变得越来越大,越来越复杂,单片FPGA已不能满足原型验证要求,多片FPGA验证应运而生。本文我就将与大家探讨FPGA原型验证的几个经典挑战性场景,(具体应对的办法,请戳原文。)




·       容量限制性能要求

对于大型的设计(大于2千万等效ASIC门),一块FPGA往往容纳不下,此时必须将多块FPGA互联才能验证整个设计,在这种情况下,就需要对大型的设计进行Partition即分割。Partition引入了新的问题,而这些问题其实在芯片中并不存在,很多时候耗费很多人力去实现一个可用的Partition方案,仅仅是受限于FPGA的容量而不得已的处理办法。Partition引入的最大问题是对I/O的需求激增,虽然FPGA有超过1000个可用的I/O,但是一个完整的SoC如果被拆分成规模相当的几个部分时,每个部分之间的互联信号数量往往会远超1000个,所以在I/O数量受限时,必须采用TDM(Time Division Multiplex),即FPGA内部的多个并行信号转为高速串行信号,通过FPGA I/O传输到另一块FPGA,然后再进行解复用,转换成并行信号,实现信号从一个FPGA到另一块FPGA的传递。引入了TDM虽然解决了I/O瓶颈,但是Mux和De-Mux引入了额外的延时,导致Cross-FPGA的Path成为Critical Path,进一步降低了FPGA的可运行频率,可以说Partition是不得已而为之的方案,最终的结果只是得到一个可用的方案而非理想的方案。另一个方面,由于在SoC原型验证中模块常常会增减,导致需要频繁的改动Partition方案,如果手动去处理,则需要花费很多精力才能得到一个上文提到可用但折中的方案。此外,处理大量的Cross-FPGA信号非常容易出错,所以对于大型的SoC FPGA原型验证,必须采用自动化的工具去完成Partition,这对EDA工具而言亦是全新的挑战。



·       迭代速度

由于SoC芯片的设计频率很高,为了让原型验证平台尽可能和SoC芯片性能接近,开发者期望让FPGA原型平台运行在尽可能高的频率上,但是由于SoC的RTL代码是为芯片实现设计,大量深层次组合逻辑的存在(这样可以节省芯片面积),导致了SoCRTL代码在FPGA上实现时时序收敛困难,往往只能达到几MHz。



·       可观测性

FPGA也是芯片产品,所以内部的信号无法直接观测。通常需要借助于FPGA的debug工具在生成Bit文件前选取要观察的信号。当Bit文件加载运行时,必须通过配套的Debug工具观察指定的信号波形,但是受限于BlockRAM的容量以及信号优化等原因,如此调试的效率比较低。


·       产品的成熟度

原型验证是一项壁垒颇高的技术,串联着芯片设计和最终应用,需要极强的适用性和灵活度来适应发展迅速和多样性的芯片研发,通过和一线芯片研发人员的通力合作,打造使用生态圈,不断进化和迭代技术才能始终帮助芯片开发者实现“ShIFt-Left”研发,加快产品上市时间。



·       各类FPGA原型验证平台技术对比

目前市面上常见的FPGA原型验证平台可以分为两大类别,一类是芯片设计公司自己制作的FPGA板(Build Your Own, 以下简称BYO); 另一类是商用FPGA平台,比如新思科技的HAPS方案。



就上文提到的一些具体考量点,各类原型验证平台的对比如下: https://www.synopsys.com/blogs/s... 08/fpag-prototying/