AXI-Lite 自定义IP

原创
10/19 08:00
阅读数 60



AXI-Lite 自定义I P


目的:通过嵌入式软核或者硬核通过AXI_Lite接口(Master)控制FPGA端引脚的GPIO。

实现框图:


450 自定义IP应用框图

按照AXI互联机制我们知道,我们的自定义IP是通过AXI_Interconnect连接到Master端,整体的框图也比较简单,为了验证方便我们只按照红色线路径进行测试。

自定义的IP也比较简单,是直接在上面两节的基础上修改几个参数即可。

我们知道软核或者硬核通过接口向自定义IP写数据时,是通过slv_reg寄存器向总线上写数据的,为了方便计算基地址,我们选用slv_reg0寄存器赋值给GPIO。

通过4‑49知道,IP的顶层接口分成两部分,一个是AXI_Lite接口,这部分上面两节有介绍,一个是GPIO接口,所以需要在顶层文件中增加这一接口。

代码47 自定义IP顶层接口定义

1.  module GPIO_LITE_ML #  

2.(  

3.    // Users to add parameters here  

4.  

5.    // User parameters ends  

6.    // Do not modify the parameters beyond this line  

7.  

8.  

9.    // Parameters of Axi Slave Bus Interface S00_AXI  

10.    parameter integer C_S00_AXI_DATA_WIDTH  = 32,  

11.    parameter integer C_S00_AXI_ADDR_WIDTH  = 4  

12.)  

13.(  

14.    // Users to add ports here  

15.       output wire [3:0]GPIO_LED,  

16.    // User ports ends  

17.    // Do not modify the ports beyond this line  

18.  

19.  

20.    // Ports of Axi Slave Bus Interface S00_AXI  

21.    input wire  s00_axi_aclk,  

22.    input wire  s00_axi_aresetn,  

23.    input wire [C_S00_AXI_ADDR_WIDTH-1 : 0] s00_axi_awaddr,  

24.    input wire [2 : 0] s00_axi_awprot,  

25.    input wire  s00_axi_awvalid,  

26.    output wire  s00_axi_awready,  

27.    input wire [C_S00_AXI_DATA_WIDTH-1 : 0] s00_axi_wdata,  

28.    input wire [(C_S00_AXI_DATA_WIDTH/8)-1 : 0] s00_axi_wstrb,  

29.    input wire  s00_axi_wvalid,  

30.    output wire  s00_axi_wready,  

31.    output wire [1 : 0] s00_axi_bresp,  

32.    output wire  s00_axi_bvalid,  

33.    input wire  s00_axi_bready,  

34.    input wire [C_S00_AXI_ADDR_WIDTH-1 : 0] s00_axi_araddr,  

35.    input wire [2 : 0] s00_axi_arprot,  

36.    input wire  s00_axi_arvalid,  

37.    output wire  s00_axi_arready,  

38.    output wire [C_S00_AXI_DATA_WIDTH-1 : 0] s00_axi_rdata,  

39.    output wire [1 : 0] s00_axi_rresp,  

40.    output wire  s00_axi_rvalid,  

41.    input wire  s00_axi_rready  

42.);  

同时这一接口也需要传到实现接口协议的子module中,所以在例化子module时也需要增加这一语句,具体可以看源码。

子module中也比较简单只需要在最后面增加下面语句即可实现需要的功能:

  assign  GPIO_LED[3:0] = slv_reg0[3:0];

451 系统实现框图

然后将自定义的IP打包封装好,就可以在Vivado中调用了,实现的BD如下:

452 Vivado中实现的BD框图

最后编写约束文件,分配好引脚,综合编译、布局布线产生bit流文件,导出到SDK,编写SDK文件通过ARM硬核的AXI_GP_Master控制FPGA端的引脚即可,这部分不过多赘述,直接查看工程源码即可。


NOW


推荐阅读


AXI总线详解

AXI总线详解-总线、接口以及协议

AXI接口协议详解-AXI总线、接口、协议

AXI协议中的通道结构

AXI总线详解-AXI4读写操作时序及AXI4猝发地址及选择

高级FPGA设计技巧!多时钟域和异步信号处理解决方案

AXI总线详解-AXI4交换机制

计算机基础知识总结与操作系统.PDF

IC技术圈期刊 2020年第09期

ZYNQ中DMA与AXI4总线-DMA简介
AXI总线详解-不同类型的DMA

不了解FPGA工作原理?看看世界第一颗FPGA芯片级拆解

几种应用DMA的典型应用

AXI_lite代码简解-查看源码

AXI_lite代码简解-AXI-Lite 源码分析


点击上方字体即可跳转阅读哟






本文分享自微信公众号 - OpenFPGA(OpenFPGA)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部