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信号表明片选。即片选到的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 设计相关推荐
- 2022-2028年中国UI设计行业现状调研分析及发展趋势研究报告
[报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国UI设计行业市场行业相关概述.中国UI设 ...
- 【VB】学生信息管理系统2——窗体设计
这次学生系统是照着书敲的,先敲完然后开始调试!中途遇到了很多问题,查了很多,这里不容易系统的总结!所以就针对各个问题,各个击破! 问题一:VB 6.0中,状态栏控件(sbstatusbar):右击选项 ...
- LeetCode简单题之设计 Goal 解析器
题目 请你设计一个可以解释字符串 command 的 Goal 解析器 .command 由 "G"."()" 和/或 "(al)" 按某种 ...
- LeetCode简单题之设计停车系统
题目 请你给一个停车场设计一个停车系统.停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位. 请你实现 ParkingSystem 类: ParkingSystem(int bi ...
- 单周期十条指令CPU设计与verilog实现(Modelsim)
目录 一.实验目的 二.实验内容 三.实验原理 1. 规定 2. 原理图 四.实验步骤 1. CPU各部件实现 pc insMem acc alu cu dataMem 2. CPU例化实现 3. 编 ...
- EDA电子设计技术与应用
EDA电子设计技术与应用 电子设计自动化(英语:Electronic design automation,缩写:EDA)是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功 ...
- AI中pass架构设计优化
AI中pass架构设计优化 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,例如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠 ...
- MegEngine 框架设计
MegEngine 框架设计 MegEngine 技术负责人许欣然将带了解一个深度学习框架是如何把网络的定义逐步优化并最终执行的,从框架开发者的视角来看待深度学习. 背景 AI 浪潮一波又一波,仿佛不 ...
- AI框架精要:设计思想
AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...
最新文章
- Windows下通过Python 3.x的ctypes调用C接口
- Idea项目遇到的错误整理
- 面试官钟爱的 8 个问题,这样答才能拿高薪 Offer!
- 腾讯云,搭建Docker环境
- 超干货 | 硅谷产品大师 Marty Cagan 70 分钟演讲2万字中译
- Oracle Study之--Oracle 11g RAC设置归档路径错误案例
- PHPCMS 核心代码与 www 分离部署
- 关羽第三方证书导入的CASE
- 想成为一个怎样的人?
- dbv oracle驱动,oracle dbv使用详解
- python小游戏开题报告范文_课题开题报告范文
- 解决regedit taskmgr不能启动
- 关于所谓U盘有占用空间,却看不到文件的一些看法
- Banana Pi BPI-R3 评测:详细信息、功能
- delphi 注册列表的学习
- 题目 1536: 最长单词
- javascript构造函数
- 2023华为OD面试手撕代码经验分享
- 谷粒商城高级篇上(未完待续)
- IDEA新推出的优雅美观字体初体验(赏心悦目)——JetBrainsMono
热门文章
- 星际争霸2细节技巧解析及三大种族计划
- SQL算术运算、函数
- 未来二维码发展趋势:从“吃穿住行”到“生死救援”的华丽转身
- JPA查询——setResultTransformer过期替换
- Duplicate resources
- 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?
- 怎样批量制作植物二维码吊牌
- 务实之选 5000元以下热销笔记本推荐
- iNeuOS工业互联平台,WEB组态(iNeuView)集成rtmp和websocket视频元件,支持海康、大华等摄像头实时显示视频
- 计算机省电模式在什么地方,计算机打开并显示省电模式应该怎么办