logo
登录 / 注册

FPGA原型验证学习笔记

头像
张家伟
23-06-06 · 销售经理

EDA作为集成电路设计的基础工具,是IC设计最上游、技术壁垒最高的部分。

根据设计产品的不同,可将 EDA 工具分为模拟设计类、数字设计类、 晶圆制造类、封装类、系统类等五大类。其中系统类又可以细分为 PCB、 平板显示设计工具、系统仿真及原型验证和CPLD/FPGA设计工具等。

根据应用场景的不同,EDA工具的使用主要分为设计、验证、封装、制造等几大类,其中验证(Verification)在EDA工具中覆盖从前端逻辑设计、到后端物理设计、最终制造量产的整个环节,随着芯片设计成本越来越高昂,以及集成度的提高,复杂性也在大幅提升,通过验证发现所有的设计缺陷和错误已命系成败。

验证工作贯穿整个芯片设计流程,可以说芯片的验证阶段占据了整个芯片开发的大部分时间。从芯片需求定义、功能设计开发到物理实现制造,每个环节都需要进行大量的验证。

大规模集成电路设计复杂性的提升,使芯片验证面临资金与时间的巨大挑战。早期开发者想验证芯片的设计是否符合预设,只有等待极其漫长的模拟结果,或是等待流片成果,而一旦结果不如预期,不管是再次模拟或是二次流片,都将产生极高的成本。

因此,当Xilinx推出现场可编程逻辑门阵列(FPGA)时,开发者即可通过用FPGA板拼凑出有效的流程来对设计进行验证,FPGA原型验证这一解决方案就此应运而生,这一比流片便宜、比仿真要快的方式,已成为开发者检验设计有效性的不二选择。

什么是FPGA原型验证?


FPGA原型验证,是基于FPGA的一种芯片功能验证方式。它利用了FPGA可以多次擦写的特性,在芯片RTL代码开发的过程中,将RTL代码综合到FPGA上来做芯片的功能验证。其目的是在芯片流片之前,为芯片开发团队提供一个可以反复迭代的逻辑验证平台。更早更快地找到设计缺陷,比如逻辑错误等,适用于验证专门应用的集成电路(ASIC)和片上系统(SoC)设计和功能的正确性。

在芯片设计定型之后,流片回片之前,为软件开发团队提供一个可以提前开发软件功能的硬件环境,缩短芯片回片之后产品的上市时间。这个验证环境能够让芯片验证与软件验证并行,确保芯片软硬件功能在真实应用场景中准确无误。

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


为什么要用FPGA原型验证

抢占先机

它还可以帮助芯片开发者提早进行嵌入式软件开发及软硬件协同设计,从而加快芯片产品上市速度,抢占市场先机,一直到芯片Tape Out并回片后都可以进行驱动和应用的开发。当芯片回片后,应用程序可以直接基于FPGA版本的驱动来进行简单的适配,即可以应用到SoC芯片上,将SoC芯片Time-to-Market的时间控制的很完美。


不得不提性价比

除了可以提前进行软件开发外,从成本上来说,FPGA原型验证是一个性价比很高的验证手段,更重要的FPGA原型在运行速度上也技高一筹:它在速度上当然比EDA验证高了好几个数量级,即使是与Emulator相比,其性能上也有碾压式的优势。在这种种优势中,“流片前的软硬件协同开发”是FPGA物理原型验证不可替代之处,提早基于该技术平台进行软件驱动开发和应用开发,对于缩短最终芯片Time-to-Market周期意义重大。在软硬件深度定制化、要求芯片到应用的一站式交付的今天,FPGA原型平台的重要性进一步提升。


靠谱来自于对比

现代SoC芯片是一个软硬件协同运行的系统,上面有复杂的软件运行,帮助芯片实现各种功能。与芯片协同工作的软件系统,其设计、开发和验证工作需要和芯片设计验证工作同步展开。这样才能保证芯片功能正确,降低芯片流片失败的风险,缩短产品的上市周期。

为了保证芯片功能正确,在芯片RTL代码开发之后,需要经过一系列的验证流程。常见的数字芯片验证手段,包括逻辑功能仿真、形式化验证、硬件加速器和FPGA原型验证等。

这几种常见的数字芯片验证手段中,FPGA原型验证技术是最适合芯片软硬件协同功能的验证技术之一。FPGA原型验证平台可以提供调试芯片软件必要的真实物理接口和硬件环境。这是逻辑功能仿真和形式化验证无法提供的。

相比硬件加速器,FPGA原型验证平台的软件运行速度快一个数量级,局部或某些接口逻辑代码可以按照更接近真实芯片的频率运行,很大程度缩短了软件运行的调试时间和验证迭代的周期,同时也使得软硬件开发验证并行成为可能。在芯片验证流程中,FPGA原型验证技术是软硬件协同功能验证的必备解决方案,具有显著的不可替代性。


大芯片验证的首选方法


大芯片一般指大型SoC芯片,包含AI engine、CPU、GPU等,多使用12nm以下先进制程,应用于机器学习、自动驾驶、图像识别、自然语言处理、数据中心等领域。对大芯片的验证,是一项复杂且具有挑战的任务,主要痛点体现在如下四个方面。

第一,验证工具需要支持足够大的芯片设计容量。大芯片的流片成本居高不下,流片失败的损失难以估量,因此验证工具需要与时俱进,能够灵活堆叠,从而支持超大规模的芯片设计,并且保障正确性、可靠性。

第二,验证时间需要尽可能缩短。有些验证工具的自动化程度较低,部分流程需要手动干预,这将耗费工程师的精力,影响芯片上市时间。比如,在原型验证方面,因芯片设计过大,需要进行分割后才能验证,传统方法是采用手动分割,既费时费力,又极易出错,自动、智能的分割方法及工具是必然趋势。

第三,需要高效的调试工具。一旦出现问题,需要尽快找到设计中的问题点进行调试,实现最快的迭代速度。面对复杂芯片,有些验证平台的观测性和调试性较差,影响验证效率。此外,调试工具在迭代过程中,还要不断引入方法学和流程的创新,不仅支持功能的调试,还应拓展至功耗、覆盖率、安全等方面的调试;不仅要支持不同设计层级如RTL和Gate级的需求,还要支持事务级和系统级的验证调试。

第四,流片前的验证算力峰值需求如何解决。IC企业流片前存在3-6个月的算力峰值需求,芯片验证需要大内存、高主频的算力以及高性能存储等。如果本地搭建,会耗费大量人力、物力、财力,还会存在计算、存储等硬件资源的限制,加上耗时的采购与部署流程,导致验证工程师难以在预定上市时间内完成所有期望的作业。


要把一块ASIC做出FPGA的原型,需要大致以下步骤

1.  FPGA选型

2.  做板或者购买原型板。

3.  将ASIC设计转换装入FPGA

4.  调试启动FPGA原型

5.  载入软件协同运行

6.  软硬件系统验证



FPGA原型验证的优缺点是什么

性能

FPGA通常建立在最新的制造流程上,以实现最高的密度和运行速度。即使是采用主流工艺构建的FPGA,也可以提供高门限等效计数(FPGA通常以可容纳多少个标准查找表来衡量)。  

超过最大FPGA功能的设计有时在多个FPGA上进行原型设计。这使得将源RTL映射到FPGA原型环境变得更加困难,并且可能会降低原型的性能。 


成本 

FPGA是批量生产的芯片,具有竞争力的价格。许多公司将它们集成到现成(OTS)原型板上,尽管一些公司更喜欢建立自己的原型印刷电路板(PCB) 。 


基础设施

两家主要FPGA供应商(原型设计市场领导者Xilinx及其竞争对手Altera)都提供了广泛的工具来支持他们的产品。他们还与主要的EDA供应商建立了联盟,这些供应商为软件套件提供了增强的FPGA原型设计。 

其他OTS主板供应商也与这些和其他工具供应商以及他们自己的软件有合作关系。 

  

可移植性

FPGA板可以在与最终SoC相同的嘈杂环境中进行测试。这对于打算用于便携式消费设备以及工业,通信基础设施,医疗和军事/航空航天市场的产品有益。 

  

可用性

FPGA原型的成本相对较低意味着公司通常可以构建其中的几个,这加速了硬件验证,软件开发,硬件/软件协同验证和软件验证。每个团队都可以有自己的原型。 


FPGA原型验证的缺陷

-编译时间比较长

-debug方式不是特别成熟


FPGA原型验证面临的技术挑战 


目前ASIC的设计变得越来越大,越来越复杂,单片FPGA已不能满足原型验证要求,多片FPGA验证应运而生。

RTL逻辑的分割、多片FPGA之间的互联拓扑结构、I/O分配、高速接口都对应用FPGA原型验证的芯片开发者提出了更高的要求也带来了前所未有的挑战。那当选择一款合适的物理原形验证工具时,应该在哪些纬度做重点考量和取舍呢?


● 分区

大型设计可能需要在多个FPGA之间进行分离(分区)以实现所需的门控容量。这项任务通常被认为是FPGA原型设计的最大挑战。 

分区过程本身很可能是一个棘手的迭代过程,涉及将设计映射到设备的众多判断调用,以及从RTL或软件中的实际错误中过滤出并纠正映射错误。 


● 手动干预

FPGA原型设计可能需要几种类型的手动干预。 

由于原始设计RTL被转换为FPGA综合和布局工具所需的硬件描述语言(HDL),因此即使工具已经实现了大部分翻译的自动化,也可能需要一些手动编码才能使原型工作。   

映射的各个方面都面临着挑战。FPGA上的时钟树路由(特别是原始设计具有门控时钟的地方)非常困难。如果允许关键路径通过缓慢的芯片到芯片到芯片路径运行,原型性能将会受到影响。原创中的内存和加密块也会带来重大困难。   


● 调试可见性

可用的可见性往往局限于单个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代码是为芯片实现设计,大量深层次组合逻辑的存在(这样可以节省芯片面积),导致了SoC RTL代码在FPGA上实现时时序收敛困难,往往只能达到几MHz。

对于大型的SoC,内部的CPU/GPU/CODEC/NPU等计算和编解码模块逻辑复杂,往往成为整个设计的Timing Wall,导致时序优化过程会占据FPGA Implementation过程30-40%的时间。


● 接口方案

外部子板和FPGA I/O之间的高速同步接口一直以来都是FPGA的痛点和难点:一方面,相比于ASIC,FPGA在I/O时序方面可以调整的空间有限,它不能像ASIC一样可以通过时序约束来灵活调整FPGA I/O信号之间的Skew,导致并行信号接口之间的Path Skew很难控制在一个比较理想的范围内,最终会导致数据采样失败,降低频率往往是一种有效的办法,但是有些控制器和PHY之间的接口是需要满足标准规范的,不能无限制的降低,对于这种情况有时只能想尽办法尝试修复时序,甚至需要修改代码。另一方面,原型验证使用的子板数量不大,市场上往往没有销售,很多时候需要自行设计,进一步给调试带来了不确定性,也延长了调试周期。高速接口的调试往往消耗了大量的人力资源,很多时候都是靠调试的经验和灵感解决问题,这么做不仅费时费力,而且效果不佳。


● 可观测性

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


● 产品的成熟度

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


FPGA原型验证学习笔记脉脉
阅读 48
声明:本文内容由脉脉用户自发贡献,部分内容可能整编自互联网,版权归原作者所有,脉脉不拥有其著作权,亦不承担相应法律责任。如果您发现有涉嫌抄袭的内容,请发邮件至maimai@taou.com,一经查实,将立刻删除涉嫌侵权内容。
相关推荐
最新发布
大家都在看
热门人脉圈
    头像
    我来说几句...