版主: 51FPGA

分享到:
共1条 1/1 1   

基于AXI的自定义IP设计

    [您是本帖的第2129位阅读者]
xilinx论坛
我是MM
高级会员

最后登陆时间:2015-03-19 10:58:07

直达楼层
1# 发表于 2015-07-01 10:02:45

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中建立工程









自定义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相当于为工程师提供了一个模板,只需要添加相应的功能代码就可完成设计,这样大大减少了工作量,工作效率得到提高


下面来看一下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


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

两寄存器映射

  

寄存器

  
  

使能信号

  
  

对应地址映射

  
  

功能

  
  

reg0

  
  

BUS2IP_RdCE=10

  
  

C_BASEADDR

  
  

只读

  
  

reg1

  
  

BUS2IP_WrCE=01

  
  

C_BASEADDR+0x4

  
  

只写

  

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


reg1是控制LED灯输出功能,因此是一个写寄存器操作

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


系统建立完成后,在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

一切就绪之后,通过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’,并读取数据应答这次写操作


共1条 1/1 1   
快速回复主题
  • 匿名不能发帖!请先 [ 登陆 注册 ]