时间:2024-08-09 来源:网络搜集 关于我们 0
由于工作的关系,我一直在FPGA上进行芯片的原型验证。所以不自谦地说,作为一个拥有深厚FPGA背景的芯片工程师,原先都一直在用公司自研的FPGA平台(1颗Xilinx VU440 FPGA),也练就了扎实的芯片剪裁,手动分割,后端时序优化,上板调试以及软硬件debug的功底。
但是由于前段时间又被老板安插了新的项目,设计规模暴增,开发周期变得集齐极其紧张,所以成功向老板要到了资源,引入一款新的自动化程度更高,性能更强的FPGA原型验证平台来替换自研的FPGA平台。
因为有幸主导了整个选型的过程,觉得很有意义整理出来,分享给各位同仁。
FPGA原型的验证平台分类
众所周知,FPGA原型验证平台基本可以分为两大类,自研的原型验证平台和商业的原型验证平台,
1.自研的原型验证平台
相信很多同行会选择使用自研FPGA的品台,因为很多公司内部就有硬件设计部门,所以就会直接从Xilinx或者从Intel采购FPGA,自行设计研制的FPGA平台。由于同属于一个公司甚至同一个部门,针对新的项目或者新的原型验证平台需求,能够快速进行实现平台更新或者重新设计,并且可以定制化一些特殊的接口来满足自己芯片的某些特殊应用。
2.思尔芯-S2C
S2C公司是一家国内的 FPGA 快速原型验证解决方案供应商,他提供丰富种类的FPGA原型验证硬件平台,比如基于Xilinx的Virtex Ultrascale/Ultrascale+和Intel的Stratix-10/Arria-10等系列的平台,每个系列又有不同的容量。目前以4颗XCVU440的Quad VU440 Prodigy Logic Systems系列容量最大。除了硬件平台,S2C还提供了Prodigy系列软件。其中Player Pro能提供基于网表(EDIF)的自动分割功能。
3.Synopsys公司的HAPS系列
HAPS是Synopsys公司推出的FPGA原型验证平台,该平台自2003年第一代HAPS-10起,到目前已经发展到第七代HAPS-80。HAPS原型验证平台是一个集成解决方案,包含了硬件部分和软件部分。目前被广泛应用的HAPS80系列,发布于2014年,最大规模的硬件平台HAPS80-S104,内含4颗Xilinx的VU440 FPGA,及支持多用户模式和多台级联(最高可达64台)模式来满足不同设计的需求。集成软件除了提供编译,综合等功能,最大的亮点是支持多FPGA和多台HAPS的Auto Partition(自动分割),同时拥有强大的调试能力,比如DTD(深度跟踪调试)和GSV(全局信号可见)功能。
4.Cadence公司的Protium系列
Cadence公司在FPGA原型验证平台上起步比较晚,2017年尝试推出了第一代FPGA原型验证平台Protium S1,于2019年发布了改进的第二代Protium X1。Protium X1 硬件采用。
Blade/Rack结构,一个Blade/Rack包含了6颗Xilinx VU440 FPGA,集成软件除了支持编译,综合以外,也支持跨FPGA的Auto Partition(自动分割),同时支持DCC(Data Capture Card)调试等。
项目对FPGA原型验证平台的需求
而我接手的这个新项目,设计规模大概6000万ASIC Gate,需要一个FPGA原型验证平台进行软件硬件联合开发,主要的高速外围接口有DDR4,SATA 3.0和PCIe Gen3。结合上一代项目在自研FPGA平台上实现,以及使用过程中软件开发组的反馈,我对于新的FPGA原型验证平台提出了如下几点要求:
➢ 首先是项目对FPGA原型验证平台的要求
· 可以实现全芯片设计,能够进行全芯片验证
· 平台稳定、可靠,可执行长时间,不间断的硬件压力测试
➢ 再是软件开发团队对FPGA原型验证平台的要求
· 能尽早开始在平台上进行软件开发
· 在平台验证完的软件,能快速移植到真实芯片(在芯片回片3天内跑通)
· 性能达到软件运行,测试的需求(10MHz以上)
➢ 然后是FPGA实现团队对原型验证平台的要求
· 具备RTL级Auto Partition(自动分割)功能,减少原型验证实现工作量
· 具备大容量以及级联功能,避免维护多个剪裁版本
具有完整强大的工具链,能缩短实现周期,减轻FPGA实现团队的工作量
针对以上这些要求,我的团队在常见的FPGA原型验证平台进行了初步筛选,具体结果如下:
原本使用的FPGA平台因为容量小,需要剪裁,可靠性差,和没有完整工具链等原因被排除。在RTL级Auto Partition方面,S2C只支持基于网表(EDIF)的自动分割,需要使用Xilinx Vivado或者Synopsys的Synplify先将RTL设计综合成EDIF才可以开始分割。
然而因为未分割前的设计很大, 6000万门设计综合的时间约需要20小时,这样导致整个流程被拉长,一次4FPGA的流程时间超过30小时。而HAPS-80和Protium X1的RTL级partition就要方便省时很多,不超过11小时。下一节有两个平台的全流程时间对比,都要远远小于S2C。
另外S2C在Auto Partition方面也有很多限制,不支持跨FPGA的时序分析,不支持灵活TDM比率,这些都直接影响了Partition的效率和性能。
工具链方面,S2C的综合使用第三方工具,而HAPS-80和Protium X1都使用自己专有的综合工具。S2C在debug方面和HAPS-80的DTD、Protium X1的DCC也有很大差距。
剩下的两个平台HAPS-80和Protium X1都满足三方要求,但是还需要进行平台性能的评估,是否能够满足软件团队10MHz以上主频的要求。
基于实际设计的评估
1.性能评估
老板很给力,直接让我们在HAPS-80和Protium两个里面挑,所以我就分别使用HAPS-80和Protium X1的工具,读入设计RTL,通过自动划分,然后运行工具全流程,进行了性能评估,得到的结果如下:
能够看到在初始性能上,HAPS-80就远高于Protium X1,在进行性能优化后,HAPS-80更是达到14.5MHz,完全满足软件团队对于10MHz性能的要求。而Protium X1优化后也有很大的提升(+30%),不过依然不满足软件团队对性能的要求。根据这个结果,我自己总结了一下,这两款性能的差异主要来源于以下几个方面:
o Auto Partition(自动分割)
o HAPS的Auto Partition算法更成熟,时序驱动的自动分割能自动解决Multi-Hop等问题,对性能提升贡献很大
o Protium X1 的流程是先综合,再分割,Auto Partition算法在综合后电路分割技术上还需要提升
o 综合方面
o HAPS的综合使用了Synopsys FPGA综合工具Synplify的成熟引擎,占有绝对优势,能够综合出面积速度比更好的电路
另外,从软件评估结果看,同样设计,Protium X1要比HAPS-80更占资源(50%*6 FPGA > 61%*4 FPGA),这也是因为HAPS-80的综合工具能够综合出面积小,性能高的电路。
而且从流程时间上来看,Protium X1要更占优势一些,比HAPS-80快2小时。HAPS-80的流程时间主要花费在后端流程Place&Route上,因为每个FPGA的资源更多一些,同时时钟频率又更快,导致Route时需要更多的迭代(Iteration)来完成时序收敛。
2.高速接口方案
这个项目设计除了基本的低速外围接口,比如UART,SPI,JTAG等之外,主要还有高速外围接口DDR4,SATA 3.0和PCIe Gen3等。
DDR4:HAPS-80和Protium X1都可已使用Xilinx MIG IP实现,或者Controller + PHY model方式实现,基本相同
SATA3.0 和PCIe Gen3的实现上:
o Protium X1 和HAPS-80 都提供Speed Bridge(降速桥)的方案
o 但HAPS-80还提供了真实外围接口的方案,即使用真实子板
o HAPS的SATA子板能直接和SATA硬盘连接
o HAPS的PCIe Gen3子板及背板可以连接EP设备
从高速接口方案上看,HAPS-80的方案更灵活,相对于Speed Bridge的方案,选择真实子卡的方案,成本更低,并且还能验证到真实的物理接口,方便软件进行驱动的开发和硬件进行压力测试 。此外,培训产品的时候得知Synopsys还提供有加速FPGA原型验证的开发组件,叫IPK,不过我们这次评估没有使用。
基于以上两个方面,主要是软件团队对于10MHz以上性能的要求,最后我们的FPGA原型验证平台选择了HAPS-80 S104.
执行数据分享
我们最终设计在HAPS-80上进行了Bring-up,具体的执行过程的记录如下:
总体上看,从ASIC设计的RTL代码到第一个可用的原型验证平台实现,并达到软件的性能要求,用了约2周(8.5天),比前一个项目5周节省很多。从软件在平台上调试到Linux Kernel up,可以进一步运行应用软件用了约2周(9天)。整个过程用了3周半(18天)。
Debug功能
令我惊喜的是,在软件的调试过程中,HAPS的debug功能发挥了很大的作用。其中有三个方面是加速调试的,对9天Linux Kernel boot起来贡献很大:
o DTD(Deep Trace Debug)功能。HAPS板上自带的8GB DDR3存储debug 波形,调试中最多抓取了宽度~5000bit的内部信号,存储深度为300万cycle。
o GSV(Global Signal visibility)功能。作为对DTD功能的补充,GSV可以获取设计中所有Flip-Flop的状态,当调试中抓取的内部信号不能debug问题时,使用GSV可看到更多设计内部状态,然后对设定debug的方向和下次抓取哪些内部信号提供更好的指导。
o 单FPGA的流程。HAPS的流程提供了自动分割后单FPGA从RTL到bitfile的流程。这个流程在debug L2 Catch问题时发挥了很大作用,因为抓取不同的信号,以及L2 Catch代码更新都在一个FPGA里,所以只需运行轻量的单FPGA的流程,而不需要将4 FPGA的设计从头到尾完全运行一遍
每个平台各有设计理念和优势,以上的分享都是来自于本人项目体验。在此,希望有未来更多优质FPGA原型平台,在自动流程,性能实现,高速接口解决方案,系统稳定性等方面有所突破,满足更多项目需求。
欢迎各位同行在阅读后与我交流,期望共同探讨,共同进步。