基于System C的事务级AXI总线模型设计

2018-07-28 07:18刘晓宁沈天豪王雨航
电脑知识与技术 2018年15期

刘晓宁 沈天豪 王雨航

摘要:本文设计了一个具有两个主端口、两个从端口、总线仲裁和地址译码组件的事物级AXI总线模型。该模型以ARM官方提供的AXI周期精确型事务级建模方法为基础,参考GFT通信机制抽象化总线信号和具体的握手信号,结合仲裁算法,使用System C语言进行建模,具有建模效率高和仿真速度快的优点。模型之间时钟和事件同步,模块之间通过端口和层次化通道通讯。本文建立了仿真测试平台,以一个完整的系统平台来测试总线建模是否正确,进行了随机访问测试和定向测试,测试涵盖了建模的各种功能,测试仿真结果表明AXI总线事务级模型通讯正常,功能正确。

关键词:AXI总线;System C;事务级建模;GFT通信机制;仲裁算法

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)15-0234-05

Design of Transaction Level AXI Bus Model Based on System C

LIU Xiao-ning, SHEN Tian-hao, WANG Yu-hang

(Harbin Institute of Technology (Weihai), Weihai 264200 China)

Abstract:In order to speed up the simulation speed, hardware and software co development, the paper designed a two main port, two from the port, bus arbitration and address decoding components AXI bus communication model. Based on the AXI cycle precision transaction level modeling method provided by ARM, this model is based on the GFT communication mechanism abstract bus signal and the specific handshake signal, which is modeled by SystemC language, which has high modeling efficiency and fast simulation speed. And the clock and event synchronization between the models, the module through the port and hierarchical channel communication. The paper builds a simulation test platform to test whether the bus modeling is correct, the random access test and the directional test, and the directional test covers the various functions of the modeling. The simulation results show that the AXI bus transaction level model is normal and function properly.

Key words: AXI bus;System C;transaction level modeling;GFT communication mechanism;Arbitration algorithm

隨着集成电路技术的蓬勃发展,集成电路的设计已经进入了SoC(System-on-Chip)片上系统时代[1]。虽然AMBA 2.0 AHB(Advanced Highperformance Bus)总线协议在理论上可以让用户不断地增加总线位宽以达到更高带宽,但在节省功耗的前提下,用户希望通过极窄的总线宽度、极低的总线频率来实现高的数据吞吐量。AMBA 3.0 AXI(Advanced eXtensible Interface)协议在这种背景下应运而生[2]。AXI 技术丰富了现有的AMBA[3],AMBA总线从提出实际应用中,已经发展经历了四代[4],已成为SOC设计以及SOPC设计中广泛使用的总线标准。两家FPGA芯片提供商最新的SOPC芯片都是采用第四代AMBA总线AMBA AXI4.0设计[5]。ARM官方推出了《AMBA? AXI TLM Specification for CASI》[6]的规范说明文档,里面详细介绍了AXI总线事务级建模方法,但是这是比较简单的一种建模方法,并不包括仲裁协议扩展等部分,缺乏具体实现。

针对上述问题,本文提出了基于System C的事务级AXI总线模型设计。抽象化已有的AXI总线数据结构,并使用更加抽象化的GFT协议来模拟一个周期精确型的总线通讯机制。在这个模型中,总线的信号和握手信号都抽象化成为交易的数据结构,并与实际的电路模块相对应,该模型将硬件层面的通讯机制抽象成一次一次的函数调用。

1 System C事务级建模优势

人们对系统级描述语言的要求是:高仿真速度和建模效率、时序和行为可以分开建模、支持基于接口的设计、支持软硬件混合建模、支持系统级到寄存器的无缝过渡、支持系统级调试和系统性能分析[7]。针对这种需求,OSCI(Open System C Initiativ)组织在1999年正式推出了System C [8]。其作为扩展传统的高级语言,具有开放性等特点,已经得到全世界工程师的欢迎和认可。如今System C已经成为继VHDL和Verilog HDL之后的 IEEE 标准。

System C语言本质上是在 C++的基础上添加的硬件扩展库和仿真核,这使得System C 可以建模不同抽象级别的包括软件和硬件的复杂电子系统;它既可以描述纯功能模型的系统体系结构,也可以描述软硬件的具体实现。System C 源代码可以使用任何标准 C++编译环境进行编译,生成可执行文件;运行可执行文件可以生成 VCD、WIF 和 ISDB 格式的波形文件;可以使用综合工具将 System C 的寄存器传输级描述综合为Verilog HDL的代码用于FPGA设计,也可以综合为门级电路用于ASIC[9]。

在使用System C进行高层次建模时,引出了一个新的概念—TLM(Transaction-Level Model)事务级模型,该建模方法创建一可执行平台模型对系统进行仿真,但其不仅仅是功能级描述,仿真也具有一定时序[10]。事务级模型中的各个模块代表了最终要实现的硬件设备,或者是将要运行在处理器上的软件,通信通过片上总线进行,模块没有管脚,模块间的通信通过函数来进行[11]。

事务级模型建模因不考虑很多底层细节,所以进行建模时间短,并且可以将重点放在如何通信,而不是通信在更底层如何实现;事务级建模可以使用事件驱动,由一事件可以驱动一系列行为,因此建模可以在早期进行。所以,System C 事务级模型具有建模效率高和仿真速度快的优点,另外System C 事务级建模作为高层次建模方法,还具有如下特点:

⑴ 模型之间依靠时钟和(动态)事件同步;

⑵ 模型内部是周期精確的;

⑶ 模块pin没有明确进行建模实现,但可通过适配器外部实现;

⑷ 模块之间通过端口(port)和层次化通道(hierar-chy channel)进行通信。

基于以上概念提出一种事务级建模思想:设备若仅作为被访问者如存储器、FIFO等,那么只需要定义接口,实现接口方法,以备被访问;设备若仅作为访问者如CPU,那么只需要定义端口,来访问其他设备;设备若既可作为访问者和被访问者如总线,那么它就需要同时定义端口和接口,同时也要实现接口方法,这也就是层次化通道,接口用来被访问,端口用来发起访问。

对于SoC设计而言,事务级建模属于架构型设计。在架构的事务级建模中,模块在共享的通信通道(如总线)彼此进行交易。同时在进行系统的System C事务级建模中,可以有效地对软件部分进行描述,结合其进行协同仿真。所以,对所设计的系统使用事务级模型进行仿真时,不仅系统架构可以找到系统级的瓶颈并能有效解决,而且软件开发者也可以评估软件的运行吞吐量,同时也可以研究在系统背景下软件和硬件模型之间的交互。

2 AXI总线的事务级模型

2.1 AXI总线的事务级模型介绍

AXI(Advanced eXtensible Interface)协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分[12],是一种面向高性能、高带宽、低延迟的片内总线。图1显示了一个简单的AXI TLM系统的框图,这个系统的组成部分有:名为Axi_Master_Casi的AXI主端口,名为Axi_Slave_Casi的AXI从端口。图中还显示了用于硬件实现的五个不同的成对的主/从端口,主和从端口之间的通信是通过在driveTransaction()和notifyEvent()函数之间传递一个交易信息结构体来完成的。由物理系统中的硬件通道管理的信号组在TLM API中是以多次调用函数driveTransaction()和notifyEvent()来管理的。

AXI总线协议规定5个不同的通道,分别是读地址通道(Read Address Channel, AR),写地址通道(Write Address Channel, AW),读数据通道(Read Date Channel, R),写数据通道(Write Data Channel, W),写响应通道(Write Response Channel, B)[13]。两个组件在AXI总线上通信的框图如图3所示。

2.2 硬件握手机制

所有的AXI通道都有READY和VALID信号用来控制master和slave之间的信息流(例如读数据通道有RVALID和RREADY信号)。在硬件上实现系统时,这种握手信号是由监视在时钟上升沿的READY和VALID信号来进行管理的。如图4所示,READY信号会在VALID信号拉高之前一直保持低电平的状态。但是,READY信号是可以在VALID拉高之前变成高电平的,也就是说READY信号和VALID信号会互相等待,一个为高电平时,会等待另外一个为高电平。只有在两个信号线在时钟上升沿都是高电平的时候才代表传输结束。

2.3 AXI仲裁算法

仲裁算法[14]本身与何种传输协议规范是无关的,在设计时应紧密地与系统性能和特点结合起来。就AXI总线的事务级仿真模型而言,应考虑到挂载在AXI联架构上的IP 的工作特性,如占用总线频率,突发传输持续周期等等。本模型采用固定优先级算法[15],即系统中各个主模块的优先顺序是固定的,并不随着系统的运行状态而改变。当多个主设备对同一个从设备发出读写请求时,仲裁器根据主设备的优先级顺序将共享资源分配给优先级高的主设备,这样的设计可以简化仲裁设计,更加关注交易时序。

2.4 GFT通信机制

SCML2中附带了一些预定义了的通信协议,通用的快速计时(GFT Generic Fast Timed)协议定义是作为System C模型库中TLM2.0基础协议的扩展而创建的。这个协议不是作为特定的硬件协议实现创建的(比如AXI就是具体协议的实现),而是一个协议状态和属性的集合。它可以实现不同的互联结构,因此可以模仿不同的协议属性。

GFT协议相对于TLM2.0协议增加了对于突发数据节拍时序的支持和独立的交易初始化通道,它是基于FT建模接口创建的,并且添加了一组特定的扩展。GFT协议定义了四种不同类型的传输方式:Request transfer;Request transfer;Write data transfers;Read data transfer。

图5所示是写访问的协议状态机。该图显示了在写传输过程中使用的不同协议状态,左边的所有协议状态都是由发起者定义的,而右边的所有协议状态都是由目标定义的。箭头给出了不同协议状态之间的所有允许的状态转换,虚线框的协议状态和虚线箭头指示着可选的请求转移,因为一次交易是可以直接从命令传输开始的。

图6是一个GFT写数据事务的实现示例。示例中显示了发起者、总线和目标以及由这些组件完成的不同的TLM2.0接口方法调用。事务开始于发起者在非阻塞传输API上发出了GFT_REQ。总线需要与SystemC进行同步,以实现总线仲裁(总线需要确保它对所有在相同时间点传入的事务进行了处理)。一旦仲裁完成(最小一个周期延迟),总线将会在向后的传输路线上发送GFT_GRANT。

图8是一个GFT读数据事务的实现示例。它显示了发起者、总线和目标以及由这些组件完成的不同的TLM2.0接口方法调用。时钟边界显示所需的时间同步。

与写事务一样,发起者通过调用向前的非阻塞API来启动事务。总线至少需要一个周期延迟来实现仲裁同步,但是随后调用向后的路径,把GFT_GRANT协议状态发送给发起者。此后,启动程序可以继续使用read命令,总线将该命令直接转发到目标。目标跳过读取命令的承认并直接跳转开始读取数据传输。每个读数据传输都将至少一个时钟周期添加到事务时序上。所有的调用都是随着时间戳完成的,并且总线要确保所有在发起者和目标之间的事务调用都正确地路由。可以立即使用read命令启动相同的事务,在这种情况下,总线要求在仲裁延迟之后将读命令转发到目标,目标可以在将命令确认返回给发起者之前添加进一步的延迟。

3 仿真验证

如图9所示,设计的仿真测试平台有三个部分,分别是:TestBench、Bus、Memory。TestBench的两个接口和Bus的两个Master接口相连接,Bus的两个Slave端口连接到Memory的两个端口上。Bus里面包含有两个Master、两个Slave、地址译码和仲裁等部分。

仿真测试分为随机测试和定向测试两部分。

随机测试的目的是检查建模的代码是否能够一直运行,有无代码bug和运行时错误。随机测试产生的交易的数据、地址和突发长度都是随机的,但是产生的交易要符合协议的传输规则,而且不能产生越界和不支持的传输情况。图10是随机测试的结果。

定向测试验证了一个端口先写后读的基本操作。AXI_TS::sendToMemory中getResponseAcceptDelay() (1period)后memory进行仲裁,仲裁成功之后,进入memController::dealWithRequest函数,然后又有延迟,延迟之后,最后进入memController::writeEvent,真正的进行写入。写完最后一个数之后,进入B_CMD,在memController::writeEvent()里延迟了两个周期,然后返回给Master。到这里写结束。Master向总线请求从端口控制权,在得到控制权之后,Master读地址通道有效,传输要进行的传输的首地址。在经过延迟之后,从端口的读地址通道有效,接收交易首地址。然后在经过延迟之后,开始进行数据传输,当从端口的读数据通道有效時,主端口的读数据通道也有效。由图11可以看出读取的数据和上次传输写入的数据是相同的,说明写交易和读交易都是成功的。

因为主从端口的读写通道是分离的,所以可以对一个端口写数据的同时进行读数据操作。由图可以看出,在主端口1发出读数据请求的同时,主端口2对相同的起始地址发出了写数据请求。随后在相应的延迟之后,各自开始了传输。在一些时刻可以看出,主端口1的读数据通道、主端口2的写数据通道、从端口1的读地址通道、从端口1的写地址通道、从端口1的读数据通道、从端口1的写数据通道是同时有效的。由此证明建模的AXI五个分离通道是正确的。

由图13可以看出主端口1和主端口2在同一时刻向总线发出了读取同一个地址的请求,两个端口的读地址通道同时有效,但是在经过总线仲裁之后,主端口2的读地址通道先有效,也就是说主端口2获得了从端口的访问权。主端口1的读地址通道一直持续有效,直到赢得了总线仲裁,开始传输之后才拉低。在主端口2交易结束之后,主端口1才获得从端口访问权。由此可以看出,总线仲裁是按照设计进行的,也就是说,优先级高的主端口2和优先级低的主端口1发生访问冲突的时候,仲裁器会把从端口使用权交给优先级更高的端口。

4 结束语

为了提高SoC时代集成电路设计效率,使软件能与硬件并行开发,本文用SystemC和GFT通讯协议构建出AXI总线的事务级模型并完成其仿真验证工作。文章通过分析AXI总线所需要的数据结构和通信机制,采用数据结构体来存储交易信息,并根据GFT抽象协议设计出拥有独立通道进行交易并支持多端口访问机制的AXI事务级模型。随机仿真测试和定向仿真测试结果表明,该模型通讯正常,结果正确。

参考文献:

[1] 童琨, 边计年. 片上系统设计中事务级建模技术综述[J]. 计算机辅助设计与图形学学报, 2007 (11):1365-1372.

[2] AMBA AXI poroteol Specification, ARM[S], C1-C8.

[3] 张军, 马琪. 基于AMBA总线的DMA控制器设计[J]. 科技通报, 2011, 27(2): 268-271.

[4] 蒋周良, 权进国, 林孝康. AMBA总线新一代标准AXI分析和应用[J]. 微计算机信息, 2006, 22(29): 275-277.

[5] X. Liao, J. Zhou, X. Liu. Exploring AMBA AXI on-Chip interconnection for TSV-based 3D So Cs[C]. 3D Systems Integration Conference (3DIC), 2011 IEEE International. IEEE, 2012: 1-4.

[6] AMBA? AXI TLM Specification for CASI, ARM[S], C1-C46.

[7] 陈绍贺, 赵明, 王京. 基于SystemC的片上系统设计[J]. 微电子学与计算机, 2005 (04): 51-52.

[8] Peterson G,Ashenden P,Teegardern D.System C users guide and system C language reference manual(version 2.0)[EB/OL]. [2009-03-10]. http://www.systemc.org.

[9] 陈曦, 徐宁仪. SystemC片上系统设计[M]. 北京: 科学出版社, 2004: 14-29.

[0] 张玉峰, 杨志家. 基于SystemC事务级的建模仿真研究[J]. 微计算机信息, 2005(16): 71-73.

[1] 陈琳, 徐金甫, 章轶, 等. 基于SystemC的事務级建模研究[J]. 微电子学与计算机, 2006(11): 213-216.

[2] 庆利, 王进祥, 叶以正. AMBA片内总线结构的设计[J]. 微处理机, 2002(2): 7-10.

[3] Chang Lipin. On efficient wear leveling for large-scale flash memory storage systems[C]. Proceedings of the 2007 ACM Symposium on Applied Computing, SAC07, 2007: 1126-1130.

[4] 肖潇. 基于AXI的SoC互联结构的设计与验证[D]. 长沙: 国防科学技术大学, 2015: 29-31.

[5] 李耀荣, 王兴军, 梁利平. SOC总线仲裁算法的研究[J]. 微计算机信息, 2007(17): 113-115.