一、目标
熟悉PS的底层硬件控制、熟悉PS与PL联合开发。
二、预备知识
我们从Xilinx的官方文档UG585的第二章可以了解到,PS与PL数据交换主要就是通过AXI总线,此外还有时钟/中断、DMA等控制信号接口。详细的各部分功能框图如下。

UG585的第四章可以看到ZYNQ上ARM核的地址空间分配情况。

第14章可以了解到如何配置、读写EMIO。

三、工程实例
空白工程的创建请参照VIVADO+ZYNQ7000入门一博文。
工程建立好以后,首先添加一个IP block,点击1处,在2处输入名称,点击OK,

在新窗口中,点击1处添加IP,在2处搜索zynq,双击3处。

双击下图1处可以自动布线,双击2可以配置CPU的功能引脚,这部分可以参照VIVADO+ZYNQ7000入门二
设置一下flash的引脚、内存型号选择、延迟补偿等。

在本工程中,我们设置一组8位宽度的MIO从PS输出给PL。

在新建立的系统模块里,默认会有有个复位信号从PS端输出给PL端,同时会默认有一个时钟源提供给PL。


初步效果是这样。

在下图1的位置点击一下会展开GPIO,鼠标放置在2处标识输出端口处,然后右键,弹出窗口中选择3的位置,创建端口。

弹出窗口可以默认直接点击OK即可。

输出的IO数据,我们可以连接到内置的一个叫VIO的IP核上,它的作用类似于逻辑分析仪。
空白窗口处点击鼠标右键,然后选择add ip。


双击配置新的IP,只需要输入填1、输出填0,然后设置输入位宽为8.

验证提示问题,有一个时钟源需要去掉。
把下面的勾选项去掉。

各IP连线很方便,只需要把鼠标放到端口的位置,拖动鼠标到另一端即可实现连线。
模块添加完后,生成一个工程的配置文件。
Sources 栏,design system上点击鼠标右键,选择Create HDL Wrapper。在弹出窗口中默认,点OK。

配置完成后,执行编译,因为添加了新的IP核,注意IP模块除了CPU以外,其它的IP都是运行在PL上的。弹出窗口中,默认选项,然后点击OK。

后面需要生成一个可以下载到开发板的bit文件。弹出窗口默认配置,点OK,yes。
编译过程有点漫长!编译完成后弹出一个窗口,可以选择cancel,如果选Ok的话,会打开综合布局布线效果。这里暂时不做介绍。

下一步像入门二一样的操作,把生成的硬件信息导出,然后链接到SDK里面。File–export–export hardware ,这里需要选择include bitstream。然后执行File – launch SDK。

四、SDK开发
File - new - Application Project,输入工程名字,点击next,然后选择empty Application,点击Finish。
src上右键,新建一个C文件。弹出窗口中输入文件名,注意需要加.c 后缀。

拷贝下面代码。
/*
* emio.c
*
*/
#include "xparameters.h"
#include "xil_io.h"
#define DIRM 0x00000284 //方向控制寄存器地址
#define OEN 0x00000288 //是能控制寄存器地址
#define DATA 0x00000048 // BANK2 数据寄存器地址
int main( )
{
u8 data;
u32 receive;
volatile int Delay;
data = 0xAA;
Xil_Out32(XPAR_XGPIOPS_0_BASEADDR + DIRM,0xFF);
Xil_Out32(XPAR_XGPIOPS_0_BASEADDR + OEN,0xFF);
receive = Xil_In32(XPAR_XGPIOPS_0_BASEADDR + DATA); //读出当前输入输出配置
receive = receive & 0xFFFFFF00; //只改变需要的通道,设置为输出
receive = receive | data; // 把设置值写入到控制寄存器
Xil_Out32(XPAR_XGPIOPS_0_BASEADDR + DATA,receive);
while(1)
{
data = ~data; //数据隔一段时间取反一次
receive = Xil_In32(XPAR_XGPIOPS_0_BASEADDR + DATA);
receive = receive & 0xFFFFFF00;
receive = receive | data;
Xil_Out32(XPAR_XGPIOPS_0_BASEADDR + DATA,receive);
for (Delay = 0; Delay < 100000000; Delay++);
}
return 1;
}
然后点击Project 下的Build all,或者直接Ctrl + B。编译过程中如果提示头文件错误,可以查看最右侧看一下包含的文件有没有错误提示,一般会提示解决方法,比如按F5刷新。
五、下载运行
依次点击下图中的1、2,把vivado编译好的bit文件下载到目标板卡上,记得下载前,连接好JTAG、板卡上电。

下一步需要把应用程序下载到板卡上,右键点击GPIO。

弹出串口中,选择 Run As – Launch on Hardwre

现在回到Vivado的主界面,找到左侧Program and Debug 项,点击 Generate Bitstream。过程完成后会弹出一个小窗口,如下图右侧所示,选择 Open Hardware Manage。

点击Open target,然后选择 Auto Connect。

这时会看到hw_vios 窗口,点击“+”,双击下图中蓝色背景处。

这样IO上的数据就通过vio监测到了,我们可以看到Value列依次从55变到AA。

本文详细介绍了使用ZYNQ平台进行PS(处理系统)与PL(可编程逻辑)联合开发的过程,包括创建工程、配置IP、编写SDK代码及下载运行。通过实例演示了如何设置MIO引脚,利用AXI总线实现PS与PL的数据交换,并在SDK中编写C代码控制GPIO。
1367

被折叠的 条评论
为什么被折叠?



