在本设计中,我们将PS端外设GPIO通过EMIO来调用PL端的引脚资源。由于小编此时只有pynq-z2的开发板,暂且用这个来学习zynq系列。这个开发板上PS端没有任何MIO引脚牵出给用户使用,因此该实验极为关键。首先什么是EMIO?EMIO是拓展的MIO,当PS的引脚不够用的时候,可以通过EMIO来进行扩展,从而使用PL的引脚。是PS和PL之间的一个接口。
在该实验中,通过EMIO来调用PL端的引脚实现两个拨码开关分别控制两个LED灯的亮灭。
首先我们创建工程:
Create Block desgin,再添加zynq:
按照如下步骤,结合本实验的需要,对zynq进行设置,其中输入时钟按照自己开发板提供给PS端的时钟来定,pynq-z2是50Mhz的。记住以下所有的设计,包括uart的MIO引脚分配、DDR3的设置、Bank的电压等都都要结合开发板的原理图来定。
以上设置完成后,点击OK。再Run Block Automotion。
在上图中GPIO_0的引脚上右键>Make External,则会生成其对应的引脚,该引脚用于pl端引脚相连。点击该引脚可对其进行重命名等设置。
点击上图位置,点击右键,依次选择如下操作
再直接点击Generate Bitstream,进行综合布局布线:
但在最后生成bitstream中一定一定会报错的,因为没有对pl端的四个引脚进行约束,下面进行引脚的约束,先后进行如下操作
根据自己开发板设置引脚编号和电平(此处也需要结合原理图确定)。以上M20 M19分别对应两个拨码开关、N16 M14分别对应两个LED灯。设置完成后点击保存,并自行输入管脚约束文件的文件名。之后再次Generate Bitstream。完成后弹出窗口,先取消。再Export Hardware,记住选择Include bitstream。再launch SDK。
然后再SDK中新建Empty Application。在src文件夹下添加新source file。敲入如下代码:
#include "stdio.h"
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"
#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID
//EMIO引脚从54开始算起
#define EMIO_KEY1 54
#define EMIO_KEY2 55
#define EMIO_LED1 56
#define EMIO_LED2 57
XGpioPs_Config * ConfigPtr;
XGpioPs Gpio; /* The driver instance for GPIO Device. */
int main(){
u32 key_value1,key_value2;
printf("GPIO test\n");
//查找器件的ID,查找器件的配置信息
ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
//初始化GPIO驱动
XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);
//把GPIO的方向设置为输出(最后一个参数:0表示输入,1表示输出)
XGpioPs_SetDirectionPin(&Gpio, EMIO_LED1, 1);
XGpioPs_SetDirectionPin(&Gpio, EMIO_LED2, 1);
//把GPIO的方向设置为输入(最后一个参数:0表示输入,1表示输出)
XGpioPs_SetDirectionPin(&Gpio, EMIO_KEY1, 0);
XGpioPs_SetDirectionPin(&Gpio, EMIO_KEY2, 0);
//设置输出使能(最后一个参数:0表示关闭使能,1表示打开)
XGpioPs_SetOutputEnablePin(&Gpio, EMIO_LED1, 1);
XGpioPs_SetOutputEnablePin(&Gpio, EMIO_LED2, 1);
while(1){
//读取按键的状态
key_value1 = XGpioPs_ReadPin(&Gpio, EMIO_KEY1);
key_value2 = XGpioPs_ReadPin(&Gpio, EMIO_KEY2);
//将按键的状态写入LED
XGpioPs_WritePin(&Gpio, EMIO_LED1,key_value1);
XGpioPs_WritePin(&Gpio, EMIO_LED2,key_value2);
}
return 0;
}
然后连接上开发板,此时下载程序需要先配置PL,即在SDK工具栏的Xilinx中选择Program FPGA,默认参数就行,直接点击Program。完成后开发板上DONE灯将亮起,其是FPGA配置完成的标志。再按照学习笔记1的步骤下载软件程序即可实现功能。