[FPGA/VerilogHDL/Xilinx]AXI接口设计说明及参考

您所在的位置:网站首页 全球学术快报可以实现的功能 [FPGA/VerilogHDL/Xilinx]AXI接口设计说明及参考

[FPGA/VerilogHDL/Xilinx]AXI接口设计说明及参考

2023-06-18 14:23| 来源: 网络整理| 查看: 265

1. 总线简介

AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA3.0中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。AMBA4.0将其修改升级为AXI4.0,AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-stream。AXI4.0-Lite是AXI的简化版本,ACE4.0 是AXI缓存一致性扩展接口,AXI4.0-Stream是ARM公司和Xilinx公司一起提出,主要用在FPGA进行以数据为主导的大量数据的传输应用。

AXI协议是基于 burst的传输,并且定义了如下图1.1所示的5个独立的传输通道:读地址通道、读数据通道、写地址通道、写数据通道、写响应通道。

AXI协议的5个独立传输通道说明

读写地址和数据总线都分开,读写架构如下图所示:

​读架构

​写架构

AXI使用基于 VALID / READY的握手机制数据传输协议,传输源端使用VALID表明地址/控制信号、数据是有效的,目的端使用READY表明自己能够接受信息,最值得注意的点包括:

当VALID(AxVALID/xVALID)信号断言有效时,它必须保持处于已断言有效状态直至从接口断言AxREADY/xREADY有效后出现上升时钟沿为止;

发送信息的AXI接口的VALID信号不得从属于接收该信息的AXI接口的READY信号。但是,READY信号的状态可从属于VALID信号;

写响应必须始终位于所属的写入传输事务中最后一次写入传输之后;

读数据必须始终位于数据相关的地址之后;

从接口必须等待断言ARVALID和ARREADY有效后,才能断言RVALID有效以指示该有效数据可用。

AXI 能够使SoC 以更小的面积、更低的功耗,获得更加优异的性能。AXI 获得如此优异性能的一个主要原因,就是它的单向通道体系结构。单向通道体系结构使得片上的信息流只以单方向传输,减少了延时。除了降低延时,AXI总线还定义了在进出低功耗节电模式前后的握手协议。规定如何通知进入低功耗模式,何时关断时钟,何时开启时钟,如何退出低功耗模式。这使得所有IP在进行功耗控制的设计时,有据可依,容易集成在统一的系统中。AXI的特点如下:

单向通道体系结构。信息流只以单方向传输,简化时钟域间的桥接,减少门数量。当信号经过复杂的片上系统时,减少延时;

支持多项数据交换。通过并行执行猝发操作,极大地提高了数据吞吐能力,可在更短的时间内完成任务,在满足高性能要求的同时,又减少了功耗;

独立的地址和数据通道。地址和数据通道分开,能对每一个通道进行单独优化,可以根据需要控制时序通道,将时钟频率提到最高,并将延时降到最低;

增强的灵活性。AXI技术拥有对称的主从接口,无论在点对点或在多层系统中,都能十分方便地使用AXI技术。

2. 接口描述 2.1 信号描述 2.1.1全局信号

2.1.2写地址通道信号

2.1.3写数据通道信号

2.1.4写响应通道信号

2.1.5读地址通道信号

2.1.6读数据通道信号

2.1.7低功耗接口信号

2.2 总线参数 2.2.1地址结构

AXI 协议是基于 burst 的,主机只给出突发传输的第一个字节的地址,从机必须计算突发传输后续的地址。突发传输不能跨4KB边界(防止突发跨越两个从机的边界,也限制了从机所需支持的地址自增数)。

2.2.2突发传输位宽(AxSIZE)

突发传输位宽为每次传输的byte数量,与突发传输的地址预测相关性很强。每次的突发尺寸不能超过数据通道的宽度;若突发尺寸小于数据通道宽度,需要指定哪些位数是有效的。突发传输位宽为2AxSIZE[2:0],例如AXI_Data_Width = 32bit,则ArSIZE/AwSIZE = 3’d2。

2.2.3 突发类型(AxBURST)

AXI支持三种突发类型:

FIXED(AxBURST[1:0]=0b00):固定突发模式,每次突发传输的地址相同

INCR(AxBURST[1:0]=0b01):增量突发模式,突发传输地址递增,递增量与突发尺寸相关。

WRAP(AxBURST[1:0]=0b10):回卷突发模式,突发传输地址可溢出性递增,突发长度仅支持2,4,8,16。地址空间被划分为长度【突发尺寸*突发长度】的块,传输地址不会超出起始地址所在的块,一旦递增超出,则回到该块的起始地址。

2.2.4 突发传输次数(AxLEN)

AXI4 支持 INCR 突发类型的突发长度在 1 ~ 256 之间,其余类型的突发长度在 1~16 之间。突发长度 Burst_Length = AxLEN[7:0] + 1,需要注意的是突发不能超过 4KB 的地址界限,WRAP类型的突发长度仅能取 2, 4, 8, 或者 16。

2.2.5 写数据选通(WSTRB)

WSTRB 的每一位对应数据中的 8 位(1字节),用于标志数据中的对应字节是否有效。即当 WSTRB[n] = 1 时,标志数据中**WDATA[(8n)+7: (8n)] **部分有效。

2.2.6 应答通道数据结构

针对读和写均有响应的响应信号:

**BRESP[1:0] **写响应信号,每次突发传输完成后

**RRESP[1:0] **读响应信号(位于读数据通道)

响应信号含义如下:

OKAY(2'b00):正常访问正确/特权访问失败/不支持特权访问。

EXOKAY(2'b01):特权访问成功。

SLVERR(2'b10):从机错误,传输失败。

DECERR(2'b11):互连解码错误,传输失败。

2.3 传输机制 2.3.1握手过程

5个传输通道均使用 **VALID ** / **READY **信号对传输过程的地址、数据、控制信号进行握手。使用双向握手机制,传输仅仅发生在 VALID 、**READY **同时有效的时候。其中,source 方产生 VALID 信号,代表其的 address,data 和 control 信息已经准备好,并有效;destination 方产生 **READY **信号,代表其可以进行交互;当 **VALID ** / **READY **信号同时为高,传输开始。

下图是几种握手机制:

​图2.3.1 VALID先有效,等待READY有效后完成传输

图2.3.2 READY先有效,等待 VALID 有效后完成传输

图2.3.3 VALID和READY同时有效,立刻完成传输

2.3.2 通道信号要求

通道握手信号:每个通道有自己的 xVALID /**xREADY **握手信号对。

写地址通道:当主机驱动有效的地址和控制信号时,主机可以断言AWVALID,一旦断言,需要保持AWVALID的断言状态,直到时钟上升沿采样到从机的AWREADY。AWREADY默认值可高可低,推荐为高(如果为低,一次传输至少需要两个周期,一个用来断言AWVALID,一个用来断言AWREADY);当AWREADY为高时,从机必须能够接受提供给它的有效地址。

写数据通道:在写突发传输过程中,主机只能在它提供有效的写数据时断言WVALID,一旦断言,需要保持断言状态,知道时钟上升沿采样到从机的WREADY。WREADY默认值可以为高,这要求从机总能够在单个周期内接受写数据。主机在驱动最后一次写突发传输是需要断言WLAST信号。

写响应通道:从机只能它在驱动有效的写响应时断言BVALID,一旦断言需要保持,直到时钟上升沿采样到主机的BREADY信号。当主机总能在一个周期内接受写响应信号时,可以将BREADY的默认值设为高。

读地址通道:当主机驱动有效的地址和控制信号时,主机可以断言ARVALID,一旦断言,需要保持ARVALID的断言状态,直到时钟上升沿采样到从机的ARREADY。ARREADY默认值可高可低,推荐为高(如果为低,一次传输至少需要两个周期,一个用来断言ARVALID,一个用来断言ARREADY);当ARREADY为高时,从机必须能够接受提供给它的有效地址。

读数据通道:只有当从机驱动有效的读数据时从机才可以断言RVALID,一旦断言需要保持直到时钟上升沿采样到主机的BREADY。BREADY默认值可以为高,此时需要主机任何时候一旦开始读传输就能立马接受读数据。当最后一次突发读传输时,从机需要断言RLAST。

AXI 协议要求通道间满足如下关系:

写响应必须跟随最后一次burst的的写传输;

读数据必须跟随数据对应的地址;

通道握手信号需要确认一些依耐关系。

为防止死锁,通道握手信号需要遵循一定的依赖关系。

同一组通道内的要求:

VALID信号不能依赖 READY 信号。

AXI接口可以等到检测到 VALID 才断言对应的 READY,也可以检测到 VALID 之前就断言 READY。

读操作握手依赖:

上图为读操作的依赖关系,其中:

ARREADY 和 ARVALID 信号是读的地址信号;

RREADY 和 RVALID 是读数据信号;

官方针对这部分的说明为:

Master 提供的 ARVALID 信号必须不等待 Slave 的 ARREADY 信号(翻译:Master 准备好了就发送 ARVALID 信号,这个信号不能够去依赖 Slave 的 ARREADY,换句话说,也就是一旦 Master 准备好,就发 ARVALID);

Slave 可以等待 Master 的 ARVALID 信号,并且决定要不要发送 ARREADY;(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

Slave 可以在 Master 发送 ARVALID 信号之前,自己一切准备就绪的时候,发送 ARREADY;(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

Slave 在发送 RVALID 之前,必须等待 ARVALID 和 ARREADY(翻译:在数据阶段握手之前,必须等待地址阶段的握手完毕,地址阶段握手信息由 ARVALID 和 ARREADY 提供,当这个阶段完成后,Slave 方可提供 RVALID 信号,来表示 Slave 已经准备好)

Slave 的 RVALID 必须不等待 Master 发送 RREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

Master 可以等待 Slave 发送 RVALID 之后在发送 RREADY (翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

Master 也可以在自己准备好之后,在 Slave 提供 RVALID 之前,就提供 RREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

简单的说:所以针对读操作,要求读 Data信号组的握手信号必须出现在读 Addr信号组握手之后,即必须等到 ARVALID的ARREADY同时为 High 后,RVALID才能拉高;同时,一个通道内,xVALID信号不等待 xREADY信号,xREADY可以等待 xVALID;先是 Master端提供 ARVALID和相关的控制信息,进行地址阶段的握手;这部分完成后,再由 Slave发送 RVALID信号,并进行握手;

写操作握手依赖:

AXI 中写操作中唯一的强依赖关系是写响应通道 BVALID,仅当 WVALID 和 WREADY 信号同时有效(数据传输完成)且WLAST 信号有效(突发传输的最后一个数据传输完成)后才会被置位。上图为读操作的依赖关系,其中:

AWVALID 和 AWREADY:是写地址通道的信号;

WVALID 和 WREADY:是写数据通道的信号;

BVALID 和 BREADY:是写响应通道的信号;

官方针对这部分的说明为:

Master 在提供 AWVALID 或者 WVALID 信号,必须不等待 Slave提供 AWREADY 或者 WREADY 信号(翻译:一旦 Master准备好,那么立即提供 AWVALID 或者 WVALID,也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

Slave 可以等待 Master 的 AWVALID 或者 WVALID 或者两个,然后在提供 AWREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

Slave 也可以不等待 Master 的 AWVALID 或者 WVALID 或者两个,一旦 Slave 端准备好,就立即提供 AWREADY 信号

Slave 可以等待 Master 的 AWVALID 或者 WVALID 或者两个,然后在提供 WREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

Slave 也可以不等待 Master 的 AWVALID 或者 WVALID 或者两个,一旦 Slave 端准备好,就立即提供 WREADY 信号

Slave 端必须等待 WVALID 和 WREADY 信号,然后在去发送 BVALID 信号(翻译:必须在写流程握手完毕之后,Slave 才能够去进行写响应通道的握手,即提供 BVALID 信号)

Slave 端也必须等待 WLAST 信号之后,再去提供 BVALID 信号,因为写响应信号 BRESP 必须只在写传输的最后一个数据传输完成后被设置;(翻译:Slave 提供的 BVALID 信号之前,必须还要等 WLAST 信号)

Slave 必须不等待 BREADY 信号,一旦 Slave 准备好,立即发送 BVALID 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

Master 可以等待 Slave 发送 BVALID 之后在发送 BREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

Master 也可以先提供 BREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)

写响应操作握手依赖:

图为写响应操作的依赖关系,其中:

AWVALID 和 AWREADY:是写地址通道的信号;

WVALID 和 WREADY:是写数据通道的信号;

BVALID 和 BREADY:是写响应通道的信号;

3. 参考设计 3.1 设计相关

可以使用Xilinx提供的实例化标准AXI接口,也可根据AXI接口标准及规范自行定义;

定义总线参数,参考中关于总线参数的定义及使用方法,根据实际设计情况及需求,有以下定义:

数据位宽参数:AXI_Data_Width = 32bit 、ArSIZE/AwSIZE = 3’d2 ;

突发类型:INCR ,AxBURST = 2’b01 ;

突发传输次数:75次,AxLEN = 8’d74 ;

写数据选通:WSTRB = 8’b0000_1111;

定义系统参数,根据实际设计情况及需求,有以下定义:

单次输入数据位宽:Data_Width = 数据位宽参数×突发传输次数 = 32bit×75 = 2400bit ;

设计AXI主机接口驱动(AXI_tansaction.v)时,考虑到本案例在项目中的实际应用为单向写,即不包含读过程,但是为了校验写过程是否生效,需要基于读过程进行写入数据的获取和校验,因此在该驱动设计过程中,使用了状态机的跳转作为读写过程的切换(即读写过程没有同时发生,而是顺次发生,但是在AXI协议及科技标准中读写过程为并行过程,可以支持同时发生),在写过程完成后对相应地址数据进行读出和校验;

在Block Design中实例化自定义设计AXI主机接口驱动(AXI_tansaction.v)、AXI从机接口(MPSoC-IP),并使用AXI_Interconnect-IP进行连接,通过地址定义,将AXI接口指向MPSoC端的DDR4存储器,添加axi_protocol_checker-IP以及ila-IP对通信过程中的关键信号进行抓取和监测;

实例化BD、外部数据激励以及结果统计模块。

3.2 写过程抓取

机制:

主机通过这两个通道向从机写入地址和控制信息,通道的方向为主机 Master 向从机 Slave 传输,通道内除了 ready 信号外的其余信号均为输出,valid 为高电平时表示主机认为自己输出的数据有效,ready 信号为输入信号,由从机 Slave 给出,当 ready 为高时表示从机已经准备好接收主机的数据,ready和valid同时为高时代表从机准备好接收主机数据且主机此时发送了有效数据,正确的传输开始。

过程:

首先master去判断awready信号,当该信号为高时,代表slave已经准备好接收新的地址信息,否则master不能给slave发送地址信息;

当第一步完成后,master通过write_addrsess通道给slave发送地址,具体操作:master必须拉个一个awvalid信号,在awvalid信号为高的时候,将对应的地址发送给slave;

然后发送写数据,master必须在wready为高的时候,将wvalid信号拉高,同时将数据发送给salve,当master发送最后一个数据时,将wlast信号拉高一个周期,告诉slave这是最后一个数据,当slave收到wlast信号为高时,就会将收到的数据按照指定的地址写入ddr4;

当master发送完写数据后,必须通过writer response收到slave的应答信号,Bready会拉高,在Bvalid也为高电平时,slave会将bresp信号拉高一个周期,master只要判断到该信号为高电平,既可以给slave发送要写的数据。

​写地址过程

写数据过程

写响应过程

3.3 读过程抓取

在读地址通道上,主机给出要读取的地址,并将地址有效信号ARVALID拉高,等待从机的ARREADY写准备好信号拉高后,成功将地址写入从机;

在读地址通道上,从机给出读出的数据,并将数据有效信号RVALID拉高,此阶段主机的RREADY写准备好信号一直拉高,数据在两个信号同时为高时传输,将数据写入主机,此时读响应RRESP[1:0]为0,代表写入成功;

读地址过程

读数据过程

3.4 常见问题

错误1:读取突发不能跨越4KB的边界。(会导致读过程卡死、中断等现象)

错误2:一旦valid有效,它必须保持有效,直到ready信号为高。(如果在程序中添加了类似超时跳出逻辑的设计,会出现该类警告)

错误3:读CAM溢出,未完成的读取事务的数量超过了在协议检查器核心中实现的存储容量。(这并不表示被监视的系统有任何故障,但它可能会使任何后续监控结果无效。要解决此问题,请增加最大突发参数。)

错误4:RID与ARID不匹配。读取的数据必须始终遵循与其相关的地址。如果使用ID,则RID还必须与未完成地址读取事务的ARID相匹配。当断言RVALID之前没有AR传输时,也会发生这种违反。(目前没发现该类问题带来的负面影响)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3