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

    文章

    5357

    浏览量

    120621
  • Xilinx
    +关注

    关注

    71

    文章

    2168

    浏览量

    121662
  • 函数
    +关注

    关注

    3

    文章

    4338

    浏览量

    62734

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

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

收藏 人收藏

    评论

    相关推荐

    SRIO介绍及xilinx的vivado 2017.4中生成srio例程代码解释

    1. 概述 本文是用于记录srio的学习情况,以及一些对xilinx的vivado 2017.4中生成srio例程代码的解释。 2. 参考文件 《pg007_srio_gen2》 3. SRIO协议
    的头像 发表于 12-10 16:24 495次阅读
    SRIO介绍及<b class='flag-5'>xilinx</b>的vivado 2017.4中<b class='flag-5'>生成</b>srio例程代码解释

    ADS131A02开启Hamming code下,该如何编写读写命令函数代码?

    我的配置:(M0: 浮空,M1:上拉,M2:上拉),同步从模式,32位数据帧格式,开启Hamming code。 读写命令代码: //读写32位命令函数 uint16_t
    发表于 12-10 08:35

    如何获取入口函数不是__iar_program_start的Program entry的stack使用情况

    问题 IAR中默认的入口函数是__iar_program_start,使能stack usage analysis之后: 生成的map文件中STACK USAGE章节里面会包含Program
    的头像 发表于 11-25 16:23 268次阅读
    如何获取入口<b class='flag-5'>函数</b>不是__iar_program_start的Program entry的stack使用情况

    SUMIF函数与SUMIFS函数的区别

    SUMIF函数和SUMIFS函数都是Excel中用于条件求和的函数,它们可以帮助用户根据特定的条件对数据进行求和。尽管它们的基本功能相似,但在使用场景和功能上存在一些差异。以下是对这两个函数
    的头像 发表于 10-30 09:51 1227次阅读

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

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

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

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

    EEPROM读写程序详解

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

    读写分离解决什么问题

    读写分离是一种数据库架构设计策略,主要解决数据库在高并发场景下的读写性能瓶颈问题。在这种架构中,数据库的读操作和写操作被分离到不同的服务器上,以提高数据库的并发处理能力和稳定性。 一、读写分离的概念
    的头像 发表于 07-12 09:47 517次阅读

    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 3369次阅读

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

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

    用cubemx配置时钟生成LL库的system clock函数,导致硬件仿真时main函数无法进入怎么解决?

    用cubemx配置时钟会生成的LL库的system clock函数会有 LL_FLASH_SetLatency(LL_FLASH_LATENCY_5),while
    发表于 03-07 06:40

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

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

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

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