基于面向对象总线事务模型的高效可扩展事务级建模
1. 引言
嵌入式系统和片上系统集成了越来越多的处理器节点和复杂的通信结构。在实现这些系统之前对其进行建模是一项至关重要的设计任务,这有助于早期验证系统架构概念、探索架构替代方案以及进行性能评估。由于寄存器传输级(RTL)建模的复杂性、灵活性差和模拟性能低,事务级建模(TLM)应运而生。
TLM的关键原则包括:
- 通过函数调用而非信号通信进行通信。
- 与低级信号相比,在更粗粒度的层面上交换信息。
基于这些约束,基于总线的系统可以在不同的TLM抽象级别进行描述。常见的抽象级别有:
| 抽象级别 | 描述 |
| ---- | ---- |
| 功能视图(FV) | 完全抽象通信架构,通过建模每对通信伙伴之间的点对点连接。 |
| 程序员视图(PV) | 在忽略时序和仲裁的情况下对总线通信进行建模。 |
| 架构视图(AV,也称为周期近似(CX)视图) | 添加近似的仲裁和时序。 |
| 周期精确(CA)或验证视图(VV) | 事务必须能够重现总线在RT级实现中每个周期的总线所有者和活动事务。 |
SystemC TLM标准定义了启动和接收事务的接口以及基本的TLM FIFO通道,但未描述事务本身的系统建模风格。本文的贡献在于对事务进行面向对象建模,从而实现易于扩展的周期精确模型,其模拟速度接近不太精确的CX模型。
2. 相关工作
事务级建模(TLM)的本质与语言和应用领域无关。支持TLM的建模语言有SystemC和SpecC。在TLM这个相对年轻的领域,通信方案、互操作性、抽象级别和近似的定义以及术语等都是持续讨论和标准化的主题。
OSCI-TLM标准(版本1.0)提出了使用某些接口和基于这些接口的通道,解决了用户代码与通信代码分层分离、模块互操作性和重用等问题。然而,该标准存在一些缺点:
- 基于其建模风格,被动组件的建模与主动组件的建模差异显著。
- 使用C结构体传输信息,影响了模型的可扩展性和重用性。
为解决这些问题,提出了面向对象事务级建模(OOTLM)方法,并通过简单模型进行了演示。此外,还有GreenBus等相关工作,它提供了一个通用的、协议中立的互连方案和库,可用于定制具体的总线协议。许多研究人员使用AMBA AHB来评估他们的建模方法,如Pasricha等人基于CCATB抽象级别开发了AHB模型,Caldari等人在SystemC 2.0中开发了AHB的事务级模型,ARM发布了基于CASI的AMBA模型。
3. OOTLM方法
在OOTLM中,模型元素之间的交互由事务对象表示。事务对象代表读或写传输、重置或初始化操作,或更复杂交互的抽象,并编码特定交互所需的信息。例如,重置操作的事务对象包含要重置目标的地址;读传输的事务对象的属性表示要传输的数据项的地址和目标要返回的数据。
事务对象由发起主设备创建和初始化,并通过符合OSCI-TLM的通道发送到总线模型。根据仲裁策略和算法,事务对象最终被路由到目标从设备进行处理。在事务对象的生命周期内,发起主设备可以通过指针访问它,并查询或更改其属性,避免了使用单独的请求、响应和控制事务带来的额外数据流量和开销。
使用适当设计的事务类层次结构,单个基于OSCI-TLM的通道可以传输不同类型的事务对象。例如,使用
tlm_fifo<bus_transaction*>
类型的通道,可实现简单的互连方案。
作为一种支持被动从设备模型重用的建模技术,从设备与事务对象的交互通过从设备现有的方法(如
read()
和
write()
)进行。OOTLM方法还支持模型的重用、增量开发和可扩展性。
4. AMBA AHB的周期精确OOTLM模型
Advanced High Performance Bus(AHB)是ARM AMBA总线家族的一部分,旨在用作片上系统(SoC)的骨干总线。它是一个多主、流水线总线,具有单周期总线切换、固定大小突发、未指定长度的增量突发以及拆分和重试传输等特性。
本文重点关注AHB规范的一个子集,以验证OOTLM方法在建模复杂总线协议方面的有效性。具体建模内容包括:
- 单数据项传输和固定长度突发。
- 选择了OKAY、ERROR和SPLIT三种从设备响应。
- 简化假设:未对未锁定突发的抢占进行建模,突发仅在收到SPLIT响应时才能提前终止。
所开发的模型是周期精确的,仲裁、总线切换、事务间和事务内的时序以及每个周期的传输状态都准确且完全符合AHB规范。
AHB传输有两个阶段:地址阶段和数据阶段。在每个总线周期,总线上可能同时进行两个不同的传输,一个处于地址阶段,另一个处于数据阶段。当当前处于数据阶段的传输完成时,处于地址阶段的传输将进入数据阶段。
在总线模型中,使用两个指针(一个指向地址阶段的事务,另一个指向数据阶段的事务)维护和更新AHB的抽象流水线视图,并根据数据阶段事务的状态协调事务对象的路由和AHB总线的其他时序方面。
4.1 AHB数据传输事务
事务对象是主设备和从设备之间信息传输的手段,可视为总线模型动态创建的虚拟通信路径。AHB单传输和突发的事务类层次结构如图所示,部分属性表示地址、数据和控制信息,与AHB信号集有直接对应关系,其他属性用于建模事务对象的动态行为、延迟数据总线切换和拆分传输。
从设备处理事务对象时,调用
execute()
方法并传入其
ahb_slave_interface
指针,以更新事务对象的属性。
execute()
方法会根据需要调用目标从设备的
read()
和
write()
接口方法来获取数据、响应和就绪状态。
基于突发和拆分传输的特性,减少了模型元素之间的对象流量以提高性能。对于拆分传输,总线和从设备模型在待处理事务列表中保留对拆分事务对象的指针,从设备通过事务对象的
m_split_reattempt
属性向仲裁算法发出准备处理事务的信号,重新尝试的主设备无需向从设备发送新的事务对象,总线模型重新启用事务对象以供从设备重新处理。AHB突发不允许跨越从设备地址边界,因此每个突发只向目标从设备发送一个事务对象。
事务对象的动态行为由状态机建模,如
ahb_single_transaction
的状态机所示。突发事务使用并发状态机建模,考虑到突发可以有并发节拍,一个处于地址阶段,一个处于数据阶段。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(创建事务对象):::process
B --> C{仲裁}:::decision
C -->|成功| D(路由到从设备):::process
C -->|失败| B
D --> E{从设备处理}:::decision
E -->|完成| F(更新事务对象):::process
E -->|未完成| D
F --> G([结束]):::startend
4.2 AHB总线模型
总线模型负责将事务对象路由到目标从设备。仲裁算法在
select_master()
方法中实现,在选择最高优先级主设备时考虑主设备 - 总线通道中的事务和待处理事务列表。使用将地址范围映射到从设备的数据结构进行解码,事务对象通过从设备 - 总线通道(新事务)或再次将事务对象置于地址阶段(拆分事务)路由到目标从设备。
总线的功能在时钟触发的
cycle()
进程中实现,并由状态机建模。基于总线的流水线模型,使用该状态机准确建模了AHB总线的仲裁和所有方面。
为了进行性能测量和验证,还开发了通用的主设备和从设备模型。由于事务类之间的继承关系以及模型基于事务类的多态方法设计,可以分三步增量开发模型:
1. 建模和实现AHB功能的基本元素,如仲裁、解码/路由、流水线行为和单事务。
2. 实现拆分事务。
3. 实现突发和与突发相关的问题。
例如,将总线模型从第一步扩展以支持拆分事务时,总线状态机需要一个新的转换,并通过添加属性、一个新事件和重写一些方法来扩展模型;从第二步扩展从设备以支持突发事务时,无需进行任何更改。
基于面向对象总线事务模型的高效可扩展事务级建模
5. 实验结果
使用OSCI SystemC库版本2.1 v1和Microsoft Visual C++ .NET 2003在Microsoft Windows XP专业版上实现了模型。通过确定性和随机测试对总线模型进行了协议规范验证。为测量总线模型的模拟性能,采用了类似于相关工作的单主设备、单从设备测试设置,并测量了其他相关工作中也报告的性能指标。
5.1 模拟事务处理时间和带宽
首先测量了模拟事务处理时间和等效的模拟带宽。这些指标表示使用最有效的突发和单传输组合执行特定大小的数据传输事务所需的最小(实际或挂钟)时间。
| 传输大小(字节) | 模拟带宽(MBytes/Sec) |
|---|---|
| 1 | 0.270 |
| 2 | - |
| 3 | - |
| … | … |
| 1024 | - |
测量结果表明,对于小传输,事务对象传输的开销相对较高,最坏情况下的带宽达到0.270 MBytes/Sec。随着传输大小的增加,该开销变得可以忽略不计,带宽接近1.2 MBytes/Sec。
与其他相关工作相比,不同模型的模拟带宽如下:
| 模型 | 模拟带宽(MBytes/Sec) |
| ---- | ---- |
| 本文模型(保守值) | 接近1.2 |
| 本文模型(考虑传输细节) | 接近4.8 |
| Schirner和Dömer的ATLM模型 | 2.29 |
| GreenBus基于IBM PLB的模型 | 最大2.8 |
| Schirner和Dömer的BFM模型 | 0.03 |
需要注意的是,本文报告的模拟带宽值非常保守。在测试设置中,所有传输都使用单一数据宽度(如字节),而在其他一些模型中,可能会使用更高效的传输方式。考虑到这些因素,本文模型的模拟带宽接近4.8 MBytes/Sec,但为了与部分已发表的相关工作保持一致,报告了更保守的值。
5.2 模型模拟速度
接下来测量了模型模拟速度,以模拟模型每秒的模拟时钟周期数表示。测试设置的平均模型模拟速度达到1150 KCycles/Sec。相比之下,Caldari等人基于SystemC 2.0的模型报告的模拟速度为300 KCycles/Sec,他们使用了更复杂的主设备模型,并在Sun Ultra 60工作站上进行了测量。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始模拟]):::startend --> B(初始化模型):::process
B --> C(执行事务):::process
C --> D{事务完成?}:::decision
D -->|是| E(记录时间和周期数):::process
D -->|否| C
E --> F(计算模拟带宽和速度):::process
F --> G([结束模拟]):::startend
6. 结论
通过抽象的面向对象建模风格,可以对复杂的现实世界总线系统和协议进行易于扩展且周期精确的建模。使用复杂的事务对象对总线事务进行建模,这些对象准确编码了所有必要的信息,其动态行为准确表示了总线传输的不同阶段,直至单个总线周期。这减少了模型元素之间的流量,从而在不损失精度的情况下提高了模拟性能。
与相关工作相比,测量结果显示该模型的模拟性能明显高于其他周期精确模型,接近周期近似模型的性能。未来计划通过进一步减少SystemC事件的使用并转向周期近似级别来实现进一步的加速。此外,还将探索将该方法应用于其他总线协议,并开发主设备和从设备组件的模拟库,以及将模型与指令集模拟器连接。
总的来说,这种基于面向对象的事务级建模方法为复杂总线系统的设计和验证提供了一种高效且可扩展的解决方案,有助于在早期阶段对系统架构进行验证和性能评估,从而提高嵌入式系统和片上系统的设计质量和效率。
超级会员免费看
1071

被折叠的 条评论
为什么被折叠?



