本系列我想深入探寻 AXI4 总线。不过事情总是这样,不能我说想深入就深入。当前我对 AXI总线的理解尚谈不上深入。但我希望通过一系列文章,让读者能和我一起深入探寻 AXI4。
在本系列先前的文章中,我们首先通过协议 specification 了解协议的接口与机制,并通过操作一个 AXI 接口的 RAM IP 进行了一番实战。
从协议机制上来说,协议的制定者权衡协议的使用场景,主从机接口,性能等各方面的需求与限制以及实现的难度制定了这些规则。从笔者个人的经验来说,对于一个协议:
把手册打印出来 -> 翻烂 -> 没人比我更懂这个协议了(误)
翻烂可不是了解一个协议最有效的手段,最重要的还是针对协议的实践。通过操作 AXI 接口的 IP 可以熟悉协议的接口。而通过实现一个协议的接口模块,可以更深入地了解协议。本文将借助 Xilinx 提供的 AXI 接口代码,实现一个 AXI-lite 接口模块,了解协议接口机制的实现。
Vivado 提供的接口代码
在 Vivado 中使用 IP 编辑器创建一个 AXI 接口的 IP,就可以获取到 Xilinx 在创建模板中提供的接口代码,这里简单地纪录下创建过程。
首先在 Tools 中选择 创建打包新 IP 菜单,选择建立一个 AXI4 外设。
在接口界面,添加 AXI 接口。这里的接口可选作为主机或者从机的 AXI-Full,AXI-Lite 或者 AXI-Stream 协议,本文选择 32 位 AXI-Lite 从机作为例子。位宽按照协议规定,可以在 32 位和 64 位之间进行选择。
在创建完 IP 核后.....没错,就是什么都不会发生。如果要编辑 IP 核或者像本文要做的那样查看 IP 的 RTL 代码,那么在 IP catalog 选项中找到刚刚新建的 IP 核,一般在 User Repository 选项下可以找到。右键-在 IP Packager 中编辑。
使用 IP Packager 编辑会打开一个新的基于 创建的 IP 核的 Vivado 工程,在这个工程中可以修改 IP 的信息,参数,接口以及 RTL 代码。在 source 中有一个 IP 核的顶层模块以及其下的 AXI-Lite 接口模块,这就是我们要学习的接口实现 demo 了。
AXI-Lite 接口模块信号列表
Xilinx 提供的代码是非常好的学习材料