目前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方案。