热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自定义_自定义AXIIP核(转)

本文由编程笔记#小编为大家整理,主要介绍了自定义AXI-IP核(转)相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了自定义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)

 begin

  sum  <= a +b ;

 end

endmodule

 

第二步:

         新建一个IP核,打开vivado,在tools中选中新建IP核

 

 技术分享图片

点击Next,

技术分享图片

 

选中新建AXI外设选项,

技术分享图片

 

填好信息,点击next,

技术分享图片

 

填好参数,这里就用默认的即可,

技术分享图片

 

然后点击finish。

 

之后会打开一个这个新建的IP核工程,查看

技术分享图片

 

新建的时候是没有test.v加入到工程的,双击myip_v1_0_AXI_inst-myip_v1_0_S00_AXI.v

 技术分享图片

 

上面这段代码,主要就是定义了使用的参数,也是我们在新建IP核预先设置的参数,数据宽32位,地址宽4位;

 

在参数设置之后,这段注释就是让用户可以添加需要的端口了,在本次实验中是不需要添加的;

 技术分享图片

 

 

 

看接下来的程序:

技术分享图片

 

 

系统默认的第一个输入端口S_AXI_ACLK为时钟,然后S_AXI_ARESETN是复位;

接下来S_AXI_AWADDR是写地址,后面暂略,

从注释就可以看到是安全级别的选项,这个是AXI的标准后续再谈;

还有一个端口S_AXI_WDATA就是写入的数据;

 

部分端口这里就不说明了,可以直接看注释,直接看马上用到的几个端口:

技术分享图片

S_AXI_ARADDR是读IP核的地址,S_AXI_RDATA是被读的寄存器;

 

接下来看

技术分享图片

 

新建的时候会看到4个slv_reg寄存器,实验中又添加了一个

reg [C_S_AXI_DATA_WIDTH-1:0]    slv_reg4;

又添加了一条:

wire   [C_S_AXI_DATA_WIDTH-1:0] sumout;

主要是为了把test.v这个模块添加进来;

 

这几个寄存器在

 

 技术分享图片

这几条代码显示,在往自定义的IP核内写数据是会将数据写到刚才定义的几个寄存器内的,当然这些寄存器用户都是可以自己改的,这个实验就不更改了;

那么,用户是往哪一个地址写数据呢?那么看这里:

技术分享图片

 

根据上面的定义,

 

ADDR_LSB=2,OPT_MEM_ADDR_BITS =1;

也就是往地址段axi_awaddr[3:2]部分写的话就会将数据写入这4个寄存器,同理在读数据的时候也是,具体看代码即可。

 

前面看到是用户写数据及其IP核接收到的数据寄存器,下面是IP核的输出数据,也就是用户在读IP核时被读的寄存器:

技术分享图片

 

这里在实验中,做了一些更改,将slv_reg0,变为了slv_reg4;

 

最后在用户逻辑部分,添加例化的模块。

 技术分享图片

然后

技术分享图片

到这界面之后,查看左侧的检查选项是否都已经打勾,没打勾的话选中哪一个选项做一些简单确认即可完成,最后打包IP核,保存为zip的格式。

 

将IP核工程关闭,新建一个系统文件或者打开一个example工程,在工程内添加新建的ip核,当然需要将新建的ip核包含在工程内,如图:

 

 技术分享图片

在工程内添加自己的IP之后,自动分配一下地址:

 

 技术分享图片

然后确认无误,,生成bitstream。

稍等片刻之后,没有报错,然后export hardware,之后再launch SDk,

 

 技术分享图片

打开SDK后,需要新建一个application,

 

用最简单的helloworld工程样板即可,然后修改代码:

#include 

#include "platform.h"

#include "xbasic_types.h"

#include "xparameters.h"

#include "xil_io.h"

 

Xuint32*baseaddr_p=(Xuint32*)XPAR_MYIP_0_S00_AXI_BASEADDR;

 

int main()

{

   init_platform();

 

   print("Hello World
");

   print("My_IP Test.....
");

   //*(baseaddr_p+0)=0x00020003;

   Xil_Out32(XPAR_MYIP_0_S00_AXI_BASEADDR,0x11111111);

   Xil_Out32(XPAR_MYIP_0_S00_AXI_BASEADDR+0x4,0x2);

   Xil_Out32(XPAR_MYIP_0_S00_AXI_BASEADDR+0x8,0x990);

   Xil_Out32(XPAR_MYIP_0_S00_AXI_BASEADDR+0xc,0x100);

   u32r0,r1,r2,r3;

   r0=Xil_In32(XPAR_MYIP_0_S00_AXI_BASEADDR);

   r1=Xil_In32(XPAR_MYIP_0_S00_AXI_BASEADDR+0x4);

   r2=Xil_In32(XPAR_MYIP_0_S00_AXI_BASEADDR+0x8);

   r3=Xil_In32(XPAR_MYIP_0_S00_AXI_BASEADDR+0xc);

   xil_printf("r0=%0X r1=%0X r2=%0Xr3=%0X 
",r0,r1,r2,r3);

   cleanup_platform();

   return0;

}

 

添加的xparameters.h头文件包含了自定义的IP的系统地址:

 

 技术分享图片

编译之后,先将bit文件下载到fpga,然后run,看到

技术分享图片

 

好了,实验结束。

 

转载:http://blog.csdn.net/shushm/article/details/49536845




 


分类: Xilinx MicroBlaze



推荐阅读
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 如何使用Ping命令来测试网络连接?当网卡安装和有关参数配置完成后,可以使用ping命令来测试一下网络是否连接成功。以winXP为例1、打开XP下DOS窗口具体操作是点击“开始”菜 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文详细介绍了如何使用 HTML 和 CSS 对文件上传按钮进行样式美化,使用户界面更加友好和美观。 ... [详细]
  • QNX 微内核(procnto-instr)的监测版本内置了高级跟踪与分析工具,能够实现实时系统监控。该模块适用于单处理器及多处理器系统。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 V2017.11
    雨林木风 GHOST XP SP3 经典珍藏版 V2017.11 ... [详细]
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
author-avatar
琳琳小朋友m
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有