前言
一 为什么要学AXI?
AXI 已经是bd设计环节,与官方代码对接环节中不可或缺的通信握手模块。
二 背景知识
AXI 是源自于ARM公司的AMBA总线,这类总线已经大量的使用在处理器内部不同模块的互联。所以使用AXI已经是大势所趋。或者说AXI总线是区别硬件工程师能力的一个重要标准。如果不使用AXI总线,说明该工程师的多模块互联的相关经验较少,这样也说明该工程师的项目经验往往局限于小型的rtl编写。
三 本文面向于已有AXI初学者的朋友
目标:本文并不是从头教学axi, 而是总结一些axi 控制信号的赋值规律,方便大家记忆以及应用编写自己的axi
-----------------------------axi 控制信号的复制规律-------------------------
1. 首先我们需要关注的信号
axi 控制信号 | 驱动来源 | |
写地址通道 | AWVALID | master |
AWREADY | slave | |
AWADDR | master | |
写数据通道 | WVALID | master |
WREADY | slave | |
WLAST | master | |
WDATA | master | |
写响应通道 | BVALID | slave |
BREADY | master | |
写地址通道 | ARVALID | master |
ARREADY | slave | |
ARADDR | master | |
写数据通道 | RLAST | slave |
RVALID | slave | |
RREADY | master |
这个表是AXI 的关键我们可以总结出以下特点
1. axi 总线是有方向的,类比于uart,uart是不强调主机核从机的区别,但是axi一定是有主从机的
2. 为什么axi要强调主从机的区别?
为axi最初的初衷是处理器于存储器或者CPU中的一下其他部件。所以我们可以看出,写指令或者读指令一定来自主机,从机只是一个设备而已
3. 我们关注一下各个控制信号的驱动源
驱动源说明了这个信号是该模块的 output 同时也是在这个模块中我们要对该信号进行控制
4. valid 信号和ready信号
valid信号类似于处理器中的指令,处理器向设备发出一个指令
ready信号类似于设备的中断响应信号
当valid和ready都拉起说明该时钟内执行指令
让我们练习一下
对于从机他的驱动源是?自己默写一下看看是不是这些
awready,wready,bvalid,arready,rdata, rvalid, rlast
2.其次我们要关注的辅助信号
axi master | |
init_txn_pulse | 写通道 |
start_single_burst_write | |
C_M_AXI_BURST_LEN | |
wnext | |
start_single_burst_read | 读通道 |
rnext |
下文我们 继续关注如何控制这些辅助信号,和端口信号 进而引出官方代码中的状态机