AXI-Lite总线及其自定义IP核使用分析总结

  ZYNQ的优势在于通过高效的接口总线组成了ARM+FPGA的架构。我认为两者是互为底层的,当进行算法验证时,ARM端现有的硬件控制器和库函数可以很方便地连接外设,而不像FPGA设计那样完全写出接口时序和控制状态机。这样ARM会被PL端抽象成“接口资源”;当进行多任务处理时,各个PL端IP核又作为ARM的底层被调用,此时CPU仅作为“决策者”,为各个IP核分配任务;当实现复杂算法时,底层算法结构规整可并行,数据量大,实时性要求高,而上层算法则完全相反,并且控制流程复杂,灵活性高。因此PL实现底层算法后将运算结果交给PS端软件后续处理是非常高效的。

  因此PS与PL端数据交互是至关重要的,在传输数据量小的控制 配置初始化等应用场合下无疑会选择简单的AXI-Lite总线,以下对总线接口 自定义IP操作及使用注意事项加以说明。打开Vivado新建工程,选择主菜单栏Tools选项下的Create and package new IP...

  选择创建新的AXI4外设可以自动生成总线接口逻辑

  采用AXI-Lite总线的Slave模式,只有寄存器数量是可修改的。注意数据位宽固定32bit,计算机中数据以字节(8bit)为单位存储,因此各个寄存器地址的偏移量为4.这一点在写软件时会有所体现。

  选择编辑IP,打开的工程由顶层Wrapper和AXI-Lite总线接口逻辑组成。关闭自动弹出的IP封装向导,当添加好用户自定义逻辑后再重新封装,否则封装的仅仅是软件生成的接口逻辑。接口比较多,分为写通道和通道,而每个通道基本逻辑又由地址通道和数据通道组成。除了以上四个通道外,写通道包含应答通道以返回CPU确认信息。每个接口以S_AXI_开头,之后AW代表地址写,W代表数据写,AR代表地址读,R代表数据读,B代表响应。关于AXI总线的基本特性在之前的博文中已有阐述,无非就是READY和VLD信号的“握手”。因此这五个核心信号包括VALID DATA和READY。

  从上述代码可以看出,只有在写地址通道和写数据通道均握手成功时才能有效写入寄存器。

  根据参数声明和寄存器选择与写操作逻辑可知,是根据地址[5:2]这四位来判断写入哪一个寄存器。如:

  地址0,即6‘b0000_00

  地址4,即6‘b0001_00

  地址8,即6‘b0010_00

  地址12,即6‘b0011_00

  因此[5:2]部分依次是0 1 2 3,从而验证了之前地址偏移量是4的观点。这里的slv_regx信号就是我们需要送入自定义逻辑的控制信号了。

  上面是读操作核心逻辑,当从机收到有效的读操作地址且准备好后,会将寄存器数据送回到主机。换句话说读操作读到的数据仅是单纯写入的控制数据,并不是自定义逻辑的处理结果。所以读操作要将489行开始的右侧数据源更换成自定义逻辑处理后有效数据。如:reg_data_out <= user_module_dout;

  内部添加的自定义逻辑可以直接写在该模块内,也可以例化自定义模块或IP核。最后封装当前工程得到支持AXI-Lite总线的自定义IP核。

  打开需要例化刚才产生IP核的工程,选择Project Setting -> IP -> Respository Manger添加IP核路径或,在block design或 IP Catalog中调用。

原文地址:https://www.cnblogs.com/moluoqishi/p/9158833.html

时间: 2024-10-08 19:39:04

AXI-Lite总线及其自定义IP核使用分析总结的相关文章

一步一步学ZedBoard &amp; Zynq(四):基于AXI Lite 总线的从设备IP设计 转载

文章来源 http://www.cnblogs.com/surpassal/archive/2012/10/09/Zynq_Lab4.html 本小节通过使用XPS中的定制IP向导(ipwiz),为已经存在的ARM PS 系统添加用户自定IP(Custom IP ),了解AXI Lite IP基本结构,并掌握AXI Lite IP的定制方法,为后续编写复杂AXI IP打下基础.同时本小节IP定制方法同样适用于MicroBlaze处理系统. 本小节定制的是简单LED的IP,只有一个数据寄存器,向其

【OpenHW12参赛手记】ZedBoard-自定义IP核实现+PS成功调用【详细步骤+流程介绍+源码】 转载

文章来源 图片无法复制,请看原文 http://www.eefocus.com/jefby1990/blog/13-03/291975_490bc.html [OpenHW12参赛手记]ZedBoard-自定义IP核实现+PS成功调用[详细步骤+流程介绍+源码] 2013-03-07 17:56:30 分享: (图片请点击查看原图) 软件环境:WIN7_64 + ISE 14.4 (system_edition) 硬件:Zedboard.USB-Cable线 搭建图: 经过前几天的学习,查看数据

自定义AXI总线形式SPI接口IP核,点亮OLED

一.前言 最近花费很多精力在算法仿真和实现上,外设接口的调试略有生疏.本文以FPGA控制OLED中的SPI接口为例,重新夯实下基础.重点内容为SPI时序的RTL设计以及AXI-Lite总线分析.当然做些项目时可以直接调用Xilinx提供的SPI IP核,这里仅出于练习的目的考虑. 二.接口时序分析 本项目用的OLED型号为UG-2832HSWEG04,核心控制器是SSD1306.该芯片支持并口.I2C以及SPI接口,这里采用4线SPI作为数据总线.4线SPI接口包括: SCLK:串行时钟,SSD

自定义AXI-IP核(转)

目的: 自定义一个IP核,通过AXI总线与ARM系统连接 环境: Win7 32bit Vivado2014.4.1 Xilinx sdk2014.4 开发板: Zc702 第一步: 新建一个自定义的HDL模块,本实验新建一个16位加法器,保存为test.v,代码如下 module test( input [15:0] a, input [15:0] b, input clk, output reg [15:0] sum ); [email protected](posedge clk) beg

Lattice 的 Framebuffer IP核使用调试笔记之IP核生成与参数设置

本文由远航路上ing 原创,转载请标明出处. 这节笔记记录IP核的生成以及参数设置. 先再IP库里下载安装Framebuffer 的ipcore 并安装完毕. 一.IP核的生成: 1.先点击IP核则右边会出现生成对话框: 按箭头指示顺序进行设置:要设置生成ip核的路径(可以新建一个文件夹ipcore来放置IP核,若有多个IP核则在ipcore下分别建立文件夹),IP核的名字,以及语言的类型:verilog或VHDL.最后点击Customize. 2. 在上一步设置之后会出现下面的设置界面,先设置

Quartus II 与ModelSim-Altera联合仿真FFT IP核之FFT IP核分析

FFT IP Core Features 参数设置 FFT IP核有4种模式,分别为: 突发模式(Burst): 缓存突发模式(Buffered Burst): 流模式(Streaming): 可变流模式(Variable Streaming): 前3中模式运算速度依次增大,占用资源也依次增加,第4种模式(Variable Streaming)可以用于在线改变FFT的大小.速度和流模式差不多,资源占用更多. 分为基本配置和高级配置两种,基本配置包括配置FFT ip核的变换长度,FFT还是IFFT

Xilinx Vivado的使用详细介绍(5):调用用户自定义封装的IP核

Zedboard OLED Display Controller IP v1 介绍 Author:zhangxianhe 本文档提供了快速添加,连接和使用ZedboardOLED v1.0 IP内核的说明.运行在ARM处理器系统上的测试应用程序用于通过其驱动程序的功能与IP进行通信. Vivado设计套件被用作开发环境.硬件验证是在Zedboard上完成的,然而,这个IP可以很容易地应用于其他主板或嵌入式系统. 平台 硬件:Zedboard xc7z020clg484-1 软件:Vivado 2

FPGA初体验之用户IP核封装

实验平台:Vivado 2015 开发板:Xilinx ZYNQ-7020 内容:创建和封装用户IP核流程 第一步:打开Vivado 2015,新建工程. 第二步:更改工程名和存放路径,点击下一步. 第三步:选择RTL工程,点击下一步. 第四步:点击创建文件,输入IP核名称(自定义),点击OK. 点击下一步. 点击下一步. 第五步:选择对应的芯片.我的开发板用的芯片是xc7z020clg-1,点击下一步. 点击完成. 直接点击OK. 第六步:编辑myip.v 代码:myip.v 1 `times

FFT IP核调用与仿真之SCALE压缩因子设置

关于FFT IP核的配置,网上有很多相关的资料可以参考,但是唯独涉及到scaled压缩因子设置这个参数,资料却非常匮乏,这是个什么参数,应该整么设置,设置后对结果输出会有什么影响,整样才能知道它设置的合理不合理? 先来看一下官方说明手册里关于scaled的说明: 翻译过来就是:对于Pipelined Streaming I/O结构,将临近的一对基2阶组在一起,即阶0和阶1为组0,阶2和阶3为组1,阶4和阶5为组2等等.例如数据长度N=1024,Scale_SCH = [10 10 00 01 1