数字芯片设计验证经验分享系列文章(第四部分):将ASIC IP核移植到FPGA上——如何测试IP核的功能和考虑纯电路以外的其他因素
本系列文章从数字芯片设计项目技术总监的角度出发,介绍了如何将芯片的产品定义与设计和验证规划进行结合,详细讲述了在上使用IP核来开发原型项目时,必须认真考虑的一些问题。文章从介绍使用预先定制功能即IP核的必要性开始,通过阐述开发ASIC原型设计时需要考虑到的IP核相关因素,用八个重要主题详细分享了利用ASIC IP来在FPGA上开发原型验证系统设计时需要考量的因素。
在上篇文章中,我们分享了第五到第六主题,介绍了我们如何确保在FPGA上实现所需的性能和在时钟方面必须加以考量的因素有哪些。本篇文章是SmartDV数字芯片设计经验分享系列文章的第四篇,将继续分享第七、第八主题,包括如果目标技术是FPGA,而不是ASIC,那么需要如何测试IP核的功能?设计团队还应该牢记什么?
作为全球领先的验证解决方案和设计IP提供商,SmartDV的产品研发及工程应用团队具有丰富的设计和验证经验。在国产大容量FPGA芯片和IP新品不断面市,国内RISC-V CPU等IP提供商不断发展壮大的今天,SmartDV及其中国全资子公司“智权半导体”愿意与国内FPGA芯片开发商、RISC-V IP和其他IP提供商、集成电路设计中心(ICC)合作,共同为国内数字芯片设计公司开发基于本地FPGA的验证与设计平台等创新技术与产品。
话题7:如果目标技术是FPGA,而不是ASIC,那么需要如何测试IP核的功能?
复杂电路的验证通常必须在FPGA上进行,其严格程度等同于ASIC开发的标准。众所周知,在这方面是不允许有错误产生,因为后果很严重。ASIC的每个分岔(例如,由于在电路开发期间产生的错误,而在验证期间没有发现)不仅会导致产品交付严重延迟,而且还会导致大量的额外成本。当然,在使用FPGA时不会出现这样的问题,因为在应用设计更改后,这些组件可以重新配置而无需浪费太多精力——但是,在使用可编程的组件时,应该采取最大的谨慎态度。这是很好的工程精神!
最终,FPGA被用于消除早期开发阶段的设计错误,从而确保在ASIC上实现的电路基本上是无错误的。遗憾的是,正是由于在可编程的组件上执行功能测试的简便性和速度,往往使人们不愿意首先通过仿真验证RTL代码的更改,而是在实际操作中测试电路设计。这里忽略的是,这种方法可能会忽略在仿真中所使用的测试台可以发现的极端情况。在某些情况下,验证覆盖范围会减少——尽管FPGA允许在相同的时间范围内比仿真运行更多的验证周期。如果使用FPGA认真地进行功能测试,则这种验证方法可提供比仿真验证方法更多的可能性。
通常情况下,ASIC和SoC设计包含许多复杂的行业标准接口,用于与外部设备(USB、PCIe等)进行通信或连接标准总线(AHB、AXI等)。在设计验证过程中,这些接口还被用于连接测试环境(测试台)。这种连接通过称为验证IP(VIP)的模块实现。验证IP是一种特殊的IP核,它将给定接口的总线功能模型(BFM)的功能与测试台中使用的测试用例框架功能相结合。验证IP是一个可重复使用的IP核,可用于创建必要的测试,以缩短SoC验证时间并增加覆盖率。虽然验证IP通常用于验证标准总线协议,但它也可用于系统性能分析,并且越来越多地用于模拟、仿真和虚拟原型设计。
图7:带有主接口、设备和集线器USB4的验证基本工作原理图,使用专用验证IP(VIP)可以显著增加验证覆盖范围。
验证通常是电路创建过程中最耗时的部分。专用的验证IP可以显著地增加验证覆盖范围,可覆盖极端情况,并可显著地减少设置仿真系统所需的总体工作量(例如,创建模拟刺激)。
测试通常可以通过使用FPGA来实时进行。这意味着直接与ASIC相比,FPGA可以相同或降低的时钟频率来运行设计。即使在使用FPGA时需要降低时钟频率,因为可编程性总是需要逻辑单元的冗余,因此需要较大的芯片面积(这反过来导致更高的延迟);但与纯仿真相比,验证速度仍然要高得多。这种加速型验证使得发现在仿真中永远不会发现的错误成为可能。
尽管使用FPGA进行ASIC原型设计具有诸多优点,但将最初专为ASIC目标项目而开发的电路移植到FPGA上并不是一件容易的事情,这一点怎么说都不为过。
最重要的一点是,在FPGA中实现电路通常需要对电路本身进行更改。在前面的主题部分中,我们已经研究了可能需要实施的更改。每一次电路的改变都意味着,稍后将被映射到ASIC上的电路是已经验证的,但并不是完全相同的,而是经过修改的版本。当然,有必要相应地调整仿真设置,例如ASIC电路开发的测试台。
关于测试结构,还有一些事情需要考虑。例如,扫描结构经常出现在ASIC RTL代码中——关键字:DFT(面向测试的设计)——以便在交付前轻松识别有故障的ASIC组件并相应地对其进行筛选。这种测试结构在FPGA中是不需要的,因为这些组件都是已经过测试才交付给最终客户,因此不需要插入额外的测试结构。事实上,这些组件实际上是破坏性的,因为实现将导致组件利用率的增加,并且还需要更复杂的时钟分布。有必要消除在FPGA逻辑综合中为测试引入的预防措施(例如,扫描-FF),或将它们“隐藏”在逻辑综合中。
“干净”的设计实现使用“define”和“ifdef”指令根据期望的目标架构(ASIC或FPGA)来选择这样的测试结构,或者使它们对于逻辑综合“不可见”。通过使用这些指令,也可以实现用于存储器和时钟生成或分配的特殊FPGA库组件的集成,这使得IP核的用户能够简化电路以适应所需的目标架构。其目的是加快电路的创建,从而提高生产率。当然,应该指出的是,最终的实现并不是完全相同的。然而,由于目标元件也不相同,因此对电路进行相应的调整是不可避免的。
对原始设计进行更改是不可取的。原型设计的理念是将稍后在ASIC中实现的功能映射到一个可编程组件中,而不需要进行重大更改;即使有改动,最好也是同步相同的更改,以检测可能的错误。但是,如果电路本身发生变化,则可能由于变化而引入误差。由于实现不完全相同,不能保证ASIC电路中没有更多的错误,因为它没有事先经过充分的测试。然而,如果在ASIC实现之前根本没有使用FPGA,则可以实现更高的验证覆盖率。毕竟,要验证的电路只有部分区域是不同的,并且与仿真性验证方法相比,允许更多的测试周期。
另一个需要考虑的要点是发送和接收数据的物理通信接口,诸如MIPI、USB、PCIe等接口IP通过差分接口传输串行或并行高速数据信号。为了在发射器和接收器之间建立连接,就需要一个PHY来传输差分数据流。这种PHY可以在ASIC上作为模拟电路来实现,然而这在FPGA上是不可行的,或者如果行的话,那么只能通过使用可提供的SerDes IO或高速收发器作为辅助。当然,这意味着FPGA实现与ASIC电路完全不相同。在绝大多数情况下,有必要通过连接到FPGA的附加外部PHY组件来提供物理接口。如果电路在实际运行中进行测试,其物理接口将与最终的ASIC实现之间存在差异。
总之,可以说大多数验证工具都可以同时用于ASIC和FPGA目标(例如,仿真器、形式验证等)。然而,在某些方面存在显著差异,例如RTL代码中存在的测试结构或通过PHY接口将电路连接到“外部世界”。原则上来说,使用FPGA可在验证覆盖率方面提供显著的优势,但是移植专为ASIC开发的电路部件总是需要相当多的额外工作。在这种情况下,使用验证IP可以为简化复杂的功能测试、增加验证覆盖率和加速验证做出重大贡献。
主题8:设计团队还应该牢记什么?
我们已经涵盖了很多领域,但是当这些IP最初是为ASIC目标架构创建的时候,在FPGA方向上移植电路时需要考虑更多。
正如已经详细解释的那样,可编程组件的使用适合于在实际操作中测试电路,从而确保它在很大程度上是无错误的。在项目的早期阶段就有一个可用的功能电路具有许多价值:在其帮助下,不仅可以先进行软件和固件的设计,而且还可以在ASIC仍处在流片过程中就使用基于FPGA的原型对它们进行测试。
如果要使用FPGA,则应该在RTL创建期间就采用“专为原型而设计”的方法。这并不总是容易实现的。例如,如果ASIC电路设计的要求是尽可能将功耗保持到最低,那么除了对时钟分布进行操作(例如,通过插入门控时钟结构)之外,还经常使用基于锁存器的设计方法。该想法是使用锁存器而不是时钟寄存器。时钟控制元件简化了电路实现,因为时钟也使“时间概念”可用。然而,寄存器逻辑的使用总是导致更高的功率需求,因为功耗与时钟元件的数量及其时钟频率成比例地增加。
与ASIC不同,FPGA不是很适合基于锁存器的电路实现,因为——正如前面主题6中提到的:在时钟方面必须考虑什么?——只定义“最坏情况下”的时序信息。在FPGA时序分析中通常不计算最小时序和延迟。如果一种时钟方法不能通过寄存器逻辑检测,那么时间行为就不再是可预测的,并且可能导致所谓的“竞争条件”和其他问题,这些都使得FPGA不可能可靠地运行。最后,这意味着不同的电路实现对于各自的目标模块是很有必要的。这里的目标是实现相同的功能,尽管在实现路径上有所不同。
前面提到的电路设计方法应该在产品开发的早期阶段就应该考虑到目标架构之中的相关因素,不仅限于锁存器的实现。在FPGA中也有必要注意同步电路的实现,和避免使用FPGA中不可用的电路(例如,双边沿时钟FF)。目标架构还必须考虑到可实现的时钟频率。要避免长组合路径,因为可能会出现高时序违规。
在基于FPGA的原型中,验证不仅仅指电路功能和实现所需的时间;通常还需要包括其他的测试,同样重要的参数在开发活动中越快实现越好。例如,除了前面讨论的软件和固件的开发之外,还应该提到ASIC组件的节能设计。
对于一个只实现纯电路功能的原型来说,功率损耗实际上根本不起作用。然而,对于ASIC的运行绝对有必要的降低功耗的方法,同样也可以在FPGA中使用,并将其包含在原型设计活动中,所以这是值得期待的。虽然不可能使用ASIC中可用的各种选项,但至少可以通过使用适当的工具和脚本来模拟它们的功能。这里的方法是至少估计通过不同方法可以实现功耗降低(例如,时钟门控以降低寄存器切换率、关闭ASIC上的整个区域、在ASIC的一些部分使用不同的电源电压等)。
上述方法在FPGA上是不可用的,除了物理上可实现的时钟门控,这也会对FPGA的可靠运行产生负面影响。通过读取通用格式(UPF =统一功率格式;CPF =通用功率格式)的相应脚本,和使用可模拟支持这些格式的FPGA逻辑综合工具,至少可以估算这些措施将如何影响ASIC的功耗。
在这种情况下,有一件事是明确的:电路功能越早可用,相应的测试就能越早进行。因此,使用诸如IP核这样的预先制作的模块具有巨大的潜力,可以加速ASIC实现和验证的各个阶段。
本系列文章接下来将通过一个实际案例来回顾前面讲到的八项关键设计考量因素:使用基于FPGA的方法来验证USB 3.2 Gen2x1 Device IP,大家可以通过关注“智权半导体”微信公众号阅读该案例分析。
实现一个可工作的FPGA原型并不是一件容易的事。通常,我们的想法是使用适当的FPGA逻辑综合和布局布线工具,将已经可用于ASIC技术的IP核映射到足够大且快速的FPGA上就足够了,以实现一个具有相关功能性FPGA。这里的要求是所需的功能应该即刻可用,并且无需进行任何更改。IP核的制造商必须达到这一期望。毕竟,IP核应该能够集成到现有设计中,且不会有任何重大的时间延迟。大家都假设IP核供应商已经提前进行了所有必要的测试,以致于将功能集成到现有电路中时间应该毫无困难。
然而,将IP核移植到FPGA架构中对于IP提供商来说是一个具有挑战性的目标——如果不付出相当大的努力,这几乎是不可能的。接下来我们将通过一个实际案例,即使用基于FPGA的方法来验证USB 3.2 Gen2x1 Device IP来说明其中的困难和克服之道。
本系列文章的目标是全面分享经验,帮助读者利用ASIC IP来实现完美的FPGA验证原型。
关于作者:Philipp Jacobsohn
Philipp Jacobsohn是SmartDV的首席应用工程师,他为北美、欧洲和日本地区的客户提供设计IP和验证IP方面的支持。除了使SmartDV的客户实现芯片设计成功这项工作,Philipp还是一个狂热的技术作家,乐于分享他在半导体行业积累的丰富知识。在2023年加入SmartDV团队之前,Philipp在J. Haugg、Synopsys、Synplicity、Epson Europe Electronics、Lattice Semiconductors、EBV Elektronik和SEI-Elbatex等担任过多个管理和现场应用职位。Philipp在瑞士工作。
关于作者:Sunil Kumar
Sunil Kumar是SmartDV的FPGA设计总监。作为一名经验丰富的超大规模集成电路(VLSI)设计专业人士,Sunil在基于FPGA的原型设计(包括设计、逻辑综合、静态时序分析和时序收敛)和高速电路板设计(包括PCB布局和布线、信号完整性分析、电路板启动和测试)等方面拥有丰富的专业知识。在2022年加入SmartDV团队之前,Sunil在L&T Technology Services Limited担任过项目经理和项目负责人职位。Sunil在印度工作。