基于VPI技术的全芯片混合仿真*
2018-03-01,
,
(中国电子科技集团公司 第三十八研究所,合肥 230088)
引 言
随着半导体工艺的快速发展,超大规模集成电路设计技术日益成熟,系统芯片(System on Chip, SoC)已成为主流的设计技术。伴随“摩尔定律”所预言的晶体管增长趋势,IC设计复杂度还在持续不断增大。随着芯片规模的快速增长,其相应的设计、验证的难度也在不断增大,这使得在芯片设计流程的后期,调试、验证所需的代价增大。因此,一方面需要尽可能在设计周期的早期给出标准的参考模型,以确定芯片架构并发现体系结构中存在的问题。另一方面,目标机上运行的软件开发和调试也需要一个完整而可靠的参考环境,也就是说目前在IC设计的各个阶段中,构建功能完备、周期精确的全芯片仿真平台具有重要意义。
基于C/C++的纯软件仿真方法[1-4]具有描述能力强、抽象层次丰富、仿真速度快等诸多优势,但是在一个较大规模的全芯片系统中想要同时获取所有子模块对应的周期精确的软件模型难度较大,在实际操作中几乎很难满足;另一方面,基于硬件描述语言Verilog HDL的前端数字仿真[5-6]虽然具有周期精确且IP库丰富的优势,但其行为级描述能力有限,而且通常仿真速度较慢。
本文针对此问题,首先介绍基于SystemC[7]的纯软件虚拟仿真方法并分析其特点,然后提出了一种基于VPI技术的全芯片混合仿真方法并通过实际工程应用证明其有效性。
1 SystemC软件建模方法
基于片上网络的复杂SoC电子系统的设计需要使用先进的系统级描述语言对其进行描述。SystemC是由OSCI(Open SystemC Initiative)提出的一种基于C++的统一建模平台,其本质是在C++的基础上添加了硬件扩展库和仿真内核,这使得SystemC可以在不同的抽象级别对复杂电子系统建模,解决了传统C++语言在描述硬件时不具有并发性、时序概念等缺陷,从而可以在系统级用高级语言统一描述软件和硬件行为。SystemC基本体系结构框架如图1所示。
图1 SystemC体系架构
SystemC中关键类的继承关系如图2所示,其最底层是一个节拍式仿真内核,由sc_simcontext类封装。其它常用的关键类型有:
① 模块(sc_module):一种层次化实体,可嵌套其它模块和过程,一般一个完整的SystemC仿真系统可由大量模块经实例化后互联组成;
图2 SystemC 类型继承关系图
② 过程(sc_process):用来描述模块的具体功能,可由事件触发,多个过程可并行执行,SystemC支持3种不同的过程类型:方法过程(sc_method、线程过程(sc_thread)及时钟线程(sc_cthread);
③ 接口(sc_interface):定义了一组方法实现目标,但是不实现;
④ 通道(sc_channel):实现了接口中定义的方法,分为基本通道和层次化通道;
⑤ 信号(sc_signal):用来实现各个过程之间的通信,SystemC提供了多种信号格式来满足从寄存器传输级(Register Transmit Level,RTL)到功能级等不同抽象级的模拟;
⑥ 事件(sc_event):用来触发各个过程的开始以及暂停,通常多个事件组成一个敏感列表(sensitive list)共同控制一个过程的状态;
⑦ 时钟(sc_clock):时钟在同步电路设计中是一个非常重要的角色,本质上是一种特殊的信号,为仿真过程提供了时间基准。
由于SystemC完全构建于标准C++,使得其对抽象层次较高的行为级、算法级的系统任务天然地具有非常强的描述能力,同时又由于其添加了专门用于硬件描述的类库和仿真内核,使之也可以在抽象层次较低的RTL层次对系统进行描述。值得一提的是,SystemC支持延迟赋值这一硬件特殊行为,通过支持Δ延迟(delta-delay)来支持硬件信号的行为建模。Δ延迟是最小的仿真步,一个Δ周期包括许多估值(evaluate)和更新(update)相,当事件调用notify()时,将在仿真环境的事件队列中插入这个事件,用request_update()发出更新请求,在更新相时,调用update()更新信号。
当前在使用完全基于SystemC的纯软件仿真方法描述系统时,所面临的主要问题是基于SystemC建立的周期精确的模型库还不够完善,很多面向工业级应用的IP核依然缺乏,另一方面,由于历史上Verilog HDL长期在工业界的数字前端设计领域占主导地位,因此基于Verilog HDL设计开发的模型库是相当丰富的,但是其仿真速度较慢的缺点一直没有得到很好的解决。
2 基于VPI技术的全芯片仿真
针对前文中对SystemC建模仿真方法的优势及劣势的分析,本文提出一种基于VPI技术的全芯片混合仿真方法。
VPI(Verilog Procedural Interface)是第三代Verilog HDL与C语言过程调用接口,目前已经成为IEEE1364标准(IEEE Verilog HDL标准)的一部分,其中定义了一组标准API接口用以实现Verilog与标准C之间的通信。利用此接口,一方面可以为Verilog硬件代码添加额外的用C实现的系统函数,以弥补Verilog行为级描述能力的不足,另一方面,可以在软件代码中根据需要直接以后门方式读写Verilog硬件代码中的仿真部件(如reg、wire、memory等),VPI技术为软硬件混合仿真的实现提供了必要条件。一些关键的VPI接口及其概要描述见表1。
表1 VPI中常用API概述
通过使用VPI技术可以实现全芯片级的软硬件混合仿真平台的搭建,将系统中复杂度最高、运算量最集中的模块使用周期精确的软件模型构建,同时对其它一些缺乏软件模型的模块直接使用Verilog HDL数字电路模型进行建模,此类功能模块通常为外设模块,并非仿真效率的瓶颈,但是却缺乏周期精确软件模型的模块直接使用Verilog HDL数字电路模型,软硬件模型之间的通信一方面可以通过传统的端口连接实现,另一方面也可以通过VPI实现,如图3所示。
图3 基于VPI混合仿真通信模式
图3中最左侧模块可以认为是一个运算量相对集中、复杂度相对较高的模块(例如CPU、DSP等中央处理单元模块),一般认为这种类型的功能模块是整个系统的仿真效率瓶颈,因此我们使用SystemC建立其周期精确的模拟,最右侧使用Verilog模型可能是因为其软件建模困难,或者已存在成熟的商用IP核(例如AMBA总线或者PCIE外设控制器等模块),中间的模块可以视为一个桥接功能模块,一方面它与软件模型之间通过TLM[8](Transaction Level Modeling,一种基于SystemC的事务级仿真框架)方式通信,通过C++函数调用接口nb_transport_bw/nb_transport_fw来传递被包装成generic_payload(TLM中指定的数据帧格式)的数据帧,另一方面它通过sc_signal
“魂芯”多核DSP[9]是一款完全由中国电子科技集团第三十八研究所自主研发的面向高性能电子应用领域的通用DSP。由于该款芯片面向高端应用,因此其支持多种高速外设,而同时获取或者构建所有这些外设控制器的周期精确的软件模型是不现实的,同时也没有必要,而逻辑最复杂同时也是计算量最密集的计算内核模块其周期精确的软件模型是可用的。
基于以上事实,在该款DSP的实际设计中采用了本文提出的基于VPI技术的方法为其构建了软硬件混合仿真平台,该平台的大致结构如图4所示。图中的顶层是全芯片层,其中包含众多的Verilog硬件模型,如AHB、Uart、RapidIO、PCIE等,而内核计算模型则是由SystemC实现的周期精确的模型。值得注意的是,为了实现DMA控制器的周期精确模型,平台在软件计算内核的内部还嵌入了一个DMAC(DMA Controller)硬件电路模型,整个混合仿真平台既保证了系统的完整性,同时还是周期精确的。
图4 基于VPI的多核DSP混合仿真平台结构
由于该混合仿真平台使用周期精确的软件模型描述计算内核,因此仿真速度大概是纯硬件仿真速度的10~100倍(由目标机运行的应用程序决定),同时由于此平台包含了几乎所有高速外设的Verilog HDL模型,因此它也是功能完备的。在芯片流片的窗口期该平台支撑了操作系统、驱动程序等大量目标机相关生态软件的开发、调试,为大幅缩短产品研发周期起到了关键作用。
结 语
仿真技术是IC设计中的一种关键技术,基于C++的SystemC仿真方法具有描述能力强、仿真速度快等优点,但是目前工业界中大量使用的还是基于Verilog HDL的IP核,基于SystemC的周期精确的仿真模型相对还比较匮乏。在实际工程应用中试图搭建纯软件仿真平台难度较大,需要或者放弃系统的功能完整性,或者放弃系统的周期精确性。本文提出一种基于VPI技术的全芯片混合仿真方法,通过后门读写的方式完成软件模型与硬件模型的交互,使得在搭建全系统仿真平台时对于模型的选取更加 灵活,最后通过将该方法在一款实际DSP设计中的应用说明了本方法是可行的、有效的。
[1] 韦祎.基于SystemC构建多核DSP软件仿真平台[J].微电子学与计算机,2016,33(4):86-90.
[2] 彭德生,蒋志翔.基于SystemC的MIPS处理器建模与架构[J].计算机工程与设计,2015,36(4):1015-1021.
[3] 陈曦,徐宁仪,周祖成.嵌入式系统虚拟原型平台的SystemC实现[J].计算器辅助设计与图形学报,2004,16(8):1070-1073.
[4] Keinert J,Schlichter T,Falk J,et al.System Codesigner-an automatic ESL synthesis approach by design space exploration and behavioral synthesis for streaming application[C]//Proc. of the 45th Annual Design Automation Conference,2008:580-585.
[5] 莫寒以,王仁平.32位稀疏树可逆逻辑加法器的Verilog设计[J].中国集成电路,2017,30(5):28-33.
[6] 赵地,朱兴华.基于Verilog的模拟前端时序的实现方法[J].电子科技,2017,30(4):144-147.
[7] IEEE 1666-2005.IEEE Standard SystemC language reference manual,2006.
[8] Ghenassia F.Transaction level modeling with SystemC:TLM concepts and applications for embedded systems[M].Berlin:Springer,2005.
[9] 洪一,方体莲,赵斌等.“魂芯一号”数字信号处理器及其应用[J].中国科学:信息科学,2015,45(4):574-586.