资讯详情

AXI_Bus_Matrix_4x4 设计

目录

  • 1. 功能描述
  • 2. 架构
    • 2.1. axi_bus_matrix_4x4
    • 2.2. decoder
    • 2.3. axi_round_robin_arbiter
  • 3. 逻辑设计
  • 4. 测试
    • 4.1. axi_round_robin_arbiter
      • solo测试
      • 3v1写测试
      • 3v1读测试
    • 4.2. axi_bus_matrix_4x4
      • 4v1写测试
      • 4v4写测试


1. 功能描述

当多个AXI master与多个AXI slave通信时,可以使用一个基于AHB协议的bus matrix实现互联。

例如

2. 架构

对于AXI来说,多个AXI Master需要多个AXI Slave通信,可以通过一个BUS MATRIX实现互联,架构如下图所示

可见AXI_Bus_Matrix与AHB_Bus_Matrix结构相似,都需要decoder解码以判断Master要与哪个Slave通信,回传R通道读数据和B通道写响应。

同时还需要arbiter,面对多个Master同时访问同一个Slave仲裁器。 在这里插入图片描述

2.1. axi_bus_matrix_4x4

接口如下

Group Channel Signal Direction Width(bits) Description
ACLK input 1 时钟
ARSTn input 1 低效复位
MST_IOx AW AWID_mstx input AWID_WIDTH AW通道ID宽度
AWADDR_mstx input AWADDR_WIDTH 2 burst第一个写事务WDATA的地址,高2bit是为了片选axi slave
AWLEN_mstx input 8 该数值 1.意思是这次写事务。WDATA个数
AWSIZE_mstx input 3 WDATA中有效byte大小
AWBURST_mstx input 2 burst传输类型
AWVALID_mstx input 1 AW所有控制信息都是有效的
AWREADY_mstx output 1 AW准备接收所有控制信息
W WDATA_mstx input WDATA_WIDTH 写数据
WLAST_mstx input 1 最后一个写数据的事务
WVALID_mstx input 1 W所有数据信息通道都有效有效
WREADY_mstx output 1 W准备接收通道所有数据信息
AR ARID_mstx input ARID_WIDTH 读事务ID
ARADDR_mstx input ARADDR_WIDTH 2 burst阅读事务第一个阅读传输地址,高2bit是为了片选axi slave
ARLEN_mstx input 8 该数值 1意味着这次读事务。RDATA个数
ARSIZE_mstx input 3 RDATA中有效byte大小
ARBURST_mstx input 2 burst传输类型
ARVALID_mstx input 1 AR所有所有控制信息都有效有效
ARREADY_mstx output 1 AR准备接收通道所有控制信息
R RID_mstx output RID_WIDTH 读事务ID
RDATA_mstx output RDATA_WIDTH 读数据
RRESP_mstx output 2 阅读反馈表示阅读传输的状态
RLAST_mstx output 1 读取事务中最后一个读取数据
RVALID_mstx output 1 R通道所有数据信息有效
RREADY_mstx input 1 R准备接收通道所有数据信息
B BID_mstx output BID_WIDTH 写事务ID
BRESP_mstx output 2 写响应
BVALID_mstx output 1 B通道所有写反馈信息有效
BREADY_mstx input 1 B通道所有写反馈信息准备接收
Group Channel Signal Direction Width(bits) Description
ACLK input 1 时钟
ARSTn input 1 复位,低有效
SLV_IOx AW AWID_slvx output AWID_WIDTH+2 AW通道ID宽度,高2bit用于标记Master
AWADDR_slvx output AWADDR_WIDTH burst写事务第一个WDATA的地址
AWLEN_slvx output 8 该数值+1就表示此次写事务的WDATA个数
AWSIZE_slvx output 3 WDATA中有效byte大小
AWBURST_slvx output 2 burst传输类型
AWVALID_slvx output 1 AW所有控制信息有效
AWREADY_slvx input 1 AW所有控制信息准备接收
W WDATA_slvx output WDATA_WIDTH 写数据
WLAST_slvx output 1 写事务中的最后一个写数据
WVALID_slvx output 1 W通道所有数据信息有效
WREADY_slvx input 1 W通道所有数据信息准备接收
AR ARID_slvx output ARID_WIDTH+2 读事务ID,高2bit用于标记Master
ARADDR_slvx output ARADDR_WIDTH burst读事务第一个读传输地址
ARLEN_slvx output 8 该数值+1就表示此次读事务的RDATA个数
ARSIZE_slvx output 3 RDATA中有效byte大小
ARBURST_slvx output 2 burst传输类型
ARVALID_slvx output 1 AR通道所有控制信息有效
ARREADY_slvx input 1 AR通道所有控制信息准备接收
R RID_slvx input RID_WIDTH+2 读事务ID,高2bit用于标记Master
RDATA_slvx input RDATA_WIDTH 读数据
RRESP_slvx input 2 读反馈,表明读传输的状态
RLAST_slvx input 1 读事务中的最后一个读数据
RVALID_slvx input 1 R通道所有数据信息有效
RREADY_slvx output 1 R通道所有数据信息准备接收
B BID_slvx input BID_WIDTH+2 写事务ID,高2bit用于标记Master
BRESP_slvx input 2 写响应
BVALID_slvx input 1 B通道所有写反馈信息有效
BREADY_slvx output 1 B通道所有写反馈信息准备接收
Parameter Units Description
AWID_WIDTH bit AW通道ID宽度
AWADDR_WIDTH bit AW通道地址宽度
WDATA_WIDTH bit W通道数据宽度
ARID_WIDTH bit AR通道ID宽度
ARADDR_WIDTH bit AR通道地址宽度
RID_WIDTH bit R通道ID宽度
RDATA_WIDTH bit R通道数据宽度
BID_WIDTH bit B通道ID宽度

2.2. decoder

解码器的作用根据awaddr的高2bit或araddr的高2bit来片选访问的axi slave,那么如何表示片选到这个slave呢?

这里给出的思路是,AW、W和AR通道的控制信息实体或数据实体直接连接到每一个arbiter上,decoder只需通过valid信号表明片选。即

而R、B通道则需要片选结果将相应的控制信息、数据信息输入给AXI Master

Channel Signal Direction Width(bits) Description
ACLK input 1 时钟
ARSTn input 1 复位,低有效
AW AWSEL input 2 即AWADDR的高2bit,用于片选 axi slave
AWVALID input 1 AW所有控制信息有效
AWREADY output 1 AW所有控制信息准备接收
AWVALID_slv output 4 输出给axi slave的awvalid
AWREADY_slv input 4 输出给axi slave的awready
W WVALID input 1 W通道所有数据信息有效
WREADY output 1 W通道所有数据信息准备接收
WVALID_slv input 4 输入给axi slave的wvalid
WREADY_slv output 4 输入给axi slave的wready
AR ARSEL input 2 为araddr的高2bit
ARVALID input 1 AR通道所有控制信息有效
ARREADY output 1 AR通道所有控制信息准备接收
ARVALID_slv input 4 输入给axi slave的arvalid
ARREADY_slv output 4 输入给axi slave的arready
R RID output RID_WIDTH axi slave发来的R通道ID
RDATA output RDATA_WIDTH axi slave发来的R通道读数据
RRESP output 2 axi slave发来的R通道反馈信息
RLAST output 1 axi slave发来的R通道最后一个数据有效
RVALID output 1 R通道所有数据信息有效
RREADY input 1 R通道所有数据信息准备接收
RID_slv input RID_WIDTH×4 axi slave发来的R通道ID
RDATA_slv input RDATA_WIDTH×4 axi slave发来的R通道读数据
RRESP_slv input 2×4 axi slave发来的R通道反馈信息
RLAST_slv input 1×4 axi slave发来的R通道最后一个数据有效
RVALID_slv input 4 axi slave发来的R通道有效标志
RREADY_slv output 4 向axi slave输入的R通道准备标志
B BID output BID_WIDTH axi slave发来的B通道ID
BRESP output 2 axi slave发来的B通道反馈信息
BVALID output 1 B通道所有写反馈信息有效
BREADY input 1 B通道所有写反馈信息准备接收
BID_slv input BID_WIDTH×4 axi slave发来的B通道ID
BRESP_slv input 2×4 axi slave发来的B通道反馈信息
BVALID_slv input 4 axi slave发来的B通道信息有效
BREADY_slv output 4 输入给axi slave的B通道准备
Parameter Units Description
RID_WIDTH bit AXI R通道的ID位宽
RDATA_WIDTH bit AXI R通道的读数据位宽
BID_WIDTH bit AXI B通道的ID位宽

2.3. axi_round_robin_arbiter

此处的arbiter与decoder功能类似的,只不过arbiter的片选不是axi slave控制,而是根据轮询算法控制

对于B、R通道的控制信息和数据信息直接连接在每一个decoder上,arbiter只需控制valid和ready即可表示仲裁。

而AW、W和AR通道则需要根据仲裁结果片选相应的信号输出给AXI Slave

Channel Signal Direction Width(bits) Description
ACLK input 1 时钟
ARSTn input 1×4 复位,低有效
AW AWID_mst input (AWID_WIDTH+2)×4 写事务ID,高2bit用于标记Master
AWADDR_mst input AWADDR_WIDTH×4 burst写事务第一个WDATA的地址
AWLEN_mst input 8×4 该数值+1就表示此次写事务的WDATA个数
AWSIZE_mst input 3×4 WDATA中有效byte大小
AWBURST_mst input 2×4 burst传输类型
AWVALID_mst input 1×4 各axi master输入的awvalid
AWREADY_mst output 1×4 输出给各axi master的awready
AWID output AWID_WIDTH 写事务ID
AWADDR output AWADDR_WIDTH burst写事务第一个WDATA的地址
AWLEN output 8 该数值+1就表示此次写事务的WDATA个数
AWSIZE output 3 WDATA中有效byte大小
AWBURST output 2 burst传输类型
AWVALID output 1 输入给axi slave的awvalid
AWREADY input 1 输入给axi slave的awready
Channel Signal Direction Width(bits) Description
W WDATA_mst input WDATA_WIDTH×4 写数据
WLAST_mst input 1×4 写事务中的最后一个写数据
WVALID_mst input 1×4 各axi master输入的wvalid
WREADY_mst output 1×4 输入给各axi master的wready
WDATA output WDATA_WIDTH 写数据
WLAST output 1 写事务中的最后一个写数据
WVALID output 1 W通道所有数据信息有效
WREADY input 1 W通道所有数据信息准备接收
Channel Signal Direction Width(bits) Description
AR ARID_mst input (ARID_WIDTH+2)×4 读事务ID,高2bit用于标记Master
ARADDR_mst input ARADDR_WIDTH×4 burst读事务第一个读传输地址
ARLEN_mst input 8×4 该数值+1就表示此次读事务的RDATA个数
ARSIZE_mst input 3×4 RDATA中有效byte大小
ARBURST_mst input 2×4 burst传输类型
ARVALID_mst input 1×4 AR通道所有控制信息有效
ARREADY_mst output 1×4 AR通道所有控制信息准备接收
ARADDR output ARADDR_WIDTH burst读事务第一个读传输地址
ARLEN output 8 该数值+1就表示此次读事务的RDATA个数
ARSIZE output 3 RDATA中有效byte大小
ARBURST output 2 burst传输类型
ARVALID output 1 给axi slave输入的arvalid
ARREADY input 1 输入给axi slave的arready
Channel Signal Direction Width(bits) Description
R RSEL input 2 RID的高2bit,用于片选axi master
RVALID input 1 R通道所有数据信息有效
RREADY output 1 R通道所有数据信息准备接收
RVALID_mst output 4 输入给各axi master发来的R通道有效标志
RREADY_mst input 4 各axi master输出的R通道准备标志
Channel Signal Direction Width(bits) Description
B BSEL input 2 BID的高2bit,用于片选axi master
BVALID input 1 B通道所有写反馈信息有效
BREADY output 1 B通道所有写反馈信息准备接收
BVALID_mst output 4 输入给各axi master发来的B通道信息有效
BREADY_mst input 4 给axi master输出的B通道准备
Parameter Units Description
AWID_WIDTH bit AXI AW通道的ID位宽
AWADDR_WIDTH bit AXI AW通道的地址位宽
WDATA_WIDTH bit AXI W通道的数据位宽
ARID_WIDTH bit AXI AR通道的ID位宽
ARADDR_WIDTH bit AXI AR通道的地址位宽

3. 逻辑设计

AXI_Bus_Matrix_4x4 设计 - 逻辑设计部分

4. 测试

由于decoder完成的就是片选功能,因此不作单独测试

4.1. axi_round_robin_arbiter

solo测试

主要用于AXI协议的solo测试,只有一个axi master和axi slave进行通信,先写再读

先上transcript,可见读写握手均成功

然后是各通道的波形,这里只展示master这一端

可见当握手成功后,优先级发生了改变

从grant FIFO中读出grant就开始握手,当握手完成后,就开始读新的grant。构成了AW CHANNEL和W CHANNEL的流水

注意此处bid_mst表示的是4个axi master 的输入bid拼接,即axi slave将bid和bresp直连到每一个axi master了

这个与AW通道逻辑类似

这个与B CHANNEL类似

3v1写测试

主要用于对多个AXI MASTER仲裁功能的测试,即令索引为0、2、3的AXI Master同时请求写时,仲裁调度功能能够如期实现。

先上transcript

与AXI Master 0握手成功: 与AXI Master 2握手成功: 与AXI Master 3握手成功:

然后是各通道的波形:

如下图所示, 初始时最高优先级是Master0,故先让它完成AW 通道握手。之后最高优先级为Master1,但是Master1的awvalid为0,所以grant赋予了Master2,等到AXI Slave的awready为高时就与AXI Master2握手。

最终与AXI Master3握手(图中未画出)完成测试

注意此处设定是AXI Slave完成AW通道握手之后awready拉低,等到B通道握手完成后awready拉高。实际应用中则不是这样,而是在AXI Slave中加入一个FIFO缓存AW通道控制信号,并且将FIFO的full取非后作为awready信号。

如图所示,从FIFO中读出grant为4’b0001之后,开始与AXI Master0握手,当wlast[0]为高时表示握手成功,继续读新的grant

这个就是纯粹的片选

3v1读测试

用于对多个AXI MASTER仲裁功能的测试,即令索引为0、1、3的AXI Master同时请求读时,仲裁调度功能能够如期实现。

此处略去波形图

4.2. axi_bus_matrix_4x4

4v1写测试

多个AXI MASTER仲裁功能的测试,即令索引为0、1、2、3的AXI Master同时请求写时,总线矩阵能否如期写入

设定的测试用例如下

AXI Master 0:
awid = 8'd0,	
awaddr = 8'h00,	
awlen = 8'd4,	
awsize = 3'd2,	
awburst = 2'd2,
wdata = 32'd0,32'd1,...,32'd3

AXI Master 1:
awid = 8'd10,	
awaddr = 8'h10,	
awlen = 8'd5,	
awsize = 3'd2,	
awburst = 2'd2,
wdata = 32'd4,32'd5,...,32'd8

AXI Master 2:
awid = 8'd20,	
awaddr = 8'h20,	
awlen = 8'd6,	
awsize = 3'd2,	
awburst = 2'd2,
wdata = 32'd9,32'd10,...,32'd14

AXI Master 3:
awid = 8'd30,	
awaddr = 8'h30,	
awlen = 8'd7,	
awsize = 3'd2,	
awburst = 2'd2,
wdata = 32'd15,32'd16,...,32'd21

测试transcript如下

从transcript中可以看到AXI Master0、1、2、3依次与Slave0完成AW握手,并且Slave0成功将W通道的数据计入FIFO,后根据awlen再从FIFO中读出并通过B通道与正确的AXI Master完成写反馈握手。

需要说明的是tb中slave的逻辑:这里的slave逻辑与axi_round_robin_arbiter_tb中的slave逻辑不同,此处的slave在AW通道和W通道分别设置AW_FIFO和W_FIFO(用mailbox实现)不断收集这两个通道的数据。如果能够读出AW_FIFO值的话,状态机启动,并根据awlen信号从W_FIFO读出数据,读出成功则通过B通道给一个反馈。

真正的Slave模块也可以这么设计

4v4写测试

未完待续

标签: aw连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台