MIO和EMIO

简介

对于普通的ARM芯片来说,芯片有几百甚至是上千个管脚能够与外设相连。

但是FPGA内部的ARM核不同,仅有53个MIO和64个EMIO能够与外界进行直接的信息交互,而且MIO的作用一般是固定死的,如之前所提到的UART使用的是MIO的48、49口。

这其实和其特殊性有关,对于FPGA内部的ARM来说,其定位与普通的ARM芯片有所不同。

FPGA内部的ARM一般只做复杂的、对速度要求不高的、FPGA做起来很繁琐的事情,比如驱动摄像头(我用的OV7725),摄像头驱动需要使用SCCB总线(基本类似IIC,两根线)对摄像头进行配置,虽然FPGA也能做,但是会浪费大量的资源。如果需要传输大量的数据,或者需要使用较多的管脚,可以使用FPGA对信号进行简单的处理后,使用AXI总线(后面会学到)将其传输给CPU。因此,53个MIO和64的EMIO足够用户来处理大部分的项目了。

zynq emmc配置_数据

换一个简单点的图:

zynq emmc配置_zynq emmc配置_02

对于ZYNQ芯片而言,其不仅有连接FPGA逻辑的管脚,还有连接FPGA内部硬核的管脚(将ARM看成是一个硬核),ARM可以通过部分管脚直接与外部相连——这就是MIO,然后还有另一部分的管脚,可以理解为需要“假装”连接到FPGA内部逻辑电路,然后在XDC(管脚分配)文件中挂接在FPGA的管脚上——这就是EMIO。ZYNQ的MIO都是固定死的,不能够随意改变,但是EMIO可以根据用户分配,将其连接的FPGA的任意一个管脚上。

MIO和EMIO的使用

双击打开ZYNQ核配置页面,MIO和EMIO的配置有两种方式:

zynq emmc配置_zynq emmc配置_03

点击下面的MIO config,就可以选择需要使用的MIO或EMIO,EMIO直接选择位宽,最小1bit,最大64bit:

zynq emmc配置_摄像头驱动_04

EMIO配置好后,记得要在XDC文件中添加管脚约束。

CPU核要记得将EMIO的管脚引出,还有生成文件,管脚约束文件添加约束时,可以打开顶层文件,查看系统分配的EMIO管脚叫啥名,想改的话在Block文件中更改。

弄好以后就等编译好,进入SDK进行软件的编写。