前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AXI-Lite 自定义IP

AXI-Lite 自定义IP

作者头像
碎碎思
发布2020-10-30 11:55:35
8360
发布2020-10-30 11:55:35
举报
文章被收录于专栏:OpenFPGA

AXI-Lite 自定义IP

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

实现框图:

图4‑50 自定义IP应用框图

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

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

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

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

代码4‑7 自定义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];

图4‑51 系统实现框图

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

图4‑52 Vivado中实现的BD框图

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

NOW现在行动!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenFPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档