在一个项目中,当你使用microblaze作为控制器来进行系统调度的时候,一般是建议将所有模块封装成axi形式的ip核,这样好管理,也容易调试。不过在初期的时候是不建议这样做的,因为你的模块并没有完全被验证是没问题的,所以还是使用.v文件,等后面这一功能验证通过,再把它封装成ip核形式。
1. axi ip核简介
用过microblaze或者看例程的人肯定都知道,xilinx提供了很多axi形式的ip核,像常用的uart、iic、spi等ip核。我们只要把他们在画布里调出来,然后使用自动连接形式,便能把对应接口连接起来,接着在软件上调用其相应的函数便可以工作了。
但是当我们自己封装了一个axi形式的ip核后,又该怎么去使用呢?这不是官方ip,没有相应的函数呀?不知道大家是否有印象,上一篇文章介绍ip封装的时候说过,封装成axi形式的ip核,会生成一些东西,如下图所示,这个可千万别去删,大有用处的。
里面的drivers这个文件夹其实放的就是axi的驱动函数。例如我们生成一个axi的ip核(红框处)
编译通过后生成软核工程,可以看到,我们自己加入的ip核是有被关联进来的。在“axi_device_dna_v1_0”这个文件夹下包含有.c和.h文件,这个就是我们添加的ip核对应的驱动,它和iic、定时器、uart等ip核在同一个库里。这些都是ip核必须使用到的函数文件。
2. axi ip核使用
看见自制的ip核都能给你生成驱动函数是不是觉得很高级,很爽呢!如果这样想那你就确实too young too simple了。打开它的.c和.h文件给你看看吧。
寄存器定义
获取dna数据高位、低位数据的函数
读写函数
是的,就只有这些,没有了!所以别以为能像iic之类的ip核一样,会给你很全的函数,让你一次写一大串或读一大串数据的,如果真能根据不同ip功能给你定制不同函数,那就智能到逆天了···
不过人家都给你读写寄存器的函数和寄存器的定义,也就已经够了,都说下层基础决定上层建筑,有了这两个基本函数,你想自己做什么功能还不行?mcu控制的本质不也就是读写对应的寄存器,偷懒也得有个度的哈哈~就像这样,自己封装个函数就行了。
当然,你也可以不用xilinx给你生成的读写函数,自己写也是可以的,不过不建议这么做,毕竟人家都给了,一方面可以给你节省编码时间,另一方面也保证了函数的稳定性,避免开发出错。
3. 总结
在封装成axi ip 核时会有一个顶层的axi时序代码,这个用户一定要熟悉,并且对应的寄存器要设置好,这样使用起来才不会有错误。不然容易出现寄存器读写不成功或者操作错寄存器导致数据不对。总之还是一句话,实践出真知,想了解深入得去用了才知道才会使用。
生物质颗粒蒸汽发生器的优势介绍
华为设备配置单臂路由
CCD摄像头的控制系统
人工智能指令为什么需要防守
回顾2018AWE智能家居产品
Xilinx生成的读写函数
MySQL支持的三种数据类型
微生物BOD传感器的工作原理及特点
真菌毒素荧光定量检测仪 产品功能介绍
Karma宣布即将推出的纯电动版Revero的起售价为8万美元
红外适配器
压力筛筛底冲刷磨损的修复方法
高速数据速率系统的信号完整性解读
生物公司利用机器学习找到冠状病毒的治疗方法
日本研究人员针对OLED效率问题获新突破,可使OLED激子效率超过100%的限制
激光跟踪仪的功能是什么?
PIC32MZ系列MCU的定时器测试学习教程
全球5G深度融合势不可挡,我国5G在国际上都处于引领地位
英特尔押注4nm制程,将与台积电展开合作
多协议蓝牙和Zigbee怎样连接更多的设备