一种支持源代码级调试的全芯片仿真技术*

林广栋

(中国电子科技集团公司第三十八研究所, 安徽合肥 230088)

源代码级调试对于嵌入式软件开发效率来说至关重要。传统的IC数字前端仿真平台在运行目标代码时,由于目标机是用硬件描述语言Verilog HDL描述的,因此无法进行源代码级调试,只能通过指令级调试或者查看输出波形来分析问题,然后再反向追溯源代码,开发效率低下。提出一种基于VPI技术的全芯片混合仿真方法,利用该方法可以实现目标机软件内核模型与片上复杂硬件外设模型相结合的混合仿真。由于使用了大量的硬件模型,因此该平台是功能完备的,又由于目标机是由软件实现的,因此该混合仿真平台可支持目标软件的源代码级调试。最后在一款工业级DSP的实际设计流程中的成功应用证明了提出方法的有效性。

关键词全芯片仿真; 周期精确; 软件调试; Verilog编程接口

0 引言

随着半导体工艺的快速发展,以及“摩尔定律”所预言的晶体管增长趋势,芯片规模、设计复杂度都在持续不断迅速增大,片上系统(System on Chip, SoC)已成为主流的设计技术。为了缩短IC开发周期,目前的主流设计方法是采用软件与硬件同时开发的手段,在实体硬件还没有就位之前,软件开发调试一般在系统仿真平台上进行。在项目早期构建功能完备并支持源代码级调试的全芯片仿真平台能够大幅提升目标软件的开发效率,对整个项目的顺利完成以及芯片产品的迅速推广具有重要意义。

使用完全基于Verilog HDL硬件描述语言的数字前端仿真平台[1-4]可以保证系统的周期精确性与功能完整性,但存在仿真速度慢且无法实现源代码级调试的缺点。只能通过指令级或者汇编级的调试发现问题再反向追溯到高级语言的源代码,不仅调试难度大而且效率低下。

使用基于C/C++的纯软件仿真方法[5-8]建立的目标机模型可以支持源代码级调试且具有描述能力强、抽象层次丰富、仿真速度快等诸多优势,但是在一个较大规模的全芯片系统中想要同时获取所有子模块对应的软件模型难度较大,在实际操作中几乎很难满足。另一方面,由于到目前为止,工业界IC设计还是广泛采用基于硬件描述语言Verilog HDL,因此基于Verilog HDL的前端数字仿真IP库相当丰富。如果能够有效地结合两类不同的模型建立可源码级调试的系统级仿真平台,则对于早期开展目标机相关的操作系统程序及硬件驱动程序都具有重要意义。

本文针对以上问题,首先在第1节介绍基于SystemC[9]的纯软件虚拟仿真方法并分析其特点;第2节提出了一种基于VPI技术的可支持C语言源码级调试的全芯片混合仿真方法并通过实际工程应用证明其有效性;最后总结全文。

1 SystemC软件建模方法

基于片上网络的复杂SoC电子系统的设计需要使用先进的系统级描述语言对其进行描述。SystemC是由OSCI(Open SystemC Initiative)提出的一种基于C++的统一建模平台,其本质是在C++的基础上添加了硬件扩展库和仿真核,这使得SystemC可以在不同的抽象级别对复杂电子系统建模,解决了传统C++语言在描述硬件时不具有并发性、时序概念等缺陷,从而可以在系统级用高级语言统一描述软件和硬件行为。SystemC基本体系结构框架如图1所示。

图1 SystemC体系架构

SystemC中关键类的继承关系如图2所示,其最底层是一个节拍式仿真内核,由sc_simcontext类封装。其他常用的关键类型如下。

1) 模块(sc_module)

一种层次化实体,可嵌套其他模块和过程,一般一个完整的SystemC仿真系统可由大量模块经实例化后互联组成。

图2 SystemC 类型继承关系图

2) 过程(sc_process)

用来描述模块的具体功能,可由事件触发,多个过程可并行执行,SystemC支持3种不同的过程类型:方法过程(sc_method、线程过程(sc_thread)及时钟线程(sc_cthread)。

3) 接口(sc_interface)

定义了一组方法实现目标,但是不实现。

4) 通道(sc_channel)

实现了接口中定义的方法,分为基本通道和层次化通道。

5) 信号(sc_signal)

用来实现各个过程之间的通信,SystemC提供了多种信号格式来满足从寄存器传输级(Register Transmit Level,RTL)到功能级等不同抽象级的模拟。

6) 事件(sc_event)

用来触发各个过程的开始以及暂停,通常多个事件组成一个敏感列表(sensitive list)共同控制一个过程的状态。

7) 时钟(sc_clock)

时钟在同步电路设计中是一个非常重要的角色,本质上是一种特殊的信号,为仿真过程提供了时间基准。

由于SystemC中添加了专门用于硬件描述的类库和仿真内核,使之可以在抽象层次较低的RTL层次对系统进行描述。尤其是SystemC支持延迟赋值这一硬件特殊行为,通过支持Δ延迟(delta-delay)来支持硬件信号的行为建模,Δ延迟是最小的仿真步骤,一个Δ周期包括许多估值 (evaluate)和更新(update)相,当事件调用notify()时,将在仿真环境的事件队列中插入这个事件,用request_update()发出更新请求,在更新相时,调用update()更新信号。

另外,由于SystemC是完全基于标准C++实现的,使得其对抽象层次较高的行为级、算法级的系统任务天然地具有非常强的描述能力,同时有大量成熟的软件库可供使用,也较容易实现支持源代码级调试的调试器[10-12]

目前使用完全基于SystemC的纯软件仿真方法所面临的主要问题是基于SystemC建立的模型库还不够完善,很多面向工业级应用的IP核依然缺乏;另一方面,由于历史上Verilog HDL长期在工业界的数字前端设计领域占主导地位,因此基于Verilog HDL设计开发的模型库是相当丰富的。

2 基于VPI技术的全芯片仿真

针对前文中对SystemC建模仿真方法的优势及劣势的分析,本文提出一种基于VPI技术的全芯片混合仿真方法。

VPI(Verilog Procedural Interface)是第三代Verilog HDL与C语言过程调用接口,目前已经成为IEEE 1364标准(IEEE Verilog HDL标准)的一部分,其中定义了一组标准API接口用以实现Verilog与标准C之间的通信。利用此接口,一方面可以为Verilog硬件代码添加额外的用C实现的系统函数以弥补Verilog行为级描述能力的不足;另一方面,可以在软件代码中根据需要直接以后门方式读写Verilog硬件代码中的仿真部件(如reg,wire,memory等),VPI技术为软硬件混合仿真提供了必要条件。

一些关键的VPI接口及其概要描述如表1所示。

表1 VPI中常用API概述

API名称API功能vpi_iterate通过指定层次获取待处理仿真模型句柄vpi_scan通过指定仿真模型来迭代扫描所有子模块vpi_handle_by_name通过指定实例全称获取仿真模型句柄vpi_get_str通过指定仿真句柄获取实例层次全称vpi_get_value通过指定仿真元素句柄后门方式获取其值vpi_set_value通过指定仿真元素句柄以后门方式设置其值

通过使用VPI技术可以实现全芯片级的软硬件混合仿真平台的搭建,将系统中复杂度最高、运算量最集中的指令执行模块使用周期精确的软件模型构建,同时对其他缺乏周期精确软件模型的模块直接使用Verilog HDL数字电路模型。因为目标机是由软件实现的,因此自然地可以使用Socket编程方法实现本地Jtag Server进程与远程软件集成开发环境IDE(Integrated Development Environment )中运行的Jtag Client进程之间的通信,且由于使用了VPI技术,因此软硬件模型之间的通信一方面可以通过传统的端口连接实现,另一方面也可以通过VPI定义的API接口实现,如图3所示。

图3 基于VPI混合仿真通信模式

图3中最左侧模块可认为是有调试需求的指令执行部件,如CPU,DSP等,因此使用SystemC建立其周期精确的模拟;最右侧使用Verilog模型可能是因为其软件建模困难,或者已存在成熟的商用IP核;中间的模块可以视为一个桥接功能模块,一方面它与软件模型之间通过TLM[13](Transaction Level Modeling,一种基于SystemC的事务级仿真框架)方式通信,通过C++函数调用接口nb_transport_bw/nb_transport_fw来传递被包装成generic_payload(TLM中指定的数据帧格式)的数据帧,另一方面它通过sc_signal<T>/VPI_API与Verilog模型进行通信。

“魂芯”多核DSP[14]是一款完全由中国电子科技集团公司第三十八研究所自主研发的面向高性能电子应用领域的通用DSP。由于该款芯片面向高端应用,因此其支持多种高速外设,而同时获取或者构建所有这些外设控制器的周期精确的软件模型是不现实的,同时也没有必要,而逻辑最复杂同时也是计算量最密集的计算内核模块其周期精确的软件模型是可用的。基于以上事实,在该款DSP的实际设计中使用了本文提出的基于VPI技术的混合仿真方法为其构建了软硬件混合仿真平台,该平台的大致结构如图4所示。图中的顶层是全芯片层,其中包含众多的Verilog硬件模型,如AHB,Uart,RapidIO,PCIE等,而内核计算模型则是由SystemC实现的周期精确的模型(其内部实现了Jtag进程),另外在内核内部中还嵌入了一个DMAC(DMA Controller)硬件电路模型,整个混合仿真平台既保证了系统的完整性,同时还支持在远端IDE上进行基于源代码级的软件开发。

图4 基于VPI的多核DSP混合仿真平台结构

由于该混合仿真平台使用周期精确的软件模型描述计算内核,因此仿真速度大概是纯硬件仿真速度的10~100倍(由目标机运行的应用程序决定),同时由于此平台包含了几乎所有高速外设的Verilog HDL模型,因此它也是功能完备的。在芯片流片的窗口期该平台支撑了操作系统、驱动程序等目标机相关生态软件的开发、调试,为大幅缩短产品研发周期起到了关键作用。

具体的执行效率对比如表2所示,第一项显示了外设无关的程序在前仿平台和混合仿真平台在执行效率方面的对比(执行FFT算法),可以显然地发现在完成同样的仿真周期数的前提下,本文提出的混合仿真方法在执行效率方面相比纯RTL的前仿平台提升了大约1~1.5个数量级。而第二项显示了一种PCIE驱动程序调试情景下的执行效率对比(通过PCIE执行片间DMA),由于存在内核与外设RTL模型的周期级交互,因此混合仿真平台的执行效率有所下降,但仍然远远领先于纯前仿平台,大约提升了0.6个数量级。

表2 纯前仿平台与VPI混合仿真平台的执行效率对比

程序类型纯前仿平台执行时间/ms基于VPI技术的混合仿真平台执行时间/ms执行周期执行FFT算法45756321725 million cyclesPCIE驱动执行片间DMA操作38257876814190 millioncycles

图5显示了在使用了本文提出的基于VPI方法建立的混合仿真平台上进行PCIE驱动程序开发的场景。如图5所示,可以在模拟器运行的过程中进行C程序源代码级的调试,同时可以观察硬件的波形变化,如图6所示。目前该平台支持的调试类型有C代码单步调试、汇编级调试等多种调试手段,另外还支持软件运行中任意时刻的寄存器和流水线,以及内存单元的查看。

图5 在混合仿真平台上进行基于源码调试

图6 在混合仿真平台上观察硬件波形变化

3 结束语

在IC设计早期建立支持高级语言源码级调试的全系统仿真平台对于提升嵌入式软件开发效率具有非常重要的意义。基于C++的SystemC仿真方法具有描述能力强、仿真速度快、可用软件库丰富等优点,但是目前工业界中大量使用的还是基于Verilog HDL的IP核,基于SystemC实现的周期精确的仿真模型相对还比较匮乏。在实际工程应用中试图搭建功能完备的纯软件仿真平台难度较大,可能需要放弃系统的完整性,而系统功能完整性对于操作系统软件以及硬件驱动程序的开发是非常必要的。本文提出一种基于VPI技术的全芯片混合仿真方法,通过后门读写的方式完成软件模型与硬件模型的交互,一方面保证了系统的完整性,同时支持多种源码级调试手段。最后通过将该方法在一款实际DSP设计中的应用说明了本文提出方法是可行的、有效的。

另外,本文提出的混合仿真方法在执行效率方面还有进一步提升的空间。由于使用了VPI编程接口,因此使得系统软硬件模块的裁剪变得更加灵活和自由,一方面,可以在面向某些特定需求的仿真时,根据需要裁减掉一些当前场景下无关的大型复杂的硬件模型;另一方面,当周期精确不再是系统必需的特征时,可以使用TLM方法进行行为级建模,进而进一步大幅提升执行效率。以上是下一步研究的重点内容。

参考文献

[1] 李志丹. 嵌入式软件调试方法研究[J]. 计算机与数字工程, 2012, 40(7):157-159.

[2] 贾璐,李云喜,胡宁,等. 基于对称多处理架构的软件调试技术研究和实现[J]. 航空计算技术, 2014, 44(3):101-104.

[3] 莫寒以,王仁平. 32位稀疏树可逆逻辑加法器的Verilog设计[J]. 中国集成电路, 2017(5):28-33.

[4] 赵地,朱兴华,孙辉,等. 基于Verilog的模拟前端时序的实现方法[J]. 电子科技, 2017, 30(4):144-147.

[5] 韦祎. 基于SystemC构建多核DSP软件仿真平台[J]. 微电子学与计算机, 2016, 33(4):86-90.

[6] 彭德生,蒋志翔. 基于SystemC的MIPS处理器建模与架构[J]. 计算机工程与设计, 2015, 36(4):1015-1021.

[7] 陈曦,徐宁仪,周祖成. 嵌入式系统虚拟原型平台的SystemC实现[J]. 计算机辅助设计与图形学学报, 2004, 16(8):1070-1073.

[8] KEINERT J, SCHLICHTER T, FALK J, et al. SystemCodesigner: An Automatic ESL Synthesis Approach by Design Space Exploration and Behavioral Synthesis for Streaming Applications[J]. ACM Trans on Design Automation of Electronic Systems, 2009, 14(1):1-23.

[9]INITIATIVE O S C. IEEE Standard SystemC Language Reference Manual: IEEE Std 1666—2005[S]. New York: IEEE Standards Publication, 2006.

[10] 林广栋,黄光红,朱艳. BWDSP处理器的C语言级调试器实现方案[J]. 中国集成电路, 2016(1/2):69-75.

[11] 林广栋,黄光红. 一种统一的调试信息管理方法[J]. 中国集成电路, 2014, 23(11):33-37.

[12] 林广栋,刘谷,王强,等. 一种DWARF格式行号调试信息解析方法[J]. 现代计算机, 2014(9):3-9.

[13] GHENASSIA F. Transaction Level Modeling with SystemC: TLM Concepts and Applications for Embedded Systems[M]. Secaucus, NJ: Springer, 2005.

[14] 洪一,方体莲,赵斌,等. “魂芯一号”数字信号处理器及其应用[J]. 中国科学: 信息科学, 2015, 45(4):574-586.

A Whole Chip Simulation Technology for Debugging at Source Code Level

WANG Qiang, LIN Guangdong, GENG Rui

(The38th Research Institute of China Electronics Technology Group Corporation,Hefei230088,China)

Abstract:It is very important for the embedded software developing effectiveness that debugging at the source code level. When running the target code on the traditional IC front-end simulation platform, it is impossible to debug at source code level because the target machine is described by hardware description language like Verilog HDL. The only way for debugging in this situation is to check out problems at the instruction level then to move backward to the source code. A whole chip hybrid simulation method based on VPI technology is proposed in this paper, through which, it is implemented that simulating the software kernel model and the complex hardware peripheral devices model together. The simulation platform is integrated because of using many hardware models and also is supporting debugging at source code level because its target machine model is implemented with software. Finally, a successful application in a practical industrial DSP design process has shown the effectiveness of the method proposed in this paper.

Key words:whole chip simulation; cycle accuracy; software debugging;Verilog procedural interface (VPI)

中图分类号TN911.72;TP319

文献标志码:A

文章编号:1672-2337(2018)03-0281-05

DOI:10.3969/j.issn.1672-2337.2018.03.008

收稿日期:2017 11 16;

修回日期:2017 12 13

基金项目:国家核高基重大专项(No.2012ZX01034001)

作者简介

王 强 男,1983年11月生于安徽淮南,2005年、2008年和2012年于合肥工业大学分别获得学士学位、硕士学位和工学博士学位,现为中国电子科技集团公司第三十八研究所软件工程师,主要研究方向为系统级混合仿真、大系统并行仿真、操作系统。E-mail:32673491@qq.com