FPGA原型验证手册:第一章-引言:系统验证的挑战(一)

前言

本章将建立一些定义,并概述我们正试图通过基于FPGA的原型设计来克服的挑战。

我们将探讨基于soc的系统的复杂性及其在验证过程中所面临的挑战。我们还将比较和对比基于FPGA的原型与其他原型方法,包括系统级虚拟建模。在这一章之后,我们将准备深入研究基于FPGA的原型技术如何有利于一些实际项目,并为基于FPGA的原型技术提供一些指导。

1.1-摩尔是对滴

自从Gordon E. Moore描述了在集成电路上可以廉价放置多少晶体管的趋势以来,由半导体设计来实现的电子设计已经以一种难以想象的速度发展起来。

晶体管每两年翻一番的趋势已经持续了半个多世纪,尽管人们一再预测它将很快结束,但预计它暂时不会停止。

本章后面对驱动芯片设计的主要趋势的详细回顾将阐明为什么原型设计在采用中不断增长,甚至在许多公司中被认为是强制性的。为了进一步理解这一趋势,需要了解典型的项目动态及其工作分布。

1.1.1-SOC一个定义…至少对于这本书

为了本书的目的,我们将芯片系统(SoC)定义为为特定目的设计和制造,供特定所有者独家使用的设备。

有些人可能会认为SoC是ASIC(特定于应用的集成电路)的一种特殊形式,它们是正确的,但为了本书的目的,我们将只参考SoC。我们将坚持SoC始终包含至少一个CPU并运行嵌入式软件的定义。相比之下,ASIC并不一定包含CPU,在此程度上,SoC可以被认为是ASIC的超集

我们并不是说那些正在创建ASIC、ASSP(特定于应用程序的硅产品)或由COT(客户自己的工具)或第三方铸造厂生产的硅的人应该读另一本书。

对于基于FPGA的原型设计目的来说,技术并不是相互独特的,事实上,许多基于FPGA的原型设计项目都是ASSP,甚至只是IP的一部分,可以用于许多不同的SoC设计中。

就基于FPGA的原型设计而言,如果它适用于SoC,那么它将适用于上述任何一种设备类型。这本书关注SoC的原因是,基于FPGA的原型设计的最大价值在于其独特的能力,能够提供一个快速和准确的SoC模型,以允许对软件进行验证。

1.2.SoC设计的经济学

SoC的设计就在我们身边。我们可以在所有引人瞩目的引人注目的消费电子产品中,以及不起眼的纯研究项目的角落,以及星际探测器的引导系统中找到它们。

在这里插入图片描述
特别是对于消费品,人们对智能手机、摄像头或便携式媒体播放器等设备的最大智能和功能的需求似乎有着永不满足的渴望。

为了满足这些需求一个典型的SoC设计将包括几个微处理器,一个或多个数字信号处理器和一些不同的接口,如蓝牙™或WLAN,高分辨率图形等等。

这一切加起来就是很多软件。考虑到集成电路的开发和制造,在图1中是一个倒三角形。所显示的数据是2009年的,我们看到芯片开发是一个约854亿美元的市场,是由EDA工具、设计服务、IP和嵌入式软件工具的86亿美元市场实现的。

在这种半导体设计和制造的支持下,是一个价值11.16亿美元的巨大电子系统市场,其中包括我们作为终端消费者所渴望的所有消费电子产品、无线设备和电子产品。
在这里插入图片描述
图2:消费设备的硬件-软件拆分

EDA工具,包括设计中不同阶段的各种类型的原型,最近专注于从IP提供商、半导体提供商、集成商和oem的设计链

原型在这些交互中起着关键作用,因为早期原型允许客户与供应商进行需求沟通,并从供应商为客户进行早期软件开发和验证。

为了理解多种形式的原型设计可以实现的影响,让我们考虑一个典型的复杂SoC设计。图2显示了一个典型的智能手机的拆卸情况。最终用户体验在很大程度上受到它们所呈现的应用程序的影响。

好的旧硬件,模拟设备和天线的设计显然仍然很重要,但用户只有在它们出错时才会真正注意到它们!

用户应用程序由中间件、操作系统和驱动程序组成的软件堆栈来实现;所有这些都是专门设计的,使软件尽可能独立于硬件。

例如,应用程序开发人员不能直接访问设备的硬件内存、定时或其他低级硬件方面。软件堆栈由硬件元素堆栈进行匹配。终端设备使用几个板,由几个外围设备和芯片组成,其中包含不同的块,要么作为IP重用,要么由芯片供应商专门开发来区分他们的硬件。

硬件和软件的依赖性导致了不同公司类型之间的复杂关系。

知识产权提供商向半导体供应商销售,
半导体供应商向集成商
集成商又是oem销售商
所有这些供应商都为软件开发人员提供支持。这些交互的启用可以说已经成为当今工具供应商要解决的最大问题。

这种实现的主要挑战已经成为今天:

  • (a)尽早实现软件开发。
  • (b)在目标系统环境中的硬件/软件的验证。
  • ©设计和重用芯片处理器加速器外周互连结构(如ARM®互连AMBA®互连)从基本构建块组装的芯片的
  • (d)架构设计。

1.2.1.案例研究:一个典型的SoC开发项目

考虑到图2中硬件堆栈的底部三层,让我们来分析一个特定的芯片开发项目和原型设计的潜在影响。

选择的例子是一家大型半导体公司设计的无线耳机,在主流65纳米技术。芯片的目标是高容量,快速移动市场和预计生产运行27个月,平均每月150万台和平均销售价格55.50美元。

在开发过程中情况进展顺利,只需要一个金属掩模旋转,允许在第一个硅可用后进行6个月的客户和现场评估。根据国际业务系统研究中描述的开发成本模型,该项目的开发成本总计估计为31,650,000美元。

现在让我们考虑图3,它说明了芯片开发成本如何在典型的12个月的硬件设计周期中分布,从完整的规范到最终验证的RTL,准备布局。

在这里插入图片描述
(这颜色真的是看出个pi-图3:一个65nm无线耳机设计的项目付出)

实际上,RTL验证消耗了大部分的工作,并且是决定12个月的项目长度的关键因素。

设计中具有重大影响的另一部分是伴随代码实际开发的整体设计管理。

物理设计完成于项目开始后约15个月(即RTL验证后3个月),然后在第17个月准备封测。

硅验证后在19个月增加工程样品,需要几个月的时间

如图3进一步说明,当RTL得到大量验证和稳定时,该项目的软件开发会增加。

它被分为操作系统支持和移植、低级软件开发和高级应用软件开发。

这里所有的软件开发工作仍然是芯片供应商的责任,而不是第三方供应商。

总的来说,软件开发消耗了该设计总成本的40%,并将项目计划扩展到总共27个月。

当将开发和生产成本摊销为预期销售时,该项目在约34个月后,即在产品发布7个月后,但在产品开发开始近3年后,达到盈亏平衡。这个例子中的挑战是,我们必须提前近三年预测高销量,以确定我们的芯片。怎么能使这种几乎无法忍受的情况变得更容易呢?

答案是“更早地启动软件”。

使用计算器的投资回报率(ROI)由全球半导体协会(GSA),它可以计算,如果软件开发和验证开始七个月前在我们的例子项目,生产可以开始三个月前,随后的时间平衡减少了五个月。此外,由于该芯片额外的首次市场设计胜利,预计将获得5000万美元的收入增长。

这正是其许多形式的原型设计所能实现的目标。通过原型设计提供的软件开发和验证的早期开始意味着它对投资回报率的影响可能非常显著。

为了更深入地理解原型设计的需求和好处,让我们来看看现在从虚拟到基于FPGA的不同类型的原型设计。

1.3.虚拟平台:没有硬件的原型设计

我们可以在我们的项目中使用各种各样的原型设计。在一个项目中,最早出现的是虚拟原型。它们代表了soc、板、虚拟化io和用户界面的功能完整但时间松散的软件模型,所有这些都运行在基于主机的模拟上。

虚拟原型可以在处理器指令集模拟器上执行未经修改的生产软件代码,并且它们可以接近实时运行。作为完全基于主机的虚拟原型,它们还可以提供良好的系统可见性和控制,这对于在多核cpu上的调试特别有用。虚拟原型也可以有虚拟的用户界面,允许与我们这些慢速的人类进行实时交互。图4中所示的屏幕截图摘录来自于一个运行在同步系统创新者工具上的OMAP设计的虚拟原型。

在这里,我们不仅看到了可识别的模拟窗口,还看到了板上键控制的表示和来自虚拟摄像头的输入,在这种情况下,连接到运行模拟的主机电脑上的网络摄像头,所有这些都没有硬件完成。我们将在第13章中讨论基于FPGA的原型与simulation的链接。

在这里插入图片描述
虽然虚拟原型在使用时间松散的模型时,提供了非常高的速度(多个MIPS),但它们不能提供硬件设计团队首选的计时精度。更精确的软件模型可以添加到虚拟原型中,但它们的模拟速度将下降到个位数的MIPS范围,甚至更低,这取决于周期精确与松散时间的模型的混合。

然而,虚拟原型在流程中最早是可用的,假设模型可用,所以它们是早期软件调试的完美选择。虚拟原型提供了对系统行为的几乎完整的洞察力,而且它们也很容易为多个用户进行复制。

最后,因为它们是在RTL之前创建的,所以虚拟原型允许硬件架构和早期软件的协同开发。例如,如果虚拟原型显示产品的并发应用程序没有足够的处理带宽,则可能会添加额外的或不同的cpu。

1.3.1.SDK:一个非常常见的原型设计环境

与虚拟原型相关的是所谓的软件开发工具包,或称SDK,其中一个非常常见的例子是用于为苹果iPhone®开发应用程序的SDK。

这个SDK在可用的头几天就被下载了超过10万次,所以我们可以认为这是一个非常广泛可用的原型平台。虽然相比之下很简单,但sdk提供了完整虚拟原型的许多优点,但是它们的精度往往更有限,因为它们可能不能像虚拟原型那样准确地表示实际的寄存器。

他们的目标是拥有“足够的准确性”,以欺骗应用程序,让它以为它是在最终的平台上运行的。sdk允许通过更高层次的应用程序编程接口(API)接口到平台。所开发的软件通常是为主机上编译的SDK执行它,然后在程序员验证了SDK上的功能后,需要重新编译到实际的目标处理器。

图5显示了一个安卓™SDK的屏幕截图。应用程序的编程是使用高级操作系统api完成的。编程是完全独立于实际的目标硬件,所以当实际针对最终设备时,重新编译是必要的。

目标设备的用户界面——如图5所示,可以进行建模,以便可以虚拟地体验最终用户环境。

在这里插入图片描述

1.3.2.FPGA:在半导体的原型…前硅

在设计流程的后期,但仍然是在真正的硅片之前,一个基于FPGA的原型也可以作为软件开发和验证的工具。

基于FPGA的原型验证**是soc、板和IOs的全功能硬件表示。**因为它们实现了与SoC相同的RTL代码,并且在所有外部接口和刺激连接下几乎以实时的速度运行,所以它们非常准确。

它们提供了更高的系统可见性和控制比实际硅将提供可用,但不匹配的调试和控制能力虚拟平台,或任何其他模拟器,所以它们不是我们将选择的用来调试所有RTL的第一个平台。

基于FPGA的原型的关键优势是它们能够高速运行,每个建模的CPU产生数十个MIPS,同时保持RTL的准确性。

它们通常在设计流程中可用,因为RTL需要可用且相对成熟。由于将RTL映射到基于FPGA的原型的复杂性和努力,在RTL验证稳定之前使用它们是不可行的。

出于同样的原因,基于FPGA的原型并不打算用作硬件/软件协同开发平台,因为在SoC设计流程中,硬件(即RTL)几乎是固定的,并且部分验证。

在基于FPGA的原型运行之前,设计团队对于更改硬件架构将会非常犹豫,除非发现了一些主要的架构瓶颈。

最后,一旦稳定和可用,基于FPGA的原型的复制和交付成本高于基于软件的虚拟平台,但仍然比模拟器便宜得多,我们接下来将讨论。

1.3.3.模拟器:原型设计还是验证?

仿真提供了另一种基于硬件的替代方案来实现软件开发,但与基于FPGA的原型设计的不同之处在于,它的目标是较低的性能,但具有更多的自动化。

模拟器有更多的将RTL自动映射到硬件中,以及更快的编译时间,但是执行速度会更低,通常会下降到单mips级别以下。仿真的成本也经常被视为在软件开发中容易复制它的一种威慑,尽管仿真器由于其易于使用而受到软件工程师的欢迎。

与基于FPGA的原型一样,仿真器也不是硬件软件协同开发的现实平台**,因为它们需要RTL可用。**模拟器更有可能的用途是作为正常RTL模拟的加速器,因此许多人认为仿真不是一个原型平台,而是作为对正常验证环境的扩展;一种更快的模拟器。然而,只有当软件需要循环精度和高可见性,并且可以容忍非常慢的运行速度时,模拟器实际上可以用于软件开发。

软件将需要被限制在短时间的运行中,比如启动ROM代码,因为缓慢的运行速度将意味着运行时可能很长;当然对于长的软件任务来说太长了,比如用户应用程序或操作系统启动。

1.3.4.第一批硅片作为一个原型平台

最后,在实际的硅可用之后,使用第一个硅样品的早期原型板可以在实际的硅上实现软件开发。

一旦芯片投入生产,就可以提供非常低成本的开发板。此时,原型机将以实时速度和全精度运行。软件调试通常是通过使用JTAG接口和连接到标准软件调试器的特定硬件连接器来实现的。

虽然使用实际硅的原型板可能是成本最低的选择,但它们在设计流程中很晚,几乎不允许软件开发领先。

此外,对硬件原型的控制和调试洞察力非常有限,除非提供特定的片上仪器仪表(OCI)功能。与虚拟原型相比,它们也更难复制——通过互联网下载提供一个虚拟平台比发布电路板和处理定制、升级和对物理硬件的潜在损坏要容易得多。

从这个概述中可以看出,原型设计专注于提供硬件的早期表现,特别是芯片及其周围的外设。原型验证适用于不同的使用模型,作为交换,它们会对需求产生影响。

1.4.原型使用模型

如前所述,今天我们使用不同的执行引擎来完成原型设计。一旦一个芯片开发项目开始,项目经理几乎被要求立即为各种目的提供“未来芯片”的早期表示——原型,例如:

  • 市场营销需要材料和基本的文档来与早期的采用者进行互动。
  • 软件开发人员希望正在开发的设计的可执行表示,以允许他们开始移植操作系统。
  • 硬件开发人员也希望可执行规范来验证他们的实现是正确的。
  • 原型从第一天开始就开始需求量很大!

这种需求是由三个主要的使用模型驱动的:体系结构探索、软件开发和验证

1.4.1.针对架构探索的原型设计

在项目开始时,架构探索允许芯片架构师就芯片拓扑结构、性能、功耗和片上通信结构做出基本决策。

例如,早期收集的关于缓存利用率、处理器性能、总线带宽、突发率和内存利用率的信息驱动着基本的体系结构决策。

在一个理想的世界里,芯片架构师将希望获得具有全精确模型的原型——代表设计的所有内部部分——同时以全速运行。不幸的是,这两个特征通常不能通过同一模型来实现。在最终芯片从制造中回来之前,**或至少在设计周期后期RTL可用和验证之前,才能收集完全准确的数据。**此时,FPGA原型可以用于接近实时地执行设计。

芯片架构师还可以与“早期采用者”客户进行交互,理想情况下,他们希望使用可执行的规范来演示设计的关键特性。

然而,在现实中,芯片架构师主要依赖于像微软Excel™这样的工具来进行基本的、静态的架构分析。他们通常不得不依靠他们的经验和信封背面的评估。因此,与早期采用者客户的互动是基于书面规范和在白板上进行的大量联合讨论而进行的。

1.4.2.用于软件开发的原型设计

理想情况下,软件开发人员希望从一开始就开始移植遗留代码和开发新的软件功能,即当硬件开发开始时。

他们希望接收芯片的可执行表示,它实时运行,准确地反映所有与硬件相关的软件相关接口(如寄存器映像)。

根据正在开发的软件类型,用户可能需要与底层原型不同的精度。要开发的软件类型直接决定了对硬件执行精度的要求:

  • 应用软件的开发往往不考虑实际目标硬件的精度。这是sdk的主要前提,它允许对表示硬件的高级api进行编程。

  • 对于中间件和驱动程序,可能需要一些定时的表示。对于性能分析的基本情况,对缓存和内存管理单元的计时注释可能就足够了,因为在涉及到性能方面,它们通常比指令的静态计时更重要。

  • 对于实时软件,指令的高级周期定时与微架构效果相结合是很重要的。

  • 对于时间关键的软件,例如,中断服务例程(ISRs)的精确响应行为,完全循环精确的表示是首选。

通常直到今天,开发人员仍会基于寄存器规范“盲目地”开始软件开发,但随后却会与硬件团队仍然可能对寄存器规范做出的更改不同步。

对于衍生产品系列,应用软件通常使用高级api开发,它可以在上一代芯片上执行。稍后可用的底层驱动程序、操作系统和中间件可以确保api保持不变,并且不会破坏遗留软件。

1.4.3.原型设计的验证

在早期,芯片环境是使用跟踪和流量生成器来表示。早期的测试台基本上定义了正在开发的芯片的使用模型场景。

在一个典型的设计中,在测试台中隐藏的错误和在实际设计本身一样多。因此,尽早开发测试台是很重要的。理想情况下,验证工程师希望从一开始就能提供“被测设备”(DUT)的可执行表示形式。类似于软件开发对不同模型的需求,验证也有对不同精度级别的要求。

**DUT的高级模型将使验证场景的开发成为可能。**具有精确寄存器和DUT行为的纯功能表示的DUT模型满足了相当比例的测试台开发。为了验证时间和详细的管道延迟,时间近似最初可能是足够的,但最终将需要在寄存器传输级别(RTL)上进行周期准确的表示。

硬件验证的一个重要趋势是功能验证转向软件,软件在嵌入在设计中的处理器上执行。为了回答最近的调查问题:“您在设计中是否使用运行在嵌入式处理器上的软件来验证周围的硬件?”,超过50%的受访者回答说,他们已经在使用嵌入式软件进行验证,其中十分之一的受访者也在使用该软件,重点是硅后验证。(就是整成开发板进行验证)

这种基于cpu的方法的优点是验证重用:

  • 测试是在处理器上执行的,最初使用快速指令-精确的处理器模型与DUT的事务级模型(TLM)交互,通过其寄存器接口访问它。
  • 之后,这些测试可以在混合TLM/RTL模拟以及将处理器映射到RTL的纯RTL模拟中重用。
  • 这些测试仍然可以用于硬件原型,其中处理器在工作站上作为TLM执行,并通过高速TLM接口连接到硬件。执行测试的
  • 处理器也可以在FPGA原型中以RTL的形式运行,也可以作为插件板上的芯片带到FPGA原型中。
  • 最后,当芯片从制造中回来时,基于软件的测试也可以用于硅后验证。

1.5. 原型设计中的用户优先级

随着所有这些趋势的结合,芯片的原型设计正成为成功的芯片设计的明确要求。

然而,不同的用户优先级会导致不同的原型设计选项作为最佳的解决方案。我们可以用多种方式列出它们,但在我们的案例中,我们选择突出显示12个不同的优先级,如下所示。

  • 可用时间:一旦我们的设计规范被冻结,软件验证环境的交付延迟将直接影响我们在SoC项目的软件部分启动和进展的速度。
  • 执行速度:理想情况下,所选的开发方法提供了真实硬件执行速度的准确表示。对于软件回归,比实时速度更快的执行可能是有益的。
  • 精度:正在开发的软件类型决定了开发方法的准确性,以表示实际的目标硬件,确保在硬件/软件边界识别的问题不会被开发方法本身引入。
  • 容量:原型机是否可以处理最大的SoC设计,还是不需要这样做?性能和成本如何随着设计尺寸的增加而变化?平台是否能升级为更大的设计?
  • 开发成本:开发方法的成本包括实际的实际成本,以及在其中引入硬件/软件设计的开销成本。生产成本决定了如何进行生产一个简单的开发方法可以被复制来提供软件开发团队。
  • 提升成本:除了获得硅所需的开发方法之外所需的任何活动都可以被认为是开销。通常,软件团队在获得硬件的早期表示时所面临的巨大压力决定了是否考虑对提升成本的投资。
  • 部署成本:如果我们要创建原型的多个副本,那么我们需要知道在最终用户的实验室中创建、部署、维护和支持将花费多少成本。
  • 调试洞察力:分析设计内部的能力,即能够访问信号、寄存器和硬件/软件设计的状态。
  • 执行控制:在调试期间,使用硬件中的断言或断点停止目标硬件的表示是很重要的,特别是对于具有多个处理器的设计,所有组件必须以同步的方式停止。
  • 系统接口:如果目标设计是SoC,那么能够将正在开发中的设计与实际接口连接起来是很重要的。例如,如果涉及到一个USB接口,则该软件将需要连接到真正的USB协议堆栈。同样,对于网络和无线接口,连接到真实世界的软件是优先考虑的。
  • 周转时间:从一组新的源文件中,无论是SystemC™模型还是原始的RTL,创建一个新版本的原型需要多长时间?它是否以分钟、小时、天或周为单位来衡量,以及在任何情况下项目需要什么?
  • 价值链接到低功耗和验证:原型不必是独立的平台,如果它们可以链接到SoC设计团队的其他部分,特别是用于验证,它可能会增加价值。在插入各种实现步骤之前和之后进行原型化,例如修改以降低功率,也将是有价值的。

可能没有用户同时关心过所有这些决策标准,而且对于任何给定的SoC项目,有些项目会覆盖其他的。在我们阅读这本书时,我们将重新审视大多数这些标准。在书的最后,我们将展望原型作为一个整体的未来,以及基于FPGA的原型在未来的位置。展望未来,我们需要意识到最近在SoC和更广泛的用户基础和行业中正在出现的过去和趋势。现在让我们来看看这些趋势。

猜你喜欢

转载自blog.csdn.net/weixin_45264425/article/details/129870169