在早期架构探索与优化阶段,电子系统级(Electric System Level,ESL)设计可快速搭建精确的架构概念模型,通过动态仿真来验证系统性能和功耗设计目标的可实现性,帮助设计者确定全面均衡的架构,消除芯片设计后期更改的风险,提前发现问题并提高开发效率。
ESL设计对硬件的描述,自顶向下分为4个级别,即系统级、行为级、RTL和物理级,如图1.71所示。
图1.71 ESL设计对硬件的描述
在进行芯片设计时,一般首先利用RTL代码来描述硬件行为,然后通过EDA工具将RTL代码转换为更低层次(门电路级、普通电路级等)的描述,最后产生用于芯片生产的GDSII描述。当设计比较简单或者没有太多软件开发工作时,RTL设计方法就可以满足要求,这是芯片设计方法发展早期常见的情况。
系统级的架构设计在项目开发流程上早于RTL设计,其主要关注较粗粒度的性能,而软件开发只需要构建模型,并不需要关注硬件实现的细节,因此使用RTL描述并不合适。以前的架构设计主要靠经验,很少通过建模仿真进行定量分析,软件开发和调试则主要在硬件设计完成之后,基于FPGA或样片来进行。
ESL设计利用SystemC等高级语言,在一个新的层次(系统级)上通过软件模型(ESL模型)描述硬件,实现快速的系统建模和仿真分析,由于放弃了不必要的细节,因此ESL模型的仿真速度往往比RTL模型快几个数量级,从而提高了系统软硬件设计的效率。ESL设计为SoC系统提供各种级别的软件模拟平台,为SoC系统架构验证和嵌入式软件开发提供一种可运行的验证环境,有效支撑SoC系统的迭代开发。采用ESL设计不仅使设计者能够及早进行软件开发,实现快速设计和派生设计、快速硬件验证及快速软硬件协同验证,还提供了下游RTL实现的功能测试平台。
ESL架构设计流程如图1.72所示。
图1.72 ESL架构设计流程
ESL设计的主要目标如下。
架构确认是ESL设计最重要和最基本的作用,可分析和验证架构性能、成本、功耗及关键系统功能,进而提高芯片(微)架构的设计质量。
完成的ESL仿真用例可以被RTL设计方法验证重用,提高了RTL验证效率。
功能完备的ESL模型可以集成到SDK中,协助驱动/开发微码或提前调试。
通过ESL平台,分析和仿真芯片测试中涉及的架构问题。
ESL设计的主要应用如下。
(1)系统级设计(System-Level Design):将芯片设计和系统设计结合起来,以系统需求驱动芯片设计。
(2)软硬件协同设计(HW/SW Co-Design)。
(3)架构探索(Architecture Exploration):实现定量的架构探索和分析。
(4)虚拟原型(Virtual Prototype):在没有实际硬件时进行软件开发。
(5)协同仿真/验证(Co-Simulation/Verification)。
(6)高级综合(High-Level Synthesis,HLS):不通过RTL设计,直接使用高级语言(SystemC)来描述硬件,由工具自动生成硬件设计。
进行ESL设计需要体系结构知识和软件编程能力,以及一些应用层的相关知识和底层实现的RTL知识。如果芯片规模小,模块功能不复杂,那么通过分析和静态计算就可以完成设计。只有规模大、模块功能复杂的芯片才需要通过ESL建模和仿真来完成设计。
事务是指模块之间的数据和事件的交互。其中,数据可以是一个或多个字,也可以是一种数据结构,同步或中断等则属于事件。事务级模型(Transaction Level Model,TLM)可以分为三种:无时序信息的模型、周期近似的模型和周期精确的模型。与RTL模型的仿真速度相比,无时序信息的模型快1000~10000倍,周期近似的模型快100~1000倍,周期精确的模型则快10~100倍。基于TLM的仿真如图1.73所示。
图1.73 基于TLM的仿真
在图1.74中,总线模型连接模块并处理所有时序,总线上的事件用于触发外设动作。模块之间的通信通过函数调用的方法来实现。
图1.74 事务级建模过程
SystemVerilog语言为C++语言和Verilog/VHDL的混合体,极大地扩展了抽象结构层次的设计建模能力,还将设计和验证融为一体,将硬件描述语言(HDL)与高级语言相结合。作为主要EDA供应商支持的IEEE标准,SystemVerilog语言实质上是硬件设计和验证的首选语言。
SystemC语言是在C++语言中加上硬件类库和仿真核而形成的语言。利用SystemC语言可以在不同抽象层次描述系统,从系统级、行为级到RTL,不仅可以描述待开发系统本身,还可以描述系统的测试平台,从而为系统仿真提供测试信号。
由于大多数现代设计都从平台开始,因此需要基于平台的设计环境,以便将IP集成到总线上,并促进诊断和测试。在整个项目周期中,可以通过基于平台的设计工具来驱动协同验证和仿真,以实现真正的硬件和软件并行开发。利用平台,软件工程师可以移植操作系统,编写驱动程序并开发芯片上特定的应用程序,以便在RTL代码可用时,软件也可用。ESL设计平台的主要工作是模型生成和平台集成。
模型生成主要是指生成抽象的各个部件模型。部件模型可以使用专门的ESL模型,也可以由RTL代码转化而成。
平台集成主要负责各个部件模型的例化和连接,以及参数配置;如果使用处理器,那么还需要负责地址映射和软硬件协同验证。
平台集成使用两种方法:一种是通过工具直接连接,但每次修改都需要手动完成,工作量大且容易出错;另一种是通过脚本来完成,维护和修改比较容易。ESL平台集成如图1.75所示。
图1.75 ESL平台集成
EDA工具Platform Architect(PA)为架构和系统设计人员提供SystemC TLM工具和高效的方法,用于SoC架构的早期分析和优化,以做出正确有效的架构权衡决策,消除芯片设计的后期更改风险,提升性能和降低功耗。该平台支持市面上广泛使用的多种模型,包括用于SoC架构探索和验证的预装式SystemC TLM模型。
架构探索是指在搭建的平台上,仿真不同的数据流,分析带宽和延迟,找到符合芯片系统需求的架构和参数,如图1.76所示。
图1.76 架构探索
使用基于事务的建模和基于C语言的仿真,可以在不考虑硬件实现或目标设备架构的情况下对功能行为进行建模。工程师可以快速仿真、分析和修改设计,而不必关注实施细节。从C语言源代码开始,可以快速探索不同的系统架构,在投入编写RTL代码之前根据关键系统标准对其进行评估。除此之外,还可以使用基于C语言的综合工具,以自动生成高质量的RTL代码,消除现今流程中通常需要的数周/数月的设计工作,从而快速实现特定应用所需的面积、性能和功率的最佳平衡。一旦架构确定,就可以进行软硬件协同验证了。
架构探索涉及仿真用例和平台需求、关键性能指标、仿真度量指标及结果总结报告,其基本设计方法如下。
(1)定义应用实例。
(2)明确与应用实例相关的仿真用例需求,并将仿真用例需求转换为关键性能指标。
(3)建立硬件平台。
(4)建立系统仿真模型。
(5)仿真,收集和分析测量指标。
下面通过一个实例来说明如何实现ESL建模和仿真。
图1.77显示了一个多媒体实例数据流图。首先读取SD卡中存储的视频,然后通过G2V3或G1V6实现硬件解码,接着配合GPU进行必要的渲染,最后经过显示模块后在HDMI设备上实现视频图像显示。
·SD卡:存储H.264、H.265、MP4等视频。
·G2V3:H.265视频解码模块。
·G1V6:H.264视频解码模块。
·GPU:图像处理器。
·显示模块:进行显示后处理。
·HDMI:高清多媒体接口。
图1.77 一个多媒体实例数据流图
为每个处理阶段中的相关任务指定参数,以便正确配置动态仿真模型,主要包括存储器读写访问参数,如数据块大小和数量、内存地址和内存访问模式;处理参数,即任务执行所需延迟等。
通过表格可以描述不同处理阶段之间的数据流和指定阶段的处理延迟等性能指标,如表1.3所示。
表1.3 性能指标
图1.78所示为硬件平台的框图。除系统仿真模型外,该硬件平台构成了制定芯片系统架构规范的基础。
图1.78 硬件平台的框图
前面已定义了应用实例和硬件平台,接下来需要将应用实例映射到硬件平台,即明确硬件平台运行应用实例的具体任务。
图1.79所示的系统仿真模型构成了应用实例和硬件平台探索的动态性能模型。在仿真过程中,会遍历应用实例中的所有节点。
图1.80显示了在单次遍历应用实例期间的每项任务的持续时间,整个链的持续时间定义为仿真用例延迟。可视化地显示硬件平台、应用实例和时间视图,有利于直观观察和分析。单次遍历未必有效,通常需要进行多次且全面的架构探索,即需要进行多次遍历。
图1.79 系统仿真模型
图1.80 应用实例运行的时间视图
图1.81所示为架构探索的主要环节和工作。
图1.81 架构探索的主要环节和工作
硬件和软件集成变得日益复杂,如果单纯借助硬件辅助技术来加速验证和开发SoC,则会在开发板调试和等待开发结果上耗费大量时间。虚拟原型技术是SoC设计的核心技术,其主要目的是验证系统级芯片软硬件设计的正确性、系统级芯片软硬件接口的功能和时序,以及在芯片流片回来前开发应用软件。由于实现了软硬件并行开发,因此软件工程师可以较早地在硬件模型上调试软件,硬件工程师则可以利用软件进行硬件验证,从而缩短设计周期,减少设计投入。
虚拟原型是高抽象级的硬件模型,由于并不需要硬件描述细节,因此其仿真速度较RTL仿真速度快了几个数量级,从而使得硬件工程师和软件工程师可以更快地进行硬件和软件开发。IP开发商提供了众多IP虚拟原型,包括经过性能优化的处理器模型、互连模型、存储器模型和外设模型等。借助设计工具也可以自行创建虚拟原型。
目前,业界推广建立抽象层次的TLM,主要支持语言为SystemC语言。由SystemC语言实现的虚拟原型可以通过高级综合(HLS)工具转换为RTL或门级网表,也可以集成到设计和验证环境中,先行完成某些验证任务,后续被替换为RTL模型。
在基本模型的基础上,使用专门的工具快速集成并建立系统的虚拟原型平台供软件开发,包括结构设计和评测、软硬件之间的权衡分析、早期性能和功耗评估、软件集成和测试、为RTL验证提供参考模型。
不同的EDA厂商提供的虚拟原型平台有First Encounter(Cadence)、Vista(Mentor)、Platform Architect(Synopsys)、VDK(Synopsys)。
Platform Architect适用于大型SoC架构探索、分析和设计,其灵活的映射算法和高的数据吞吐量使架构师能够分析、选择、优化、调节算法和架构,以满足性能和功耗要求。
VDK是一套软件开发工具包,其中包含特定设计的虚拟原型,以及调试、分析工具和样本软件。VDK对RTL设计没有依赖性,因此可在设计早期开始软件开发,且适用于所有类型的软件开发,包括器件驱动开发、操作系统移植和中间件开发。
在传统开发流程中,软件开发往往需要等到硬件设计制造完成后才能开展。利用虚拟原型技术,通过硬件和软件紧密协作的方式,如协同设计、协同验证,可以在早期发现设计缺陷,并在相对容易实施的阶段完成缺陷修改。例如,在多核应用中,需要将不同的任务合理分配到多个内核上以取得较好的性能,这种软件层面的评估就可以在虚拟建模阶段完成。
协同设计是指将虚拟原型集成到现有设计中以替代一部分设计,要求虚拟原型的边界接口具有合适的时序,以便与相邻模块达成时序一致性。协同验证是指将虚拟原型作为参考模型集成在验证环境中。
(1)软件算法和硬件结构的协同验证:主要利用软件算法验证在硬件结构上实现设计的可行性。利用高级语言(C语言、C++语言或SystemC语言)进行算法级的仿真,同时进行软件和硬件部分的划分,明确软件和硬件需完成的工作。
(2)代码和HDL的协同验证:主要对SoC中CPU的虚拟原型和利用HDL或网表模拟出来的硬件系统进行协同验证。这个阶段主要应用C语言和HDL进行交互和仿真。
(3)软件代码和实时硬件模拟系统的协同验证:对系统设计原型的FPGA硬件模拟系统进行验证,主要对芯片的功能和硬件的实时性进行仿真验证。
在传统的串行开发模式中,先硬件设计后软件开发,而软硬件协同验证是一种在硬件设计交付制造之前,验证软件在硬件上能否正确运行的过程。软硬件协同验证的基本框架如图1.82所示,由一个软件运行环境和一个硬件运行环境组成,通过事件和指令,使用一些机制在两个环境间进行控制和信息交互。在软件方面,通过编译器、调试器和仿真器来建立系统中处理器的虚拟原型;在硬件方面,将软件调试验证正确的应用程序作为测试向量加入硬件测试平台,并最终采用硬件加速器来完成整个验证过程。软硬件协同验证可以使软件工程师尽早接触到硬件设计,从而使硬件设计和软件开发并发进行,大大缩短项目的开发周期。在实际项目中,要根据需要,综合考虑速度、性能、成本、资源等诸多因素,选择一种或多种方案。
图1.82 软硬件协同验证的基本框架
目前,软硬件协同验证方法包括带有逻辑仿真器的主机代码模式(Host-Code Mode with Logic Simulator)方法、带有逻辑仿真器的指令集仿真器方法(ISS with Logic Simulator)、C/C++仿真方法、CPU的RTL模型仿真方法、CPU的硬件模型仿真方法、带有逻辑仿真器的评估板在板验证方法、电路仿真(Circuit Simulation)方法、FPGA原型(FPGA Prototype)方法等。软硬件协同验证方法各自有其长处和不足,如何应用与设计规范、验证工具、验证环境,以及协同验证关注的性能(速度、准确性、适用性)等有关。实际主要使用三种软硬件协同验证方法:ISS(Instruction-Set Simulator,指令集仿真器)方法、CVE方法和硬件辅助加速验证方法。
ISS方法采用ISS来代替处理器执行软件,并通过接口与外设及内存通信,如图1.83所示。ISS是软件仿真器,利用软件来模拟处理器硬件,包括指令系统、外设、中断控制器、定时器等,可以加载应用软件进行调试。ISS可以达到指令级精确。外设模型一般用C语言建立,但如果所有外设模型都是C语言模型,则整个系统无法达到时钟级精确。
图1.83 ISS方法
简单的ISS可以仿真处理器的指令系统,而高档的ISS可建立一个较大的实时系统模型,仿真处理器的每一个细节甚至不存在的硬件。因此,软件工程师可以在硬件还未设计时就进行软件开发,并验证软件的正确性和实时性等指标。ISS可以并行开发软件和硬件,发现和定位应用程序的逻辑错误,甚至可纠正某些与硬件相关的故障,以评估产品的设计性能。但ISS运行速度慢,只能进行正确性仿真而无法进行系统性能仿真,适用于软件算法的验证。ISS仿真如图1.84所示。
图1.84 ISS仿真
CVE方法以CVE软件为基础,使用两个仿真器进行仿真,如图1.85所示。CVE软件通过自身的一个内核将软件仿真与硬件仿真结合,支持多处理器模型,具有高效的软件调试能力,可以单步执行处理器指令,随时查看寄存器和内存的情况;同时提供了强大的信号观测能力,可以通过设置断点、触发条件等进行有效调试。
图1.85 CVE方法
目前,业界主要使用两种硬件辅助加速验证方法:FPGA原型验证方法和硬件加速验证方法。FPGA原型验证方法主要为软件开发提供平台,硬件加速验证方法则用于软硬件协同验证及整个系统的测试。
软硬件协同验证方法比较如表1.4所示。
表1.4 软硬件协同验证方法比较