当前,OSCI TLM1.0抽象模型在工业界的SoC电子系统级设计中已得到广泛应用,如早期的软硬件集成、系统性能分析、结构设计、功能验证等。但随着抽象层次的提高,采用TLM1.0标准进行建模的事务级模型缺乏实用性,并且仿真速度无法达到要求。
其目标是规范化TLM事务级模型建模标准,提出统一的API及数据结构,提高不同用户编写的TLM模型之间的互操作性。TLM2.0标准的体系结构如图4-28所示。
图4-28 TLM 2.0标准的体系结构
TLM 2.0支持在发起者(主设备)和接收者(从设备)之间传递事务。主设备能够发起事务,即创建一个新的事务对象,并通过调用TLM2.0核心接口定义的方法进行传递。主设备与从设备之间可以直接相连,也可以通过互连单元(总线、片上网络等)进行相连。
互连单元是一个模块,它可以访问事务,但不是事务的发起者或接收者,而只是为发起者和接收者之间提供互连。事务对象所经由的互连单元、事务对象的发起者和接收者之间构成了事务对象所经过的路径。如图4-29所示,前向路径是主设备到从设备,或者互连单元的链路,或者链路级联。
事务通过主设备调用的方法直接返回,或者从设备通过另外的方法调用返回事务称为反向路径。为了支持前向、反向路径,模块间的每一个链接都需要一个端口称为主设备套接字或从设备套接字。
图4-29 TLM 2.0通信中的前向和反向路径
为了增强互操作性,TLM2.0中发起事务的主设备和接收事务并作出响应的从设备必须遵循一定的接口标准,称为事务处理核心接口,包括阻塞传输接口、非阻塞传输接口、直接存储接口(DMI,Memory
Interface)和调试传输接口(Debug Transport Interface)。
其中,阻塞和非阻塞传输接口是主设备、从设备之间进行事务处理的基本接口。两者均支持时序标注(Timing annotation)和时间解耦(Temporal decoupling)。但阻塞传输接口没有阶段(Phase)参数,事务仅有开始和结束两个定时点,一个调用请求发出后,直到请求被处理完成该调用才返回。
而非阻塞传输接口在事务的整个生命周期内支持多阶段,即允许模型描述事务处理过程中的多个阶段细节(包括TLM 2.0已经与定义的阶段UNINITIALIZED_PHASE、BEGIN_REQ、END_REQ、BEGIN_RESP、END_RESP和用户可扩展阶段DECLARE_EXTENDED_PHASE),每一个阶段都有一个明确的定时点,调用请求可以不必等待事务处理完成即可返回。直接存储接口(DMI)允许主设备使用指针直接访问从设备所在的存储区域,而不需要使用如前所述的阻塞或非阻塞传输接口进行访问。
DMI避免了对阻塞和非阻塞传输接口函数的多次调用,能够显著提高模型仿真速度。调试传输接口为主设备提供了一个对从设备进行读写的方法,可以使主设备在仿真过程中对存储器、寄存器的内容进行扫描,可用于实现指令集仿真器ISS的单步、断点等调试功能。
总线是当前电子系统不同模块间进行交互的基本通道接口,对于总线的事务级建模至关重要。通常,事务级建模采用C++的类对事务进行描述,然而对于不同总线,总线读写事务类定义不同。
对于同一总线,不同设计者所编写的总线事务类也可能不同。这就导致了不同的TLM模型之间互操作性差,不利于系统集成。TLM2.0标准针对总线建模提出了通用Payload类,用于提高总线模型的互操作性。
通用Payload类提供了定义总线模型所需的基本属性(如地址、数据、字节使能、单字传输、突发传输、响应等),可方便、快捷地对当前已有的多数总线进行建模。同时,通用Payload还提供了扩展机制,以满足某些总线标准的特定需求。
为了进一步增强不同事务级模型之间的互操作性,TLM2.0标准对采用SystemC/C++进行高抽象层次建模的编码风格进行了规范,提出了松散时序(Loosely-timed)和近似时序(Approximately-timed)的编码风格(注意:编码风格只是规定了编程语言的规范形式,并不是指某一抽象层次或API)。
松散时序的编码风格主要使用阻塞传送接口,使用此种编码风格的模型对应了两个时间点,即事务处理的开始点和结束点。松散时序的编码风格支持如上提到的“时间解耦”,即模型的某部分功能可以在当前仿真时间之前运行,直到一个需要与其他部分进行同步的同步点。时间解耦能够有效地提高仿真速度,但降低了仿真精度。
松散时序编码风格非常适用于构建对硬件细节要求不多的嵌入式软件验证虚拟平台,如嵌入式操作系统等。近似时序编码风格主要通过非阻塞传送接口进行支持,主要用于体系结构的设计空间探测和性能分析。
在非阻塞传输接口中,一个事务往往被精确地划分为多个执行阶段,由不同的定时点进行分割,这些定时点包括请求的开始与结束、应答的开始与结束。为了提高仿真的精度,近似时序编码风格一般不使用时间解耦。
在实际应用中,松散时序编码风格和近似时序编码风格可以根据需要同时使用。此外,TLM2.0标准不提供对于无时序(Untimed)编码风格的支持,但无时序模型可以由TLM1.0标准提供支持(注意:无时序模型并不是指没有任何时序信息,而是仅包含有限时序信息的模型,在TLM 2.0标准中通常被归为松散时序的编码风格)。
同样,TLM 2.0也不提供对于周期精确(Cycle-accurate)编码风格的支持,设计者可借助SystemC和TLM1.0完成周期精确模型的建模。但OSCI将在未来的工作中对近似时序编码风格进行扩展提出规范化的周期精确的编码风格。各种编码风格的应用场合如表4-3所示。
表4-3 OSCI TLM标准不同编码风格的应用
与TLM 1.0相比,TLM 2.0的改进如下。
• ① TLM 1.0没有标准的事务处理类,每一个应用根据需要创建专门的事务处理类,因此不同的模型之间的互操作性很差。TLM2.0中针对这一问题,增加了通用Payload类。
• ② TLM 1.0不支持时序标注,因此不同的模型之间缺乏标准的交换时序信息的方法。TLM1.0中一般通过调用wait函数实现延迟,仿真速度较慢。TLM 2.0中通过在阻塞和非阻塞传输接口中增加了时序标注,提高了仿真速度。
• ③ TLM 1.0要求通过值或常量引用来交换所有的事务处理对象和数据,影响了仿真速度。TLM2.0针对这一问题,在传输接口中允许扩展事务处理对象的生命周期到不同的传输调用中。
-
soc
+关注
关注
38文章
4165浏览量
218231 -
ESL
+关注
关注
1文章
74浏览量
21345 -
模型
+关注
关注
1文章
3241浏览量
48834 -
TLM
+关注
关注
1文章
32浏览量
24749
发布评论请先 登录
相关推荐
评论