在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 12155|回复: 12

[活动] 【zynq征文】基于AXI的自定义IP设计

[复制链接]
发表于 2013-1-31 20:32:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 huxiaokai2005 于 2013-2-1 14:56 编辑

Zynq芯片PSPL部分通过AXI总线进行交互,并且PS部分的IP也可通过AXI总线挂载到ARM核上,本节介绍一下如何设计基于AXI的自定义IP

AXI总线介绍

AXIAdvanced eXtensible Interface)总线协议是ARM公司提出的AMBAAdvanced Microcontroller BusArchitecture)协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。它的地址/控制和数据相位是分离的,支持不对齐的数据传输,同时在突发传输中,只需要首地址,同时分离的读写数据通道、并支持显著传输访问和乱序访问,并更加容易就行时序收敛。

AXI总线协议是在2003AMBA3.0版本中首次提出的,包含AXIAXI-Lite的第一版本。2010年提出的AMBA4.0版本中包含了AXIAXI-Lite的第二版本,并且新加入了AXI-Stream

ARM官方提供了对AXI总线规范的详细介绍,以下为相关资料:

AMBAAXI Protocol Specification v2.0

AMBAAXI4-Stream Protocol Specification V1.0

Xilinx支持AMBA4.0中的AXISpartan®-6Virtex®-6及以后系列器件支持AXI总线协议,支持包含AXI-LiteAXIAXI-Stream这三种模式,其中AXI-Lite模式主要处理简单应用,通过简单协议可以实现基于地址映射的传输,因其一个地址只对应一个数据的读写,比较适用于控制寄存器和状态寄存器读写应用;AXI模式可以处理需要数据吞吐量比较高的场合,它也是基于地址映射的传输,因其支持突发数据传输,最高支持一个地址256个数据的突发传输;AXI-Stream模式是基于流数据的单向高速传输,不是基于地址映射的,因此并没有突发数据量大小限制。

XilinxAXI总线支持提供了许多文档资料:

AXI Specification

AXI-LiteIPIF Specification for Control/Peripheral devices

AXI-LiteIPIF Specification for burst capable memory mapped devices

基于AXI总线的自定义IP设计

Xilinx中支持的AXI总线协议有三种模式:AXI_LiteAXIAXI_Stream

AXI-Lite模式主要用于处理简单操作,如功能寄存器或者控制寄存器的读写,本文中以一简单设计为例,做一个读取DIP拨码开关状态值和控制LED灯的自定义IP。由于AXI_Lite模式的协议比较简单,在介绍协议的同时主要介绍一下在Microblaze系统中设计自定义IP的方法,而在AXIAXI-Stream这部分就不再重复说明。

自定义外设设计流程:

第一步:在ISE Project Navigator中建立工程

image001.jpg

1 新建工程

image004.jpg

2 设置对应zynq的选项

第二步,建立基于zynq系统

image005.jpg

3

image007.jpg

4 新建zynq系统

image008.jpg

5 建立基于AXI总线的zynq系统

image011.jpg

6 加载基于Zed板的zynq芯片配置

image012.jpg

7 建立完成的zynq系统

第三步,加入自定义外设

image014.png

8

image017.jpg

9 设置自定义外设名称

image018.jpg

10 选择AXI4-Lite

image021.jpg

11 设置2个寄存器,因为需要控制DIPLED

image022.jpg

12 选择需要的信号

image024.jpg

13 点击Finish完成设计

image027.jpg

14 IP列表中出现设计的IPUSER_LED

image028.jpg

15 点击挂载到zynqARM核上


AXI-Lite IP功能设计

image030.jpg

17 自定义IP路径

自定义IP设计完后,需要为其编写功能代码,在如图17路径中,有一个vhdl文件夹,自定义IP设计生成的HDL代码默认是由VHDL编写的。其中有两个文件:user_led.vhduser_logic.vhd,如图18所示为AXI-Lite IP接口信号图,其中文件user_led.vhd实现AXI-Lite IPIF模块的功能,文件user_logic.vhd实现User IP Design模块的功能,因此自定义IP的功能代码主要在user_logic.vhd文件中编写。此处的设计Xilinx就比Altera更人性化了,在AlteraNiosII自定义外设设计时,类似axi_lite_cusip.vhduser_logic.vhd的接口文件都需要工程师自己编写,而Xilinx相当于为工程师提供了一个模板,只需要添加相应的功能代码就可完成设计,这样大大减少了工作量,工作效率得到提高。

image032.jpg

18 AXI-LiteIP接口信号图

下面来看一下user_logic.vhd里面有什么奥秘,如图19所示为模块参数,其中参数C_NUM_REG表示寄存器的数量,在本设计中设置了两个,一个用于读取DIP拨码开关状态值,另一个用于控制LED灯;如图20所示为模块接口信号,其中BUS2IP_**表示从AXI-Lite总线输入到IP的信号,包含时钟信号BUS2IP_CLK、复位信号BUS2IP_Resetn、数据信号Bus2IP_Data、字节使能信号Bus2IP_BE、读使能信号Bus2IP_RdCE、写使能信号Bus2IP_WrCE;而IP2BUS_**表示从IP输出给AXI-Lite总线的信号,包含数据信号IP2Bus_Data、读确认信号IP2Bus_RdAck、写确认信号IP2Bus_WrAck、错误确认信号IP2Bus_Error

image034.jpg

19 模块参数

image036.jpg

20 模块接口信号

功能模块需要加入的功能为两部分,对应两个寄存器,如表1所示为两个寄存器的映射。

1 两寄存器映射

  

寄存器

  
  

使能信号

  
  

对应地址映射

  
  

功能

  
  

reg0

  
  

BUS2IP_RdCE=10

  
  

C_BASEADDR

  
  

只读

  
  

reg1

  
  

BUS2IP_WrCE=01

  
  

C_BASEADDR+0x4

  
  

只写

  

reg0是读取DIP拨码开关状态值功能,因此是一个读寄存器操作,首先需要加入DIP拨码开关的输入端口,如图21所示,相关功能代码如图22所示。

image038.jpg

21 加入端口

image040.jpg

22 读操作功能代码

reg1是控制LED灯输出功能,因此是一个写寄存器操作,加入的LED输出端口如图21所示,相关功能代码如图23所示。

image042.jpg

23 写操作功能代码
功能代码编写完成后,将AXI_LITE_CUSIP加入到系统中,如图24所示,自定义的IP是连接到AXI-Lite总线上的。

image043.jpg

24 USER_LED总线连接

系统建立完成后,在ISE中进行编译生成比特流文件,然后在SDK软件中编写相应软件代码,代码如图25所示,主要实现功能是读取DIP状态值,然后将读取得到的DIP状态值通过LED输出,其中读取DIP状态值通过读取reg0得到,reg0的地址为XPAR_AXI_LITE_CUSIP_0_BASEADDR;而控制LED输出通过写reg1得到,reg1的地址为XPAR_AXI_LITE_CUSIP_0_BASEADDR +0x4

image045.jpg

25 SDK软件代码

一切就绪之后,通过ISIM仿真,查看自定义IP工作状态,如图26所示为读操作,当bus2ip_rnw=’1’bus2ip_rdce=”10”时,表示AXI-Lite总线请求一次读操作,而自定义IPip2bus_rdack’1’,将数据赋值给ip2bus_data应答这次读操作;如图27所示为写操作,当bus2ip_rnw=’0’bus2ip_wrce=”01”时表示AXI-Lite总线请求一次写操作,而自定义IPip2bus_wrack’1’,并读取数据应答这次写操作。

image047.jpg

26 读操作

image049.jpg

    图27 写操作
 楼主| 发表于 2013-2-1 14:57:21 | 显示全部楼层
自己先顶一个!
发表于 2013-2-8 22:01:43 | 显示全部楼层
学习了,谢了
发表于 2013-4-7 14:39:59 | 显示全部楼层
很不错,谢谢楼主
发表于 2013-7-15 09:54:47 | 显示全部楼层
回复 1# huxiaokai2005


   請教自訂ip如有中斷需求,如何設定? 之前PLB bus 可勾選,AXI找不到可選取的地方?
謝謝!
发表于 2013-10-13 07:50:44 | 显示全部楼层
我想自定义一个IP核,只需要从PS端对PL端的一个双口RAM进行读数的操作,应该来做这个IP核呢?也就是将PS端的读写总线信号引出到PL端,这样就可以接到RAM的端口上
发表于 2014-2-6 07:27:51 | 显示全部楼层
好东西,顶起来
发表于 2014-2-6 07:32:01 | 显示全部楼层
好东西,顶起来
发表于 2015-6-5 17:03:25 | 显示全部楼层
学习,非常感谢
发表于 2015-10-28 15:35:12 | 显示全部楼层
为什么读取DIP状态值通过读取reg0得到的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 22:38 , Processed in 0.029733 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表