基于AMBA架构的SoC系统事务级建模介绍
扫描二维码
随时随地手机看文章
1.引言
随着集成电路制造技术的发展,VLSI 已经进入了SoC(System-on-Chip )片上系统时代。对于复杂的片上系统而言,系统验证占整个设计时间的60%-70%,其中涉及到软件与硬件的协同工作等等。传统的系统验证在RTL 级进行,RTL 提供更精确接近实现的同时,也加长了验证时间以及此时发现问题再修改带来的成本增加,所以非常有必要地在尽可能早地进行有效的系统验证。
SystemC 作为一种系统描述语言应运而生,它支持从系统级到门级的描述,解决了传统片上系统设计方法中不同级别使用不同描述语言带来的过渡问题,而其事务级(TransacTIon-Level,TL)建模仿真方法可以在早期有效地进行系统验证,同时速度较RTL 级仿真更快。
目前,事务级建模得到广泛的使用和认同,Synopsys 公司现已提供关于AMBA 架构的事务级模型,以供进行由AMBA 架构组成的SoC 系统的事务级建模仿真所用。
2.SystemC 事务级建模
SystemC 由C++衍生而来,在C++基础上添加硬件扩展库和仿真库构成,从而使SystemC 可以建模不同抽象级别的包括软件和硬件的复杂电子系统,既可以描述纯功能模型和系统体系结构,也可以描述软硬件的具体实现。
在使用SystemC 进行高层次建模时,引出一个新的概念——TLM(Transaction-Level Model )事务级模型,该建模方法创建一可执行平台模型,对系统进行仿真,但其不仅仅是功能级描述,仿真也具有一定时序。
事务级模型建模因不考虑很多底层细节,所以进行建模时间短,并且可以将重点放在如何通信,而不是通信在更底层如何实现;事务级建模可以使用事件驱动,由一事件可以驱动一系列行为,因此建模可以在早期进行。所以,SystemC 事务级模型具有建模效率高和仿真速度快的优点。另外,SystemC 事务级建模作为高层次建模方法,还具有如下特点:
–模型之间依靠时钟和(动态)事件同步;
–模型内部是周期精确的;
–模块pin 没有明确进行建模实现,但可通过适配器外部实现;
–模块之间通过端口(port)和层次化通道(hierarchy channel )进行通信。
上述特点描述中,端口(port)和层次化通道(hierarchy channel )概念为SystemC 事务级建模引入的新概念:
. 接口(inteRFace):定义一组方法来实现设计目标,但不实现这些方法;
. 通道(channel): 实现接口定义的方法;根据通道内部所实现方法的情况,又分为基本 通道和层次化通道;基本通道中没有可见的结构,不包括进程,也不能直接访问其他的基本通道;层次化通道则包括模块、进程等,可以直接访问其他的通道;
. 端口(port):总是与一定的接口类型相关联,端口也只能连接到实现了该类接口的通道上,通过端口模块和进程来访问通道内定义的接口方法; 通过接口又引出接口方法调用(interface-method-call,IMC) 的概念,是指一个进程通过端口调用通道内实现的接口方法。方法在接口中定义,在通道内实现,但在进程内执行。基于以上概念,提出一种事务级建模思想:
①设备若仅作为被访问者,如存储器、FIFO 等,那么只需要定义接口,以备被访问,实现接口方法,此设备作为基本通道存在;
②设备若仅作为访问者,如CPU,那么只需要定义端口,来访问其他设备;
③设备若既可作为访问者和被访问者,如总线,那么它就需要同时定义端口和接口,同时也要实现接口,这也就是层次化通道,接口用来被访问,端口用来发起访问。
对于SoC 设计而言,事务级建模属于架构型设计。在架构的事务级建模中,模块在共享的通信通道(如总线)彼此进行交易。同时在进行系统的SystemC 事务级建模中,可以有效地对软件部分进行描述,结合其进行协同仿真。所以,对所设计的系统使用事务级模型进行仿真时,不仅系统架构可以找到系统级的瓶颈并能有效解决,而且软件开发者也可以评估软件的运行吞吐量,同时也可以研究在系统背景下软件和硬件模型之间的交互。[!--empirenews.page--]
3.CoCentric System Studio(CCSS)内事务级建模仿真
CCSS 是Synopsys 公司提供的一SystemC 仿真平台,支持使用完全事务级模型进行设计、分析、调试验证SoC 架构。
事务级仿真中,对于源代码的调试,CCSS 内嵌调试软件DDD。使用事务级模型组建系统,在编译之后的系统仿真中,当系统工作运行到将要调试的特定模块部分,则可以将该模块部分调入DDD,进行普通设置断点的调试,显示该模块的执行情况以及对系统的影响。对于系统中整体特定模块而言,可以在实例上设置断点、在连线上设置数据监控点(data watch point)、在端口和参数上设置层次监控点(level watch point)。仿真进行时,仿真控制面板上的Level Watch 中,可以改变参数值,以得出不同参数值的仿真情况。若观察波形,则可以调入Virsim 波形仿真软件。
此外,对于整个系统的事务级仿真,更需要一些直接明确的数据来对系统性能进行评估,例如需要知道系统中发送数据的数目,某一时刻系统的状态、发生的事件等等。CCSS 提供的监控器(monitor )可以解决这一问题。
对于监控系统仿真情况,CCSS 提供了3 种类型的监控器,分别为表格、消息以及数据类型。程序中设置此三种监控器,对期望的系统行为进行监控,调整系统参数带来的性能改变也可以清晰显示。根据记录结果,观察系统弱点,以此为出发点进行改进系统。
图1 总结出系统的TLM 建立及仿真流程,TLM 建模思想见部分2 中描述,在整个系统仿真、修改过程中,验证平台(testbench )保持不变从而减少工作量,同时系统修改前后的性能也有更好的可比性。
4.具体实例
这部分给出一例子,结合数据来说明由TLM 组建的系统在CCSS 中进行仿真的方法及特点。如图2 所示一简单IP 路由系统。该系统实现简单路由寻址,分析数据属于本地地址还是其他地址。该系统有四个主设备:DMA 控制器、路由分析(Router)、本地输出(Local)、其他输出(Forward)模块,两个从设备:存储器(Memory)、仲裁(Arbiter)模块。
遵循部分2 中所叙述思想对系统中模块进行事务级建模。[!--empirenews.page--]
IP 数据包产生(IP Packet Generator )模块这里为testbench,IP 数据包分析(IP Packet Parser)模块分析接收来的IP 包,然后送入DMA 控制器,DMA 控制器再将数据送入存储器中,路由分析模块进行路由分析,本地输出模块为本地地址端口输出、其他输出模块为其他地址端口输出。
初步系统设计,对于Router 模块,考虑使用软件或者硬件实现,具体根据系统性能结果决定。
探测系统性能,在此主要分析IP 包丢失率。鉴于存储器的大小直接关系整个系统的成本,同时系统的路由延迟(latency )关系到系统性能。可以同时考虑该两项对IP 包的丢失的影响。对于使用硬件实现Router 模块,路由延迟范围值在1-40 时间单位之间;而使用软件实现范围值则在3000-7000 时间单位之间。
整个系统中使用三种类型的监控器进行验证系统行为,在IP Packet Parser 模块内考察IP 包丢失情况,分析存储器大小和系统延迟带来的影响。改变存储器大小和延迟大小,根据IP Packet Parser 模块内监控器记录得出结果。如图3 所示。
结合图3,可以看出,当存储器容量一定时,延迟越大,系统性能也就越差,也就是说,这种情况下,系统为了达到较好的性能,就需要使用硬件实现Router 模块。使用软件实现Router 模块虽然可以降低成本,但是带来的是系统性能的降低;提高存储器容量可以对此进行补偿,但是同时也增加了一定的成本。所以需要同时考虑两方面的因素,进行折衷选择。
另外一方面,在延迟latency = 1 时,即使用硬件实现路由分析模块时,系统在存储器容量大于20K 以后,性能几乎没有提高,这时,考虑到到系统瓶颈,重点将不放在延迟及存储器大小,而转为分析系统架构的原因。
5.结论
SystemC 语言中TLM 具有建模效率高、仿真速度快的特点,本文结合其特点给出了一种建模思想。CoCentric System Studio(CCSS )支持完全的TLM 仿真,并且支持各种调试,可以明确分析系统性能,给出仿真流程。结合例子来说明在CCSS 内进行TL 建模组建系统并仿真,可以得出对系统改进的指导结果。