AXI_03 AXI_LITE_SLAVE_IP核设计与验证

本文详细介绍了如何使用向导生成AXI_LITE_SLAVE_IP核,并对其进行定制化修改,以实现对LED灯的控制。从工程建立、IP核创建到硬件系统搭建和软件应用编写,提供了全面的操作指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此:   https://blog.youkuaiyun.com/qq_33486907/article/details/88289714  《AXI_01 《AXI总线系列文章》由来

目录

1.AXI_LITE_SLAVE_IP

1.1 AXI_LITE_SLAVE_IP设计

1.1.1 STEP1: 建立一个空白工程,命名为AXI_Build

1.1.2 STEP2: 利用向导建立一个axi_lite_slave的IP核模板

1.1.3  STEP3: 在AXI模板中定制LED驱动逻辑

1.1.4  STEP4: 配置IP核

1.2 AXI_LITE_SLAVE_IP使用示例

1.2.1 STEP1: 建立一个工程,命名为axi_led

1.2.2 STEP2: 导入自定义IP核

1.2.3 STEP3: 搭建硬件系统

1.2.4  STEP4: 编写软件应用



在学习并掌握了《AXI_02 AXI4总线简介(协议、时序)》内容后,可以开始设计一个基于AXI总线的IP核了,设计AXI IP核有两种方式:(1)可以按照上面的内容自行设计; (2)可以使用向导生成代码,然后在Example Design上进行定制修改;

 方式(1)可以自主可控,对代码编写要求较高,否则VIVADO开发环境不能很好的识别是否使用了AXI总线; 方式(2)向导生成的代码,开发环境可以较好的支持,但功能可能不是你需要的,需要进行定制修改; 不论是方式(1)还是方式(2)都需要对AXI总线协议有清楚的认识和了解。  本篇内容将阐述如何利用向导生成代码,并进行定制化修改,完成IP核的设计与仿真。

1.AXI_LITE_SLAVE_IP

AXI_LITE_SLAVE_IP设计是本篇内容中最为简单的内容,这里给出一个实例,直接利用IP核去完成对LED灯的控制,这里还涉及到与ARM端的配合使用;

1.1 AXI_LITE_SLAVE_IP设计

1.1.1 STEP1: 建立一个空白工程,命名为AXI_Build

       这里随便选择一个器件即可,点击NEXT; 

       点击FINISH,完成空白工程建立;

1.1.2 STEP2: 利用向导建立一个axi_lite_slave的IP核模板

随后将打开一个基于AXI_LITE总线的IP核模板工程,可以在该模板工程下对工程的功能进行修改;  模板中只是给出了一个包含4个可读可写的寄存器的例子,并没有包含任何的功能,要实现特定的功能需要自行添加代码;

1.1.3  STEP3: 在AXI模板中定制LED驱动逻辑

这里要实现一个控制LED灯的逻辑功能,具体添加的代码就不再这里给出了,可以打开对应的IP核文件进行查看,添加的代码会在文件中进行明确的注释;

把要添加的代码添加完成以后,运行一下run synthesis综合一下看看有没有错误;

1.1.4  STEP4: 配置IP核

添加所有系列,以支持在所有器件上使用;

       经过以上步骤以后,就可以在IP Catalog中看到这个IP核了,如下图:

       之后就可以在VIVADO中设计使用该IP核了;

1.2 AXI_LITE_SLAVE_IP使用示例

示例使用RAM端,通过C语言去控制LED灯;

1.2.1 STEP1: 建立一个工程,命名为axi_led

建立工程的步骤与《1.1.1 STEP1: 建立一个空白工程,命名为AXI_Build》节中相同,不再赘述,这里只给出一些关键信息;

1.2.2 STEP2: 导入自定义IP核

       在新的工程中使用自定义IP核时,需要先导入;

       VIVADO会自动导入IP核;

1.2.3 STEP3: 搭建硬件系统

       添加好ARM核后,双击开始配置,关于ARM核的配置就不再一一描述,这里只给出关键信息,具体配置可以到具体工程中进行查看;

ARM配置完成后,开始添加自定义IP;

执行完对应步骤,点击刷新Regenerate layout按钮重新布局,可以获得下图所示的系统;

       引出LED灯的端口,如下图:

       最后可以得到如图所示的系统:

       配置一下自定义IP核的基地址(不配置系统将采用默认的地址),这里将地址配置为0x4000_000,这个基地址在后面编写程序的时候要使用到,如下图:

       搭建完成以后开始输出products:

       生成系统顶层文件:

执行run implementation,如下图:

      

       执行完成以后打开IMPLEMENTED DESIGN,开始为设计分配管脚;这里分配管脚主要是为PL端4个LED灯端口分配管脚,PS端的管脚不需要分配,如下图:

       分配完管脚以后,保存时要保存.XDC约束文件,如图:

       之后,直接运行Generate Bitstream,如图:

       以上步骤就完成了系统硬件的搭建工作;

1.2.4  STEP4: 编写软件应用

首先,导出板级支持包到SDK,如图:

启动SDK

建立一个APP工程,如下所示:

操作:FILE -> NEW -> Application project

工程建立以后,可以在如下所示的文件下可以看到自定义IP核的驱动:

       之后打开helloworld.c的进行软件编写了:

       编辑代码如下:

       在VIVADO环境下将bit文件下载如SOC,如下图:

       在SDK环境下运行run as,全速运行,即可看到流水灯开始运行,如下图所示:

以上便完成了一个最为简单的自定义AXI_LITE_SLAVE_IP的使用;

 验证视频传送门:

https://v.youku.com/v_show/id_XNDA4ODY2MDcxMg==.html?x&sharefrom=android&sharekey=c323e94f5ac00126bfd808c4376ed4b23

不要急着跑,干货在后面,下一篇文章传送门在此:

AXI_04 AXI_LITE_MASTER_IP设计与验证

 https://blog.youkuaiyun.com/qq_33486907/article/details/88303243

本篇IP核源码工程和验证工程传送门在此,点击下方下载链接一:

https://download.youkuaiyun.com/download/qq_33486907/1984547

或点击下载链接二https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.22131debncNwzA&id=588531553802

推荐使用链接一,链接二即将停止服务

### AXI Lite协议在FPGA上的实现方法 AXI Lite协议是一种轻量级的存储器映射互连协议,专为低速、简单外设控制设计,广泛应用于Xilinx FPGA中,用于处理器外设(如寄存器、GPIO)之间的通信。AXI Lite协议的实现主要涉及以下几个方面: 1. **协议概述**:AXI4-Lite接口包含五组通道,分别是读地址、写地址、读数据、写数据以及写响应。AXI Full不同,AXI Lite不支持突发传输,适用于简单的读写操作。AXI Lite设计简化了协议的复杂性,使其更适合于低速外设的控制[^4]。 2. **信号描述**:AXI Lite协议的信号包括地址、数据、控制信号等。地址信号用于指定读写操作的目标地址,数据信号用于传输数据,而控制信号则用于协调主设备从设备之间的通信。具体信号包括: - **读地址通道**:`ARADDR`(读地址)、`ARVALID`(读地址有效)、`ARREADY`(读地址准备好) - **写地址通道**:`AWADDR`(写地址)、`AWVALID`(写地址有效)、`AWREADY`(写地址准备好) - **读数据通道**:`RDATA`(读数据)、`RRESP`(读响应)、`RVALID`(读数据有效)、`RREADY`(读数据准备好) - **写数据通道**:`WDATA`(写数据)、`WSTRB`(写使能)、`WVALID`(写数据有效)、`WREADY`(写数据准备好) - **写响应通道**:`BRESP`(写响应)、`BVALID`(写响应有效)、`BREADY`(写响应准备好) 3. **设计流程**:在FPGA上实现AXI Lite协议时,通常需要使用Xilinx Vivado工具链。设计流程包括: - **创建AXI IP**:通过Vivado中的IP Catalog创建AXI Lite IP,并配置其参数。 - **编写逻辑代码**:根据需求编写逻辑代码,实现主设备从设备之间的通信。 - **仿真验证**:使用Vivado的仿真工具对设计进行功能验证,确保协议的正确性。 - **综合实现**:将设计综合为门级网表,并进行布局布线,生成比特流文件。 - **下载测试**:将比特流文件下载到FPGA中,并进行实际测试。 4. **示例代码**:以下是一个简单的AXI Lite从设备的Verilog代码示例,展示了如何实现基本的读写操作: ```verilog module axi_lite_slave ( input wire aclk, input wire aresetn, // Write Address Channel input wire [31:0] s_axi_awaddr, input wire s_axi_awvalid, output reg s_axi_awready, // Write Data Channel input wire [31:0] s_axi_wdata, input wire [3:0] s_axi_wstrb, input wire s_axi_wvalid, output reg s_axi_wready, // Write Response Channel output reg [1:0] s_axi_bresp, output reg s_axi_bvalid, input wire s_axi_bready, // Read Address Channel input wire [31:0] s_axi_araddr, input wire s_axi_arvalid, output reg s_axi_arready, // Read Data Channel output reg [31:0] s_axi_rdata, output reg [1:0] s_axi_rresp, output reg s_axi_rvalid, input wire s_axi_rready ); reg [31:0] reg_data; // Write Address Channel always @(posedge aclk) begin if (!aresetn) begin s_axi_awready <= 1'b0; end else begin if (s_axi_awvalid && s_axi_awready) begin s_axi_awready <= 1'b0; end else if (s_axi_awvalid) begin s_axi_awready <= 1'b1; end end end // Write Data Channel always @(posedge aclk) begin if (!aresetn) begin s_axi_wready <= 1'b0; end else begin if (s_axi_wvalid && s_axi_wready) begin s_axi_wready <= 1'b0; end else if (s_axi_wvalid) begin s_axi_wready <= 1'b1; reg_data <= s_axi_wdata; end end end // Write Response Channel always @(posedge aclk) begin if (!aresetn) begin s_axi_bvalid <= 1'b0; s_axi_bresp <= 2'b00; end else begin if (s_axi_bready && s_axi_bvalid) begin s_axi_bvalid <= 1'b0; end else if (s_axi_wvalid && s_axi_wready) begin s_axi_bvalid <= 1'b1; s_axi_bresp <= 2'b00; // OKAY response end end end // Read Address Channel always @(posedge aclk) begin if (!aresetn) begin s_axi_arready <= 1'b0; end else begin if (s_axi_arvalid && s_axi_arready) begin s_axi_arready <= 1'b0; end else if (s_axi_arvalid) begin s_axi_arready <= 1'b1; end end end // Read Data Channel always @(posedge aclk) begin if (!aresetn) begin s_axi_rvalid <= 1'b0; s_axi_rresp <= 2'b00; end else begin if (s_axi_rready && s_axi_rvalid) begin s_axi_rvalid <= 1'b0; end else if (s_axi_arvalid && s_axi_arready) begin s_axi_rvalid <= 1'b1; s_axi_rresp <= 2'b00; // OKAY response s_axi_rdata <= reg_data; end end end endmodule ``` ### AXI Lite协议的应用案例 1. **GPIO控制**:AXI Lite协议常用于控制GPIO(通用输入输出)模块。通过AXI Lite接口,处理器可以读取GPIO的状态或设置GPIO的输出值,实现对外部设备的控制。 2. **寄存器访问**:AXI Lite协议适用于需要频繁访问寄存器的应用场景。例如,在FPGA中实现一个寄存器组,通过AXI Lite接口,处理器可以读取或写入这些寄存器,实现对FPGA内部逻辑的控制。 3. **传感器数据采集**:AXI Lite协议可以用于连接传感器模块,处理器通过AXI Lite接口读取传感器的数据,实现数据采集和处理。 4. **配置管理**:AXI Lite协议可以用于配置和管理FPGA中的各种模块。例如,通过AXI Lite接口,处理器可以配置FPGA中的ADC(模数转换器)或DAC(数模转换器)模块的参数。 5. **调试接口**:AXI Lite协议可以作为调试接口,用于监控FPGA内部的状态。通过AXI Lite接口,处理器可以读取FPGA内部的调试寄存器,帮助开发者进行调试和故障排查。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值