0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Xilinx生成的读写函数

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-07-27 09:17 次阅读

在一个项目中,当你使用microblaze作为控制器来进行系统调度的时候,一般是建议将所有模块封装成AXI形式的IP核,这样好管理,也容易调试。不过在初期的时候是不建议这样做的,因为你的模块并没有完全被验证是没问题的,所以还是使用.v文件,等后面这一功能验证通过,再把它封装成IP核形式。

1. AXI IP核简介

用过Microblaze或者看例程的人肯定都知道,Xilinx提供了很多AXI形式的IP核,像常用的UART、IIC、SPI等IP核。我们只要把他们在画布里调出来,然后使用自动连接形式,便能把对应接口连接起来,接着在软件上调用其相应的函数便可以工作了。

9a2bfe9e-0d46-11ed-ba43-dac502259ad0.jpg

但是当我们自己封装了一个AXI形式的IP核后,又该怎么去使用呢?这不是官方IP,没有相应的函数呀?不知道大家是否有印象,上一篇文章介绍IP封装的时候说过,封装成AXI形式的IP核,会生成一些东西,如下图所示,这个可千万别去删,大有用处的。

9a3dff4a-0d46-11ed-ba43-dac502259ad0.png

里面的drivers这个文件夹其实放的就是AXI的驱动函数。例如我们生成一个AXI的IP核(红框处)

9a51fba8-0d46-11ed-ba43-dac502259ad0.jpg

编译通过后生成软核工程,可以看到,我们自己加入的IP核是有被关联进来的。在“Axi_Device_DNA_v1_0”这个文件夹下包含有.c和.h文件,这个就是我们添加的IP核对应的驱动,它和iic、定时器、uart等IP核在同一个库里。这些都是IP核必须使用到的函数文件。

9a5dbe70-0d46-11ed-ba43-dac502259ad0.png

2. AXI IP核使用

看见自制的IP核都能给你生成驱动函数是不是觉得很高级,很爽呢!如果这样想那你就确实too young too simple了。打开它的.c和.h文件给你看看吧。

9a7999ba-0d46-11ed-ba43-dac502259ad0.jpg

寄存器定义

9a84b566-0d46-11ed-ba43-dac502259ad0.png

获取DNA数据高位、低位数据的函数

9aa30372-0d46-11ed-ba43-dac502259ad0.jpg

读写函数

是的,就只有这些,没有了!所以别以为能像IIC之类的IP核一样,会给你很全的函数,让你一次写一大串或读一大串数据的,如果真能根据不同IP功能给你定制不同函数,那就智能到逆天了···

不过人家都给你读写寄存器的函数和寄存器的定义,也就已经够了,都说下层基础决定上层建筑,有了这两个基本函数,你想自己做什么功能还不行?MCU控制的本质不也就是读写对应的寄存器,偷懒也得有个度的哈哈~就像这样,自己封装个函数就行了。

9ab2ee86-0d46-11ed-ba43-dac502259ad0.png

当然,你也可以不用Xilinx给你生成的读写函数,自己写也是可以的,不过不建议这么做,毕竟人家都给了,一方面可以给你节省编码时间,另一方面也保证了函数的稳定性,避免开发出错。

3. 总结

在封装成AXI IP 核时会有一个顶层的AXI时序代码,这个用户一定要熟悉,并且对应的寄存器要设置好,这样使用起来才不会有错误。不然容易出现寄存器读写不成功或者操作错寄存器导致数据不对。总之还是一句话,实践出真知,想了解深入得去用了才知道才会使用。

审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5304

    浏览量

    119902
  • Xilinx
    +关注

    关注

    71

    文章

    2160

    浏览量

    120914
  • 函数
    +关注

    关注

    3

    文章

    4298

    浏览量

    62350

原文标题:使用MicroBlaze调用AXI IP核

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TLV320AIC3263 i2c无法进行通信,通过i2c的读写函数读写寄存器失败怎么解决?

    麻烦帮忙分析下以下问题的原因 1、i2c无法进行通信,通过i2c的读写函数(系统提供),读写寄存器失败: 写寄存器,返回-5: 读寄存器:都是251 2、codec上电,gpio拉不动
    发表于 10-28 07:32

    闪存随机读写与连续读写哪个重要

    闪存随机读写与连续读写各有其重要性,具体取决于应用场景和需求。 随机读写的重要性 延迟小,响应快 : 闪存(尤其是SSD)的随机读写性能通常较强,因为其延迟小且没有机械硬盘的寻道时间。
    的头像 发表于 10-12 11:44 273次阅读

    EEPROM读写程序详解

    EEPROM(Electrically Erasable Programmable Read-Only Memory)读写程序的详解涉及多个方面,包括EEPROM的基本工作原理、读写流程、编程接口、代码示例以及注意事项等。以下是对EEPROM
    的头像 发表于 09-05 12:32 1187次阅读

    STM32CubeIde生成的工程,使用printf函数没有调用_write和__io_putchar函数,为什么?

    。而且printf函数的返回值与字符串的长度相等。 以前用STM32CubeIde生成的工程也使用了同样的单板调试,也使用串口输出,没有任何问题。这次不知道为啥会这样。printf函数又没有给源码
    发表于 05-24 06:13

    stm32f767zg外扩sram第一次读写没问题,再次直接死机的原因?

    代码是用cubemx生成的,自己加了一个读写测试,第一次可以连续的读写外扩的整片内存,也可以只读写一个地址,都可以成功,之后再次读写程序就死
    发表于 04-16 06:13

    Xilinx fpga芯片系列有哪些

    Xilinx FPGA芯片拥有多个系列和型号,以满足不同应用领域的需求。以下是一些主要的Xilinx FPGA芯片系列及其特点。
    的头像 发表于 03-14 16:24 3009次阅读

    函数指针与回调函数的应用实例

    通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数函数指针可以像一般函数一样,用于调用函数、传递参数。
    的头像 发表于 03-07 11:13 367次阅读
    <b class='flag-5'>函数</b>指针与回调<b class='flag-5'>函数</b>的应用实例

    函数发生器的作用,概念要点是什么

    函数生成器是Python中非常强大的特性之一。它们允许我们以一种简洁且高效的方式生成迭代器,从而帮助我们更好地处理大量数据或者在特定条件下生成无限数据。在本文中,我们将探讨
    的头像 发表于 02-23 16:01 498次阅读

    linux用gdb调试遇到函数调用怎么办?

    。 要顺利进行函数调用的调试,首先需要准备好代码和符号表。在编译代码时,需要加上 `-g` 参数来生成调试信息。这样编译器会在可执行文件中嵌入符号表,以供GDB使用。如果没有生成符号表,我们将很难进行有意义的调试。 一旦准备完毕
    的头像 发表于 01-31 10:33 671次阅读

    嵌入式open函数的使用

    使用的一个重要函数,用于打开一个文件或设备,并返回一个文件描述符,开发者可以通过该文件描述符进行文件读写操作。在本文中,我们将详细介绍嵌入式系统中open函数的使用。 一、open函数
    的头像 发表于 01-04 15:51 603次阅读

    sumif函数求和的使用方法及实例

    按照上述的语法填写好函数的参数即可。下面,我们通过几个实例来详细介绍Sumif函数的使用方法。 实例一: 假设我们有一个学生成绩表格,
    的头像 发表于 12-03 10:36 1644次阅读

    不属于python的内置函数

    : math模块函数:Python的math模块提供了很多数学函数,如sin、cos、sqrt等。这些函数不是内置函数,而是需要先导入math模块才能使用。 random模块
    的头像 发表于 11-29 14:27 1363次阅读

    HAL库常用函数汇总

    1,系统函数HAL_Delay原型:voidHAL_Delay(uint32_tDelay);作用:利用滴答定时器生成的系统延迟函数参数:Delay:延迟时间,单位是ms返回值:无示例代码
    的头像 发表于 11-29 08:00 2972次阅读
    HAL库常用<b class='flag-5'>函数</b>汇总

    range()函数的用法是什么

    range()函数是Python中的内置函数,用于生成一个整数序列,可以用于循环或创建列表。 range()函数的基本语法是: range(start, stop, step) 参数
    的头像 发表于 11-21 14:46 3733次阅读

    体验紫光PCIE之使用官方驱动在Windows下进行DMA读写操作/PIO读写操作

    的PICE驱动是最佳选择。 官方也提供了一个在Windows的驱动例程,该例程能够完成PCIE的DMA读写操作和PIO内存读写操作,但是该驱动并未完全适配IP生成的官方例程,官方提供另一份的FPGA的工程与之
    发表于 11-17 14:55