目录

  • 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信号表明片选。即片选到的axi slave会使awvalid、wvalid等信号拉高表示有效,其他的axi slave输入的 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这一端

AW CHANNEL

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


W CHANNEL

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

B CHANNEL

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

AR CHANNEL

这个与AW通道逻辑类似

R CHANNEL

这个与B CHANNEL类似

3v1写测试

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

先上transcript

与AXI Master 0握手成功:

与AXI Master 2握手成功:

与AXI Master 3握手成功:

然后是各通道的波形:

AW CHANNEL

如下图所示, 初始时最高优先级是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信号。

W CHANNEL

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


B CHANNEL

这个就是纯粹的片选

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'd3AXI Master 1:
awid = 8'd10,
awaddr = 8'h10,
awlen = 8'd5,
awsize = 3'd2,
awburst = 2'd2,
wdata = 32'd4,32'd5,...,32'd8AXI Master 2:
awid = 8'd20,
awaddr = 8'h20,
awlen = 8'd6,
awsize = 3'd2,
awburst = 2'd2,
wdata = 32'd9,32'd10,...,32'd14AXI 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写测试

未完待续

AXI_Bus_Matrix_4x4 设计相关推荐

  1. 2022-2028年中国UI设计行业现状调研分析及发展趋势研究报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国UI设计行业市场行业相关概述.中国UI设 ...

  2. 【VB】学生信息管理系统2——窗体设计

    这次学生系统是照着书敲的,先敲完然后开始调试!中途遇到了很多问题,查了很多,这里不容易系统的总结!所以就针对各个问题,各个击破! 问题一:VB 6.0中,状态栏控件(sbstatusbar):右击选项 ...

  3. LeetCode简单题之设计 Goal 解析器

    题目 请你设计一个可以解释字符串 command 的 Goal 解析器 .command 由 "G"."()" 和/或 "(al)" 按某种 ...

  4. LeetCode简单题之设计停车系统

    题目 请你给一个停车场设计一个停车系统.停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位. 请你实现 ParkingSystem 类: ParkingSystem(int bi ...

  5. 单周期十条指令CPU设计与verilog实现(Modelsim)

    目录 一.实验目的 二.实验内容 三.实验原理 1. 规定 2. 原理图 四.实验步骤 1. CPU各部件实现 pc insMem acc alu cu dataMem 2. CPU例化实现 3. 编 ...

  6. EDA电子设计技术与应用

    EDA电子设计技术与应用 电子设计自动化(英语:Electronic design automation,缩写:EDA)是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功 ...

  7. AI中pass架构设计优化

    AI中pass架构设计优化 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,例如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠 ...

  8. MegEngine 框架设计

    MegEngine 框架设计 MegEngine 技术负责人许欣然将带了解一个深度学习框架是如何把网络的定义逐步优化并最终执行的,从框架开发者的视角来看待深度学习. 背景 AI 浪潮一波又一波,仿佛不 ...

  9. AI框架精要:设计思想

    AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...

最新文章

  1. Windows下通过Python 3.x的ctypes调用C接口
  2. Idea项目遇到的错误整理
  3. 面试官钟爱的 8 个问题,这样答才能拿高薪 Offer!
  4. 腾讯云,搭建Docker环境
  5. 超干货 | 硅谷产品大师 Marty Cagan 70 分钟演讲2万字中译
  6. Oracle Study之--Oracle 11g RAC设置归档路径错误案例
  7. PHPCMS 核心代码与 www 分离部署
  8. 关羽第三方证书导入的CASE
  9. 想成为一个怎样的人?
  10. dbv oracle驱动,oracle dbv使用详解
  11. python小游戏开题报告范文_课题开题报告范文
  12. 解决regedit taskmgr不能启动
  13. 关于所谓U盘有占用空间,却看不到文件的一些看法
  14. Banana Pi BPI-R3 评测:详细信息、功能
  15. delphi 注册列表的学习
  16. 题目 1536: 最长单词
  17. javascript构造函数
  18. 2023华为OD面试手撕代码经验分享
  19. 谷粒商城高级篇上(未完待续)
  20. IDEA新推出的优雅美观字体初体验(赏心悦目)——JetBrainsMono

热门文章

  1. 星际争霸2细节技巧解析及三大种族计划
  2. SQL算术运算、函数
  3. 未来二维码发展趋势:从“吃穿住行”到“生死救援”的华丽转身
  4. JPA查询——setResultTransformer过期替换
  5. Duplicate resources
  6. 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?
  7. 怎样批量制作植物二维码吊牌
  8. 务实之选 5000元以下热销笔记本推荐
  9. iNeuOS工业互联平台,WEB组态(iNeuView)集成rtmp和websocket视频元件,支持海康、大华等摄像头实时显示视频
  10. 计算机省电模式在什么地方,计算机打开并显示省电模式应该怎么办