1、本文章借鉴了ZCU106--PL+PS点灯_Junluoyu的博客-优快云博客_zcu106、ZCU106开发之PS侧MIO闪灯_lixiaolin126的博客-优快云博客两篇文章,并且感谢小林博主的悉心指导!
2、今天终于把ZCU106的SDK+Vivado联合仿真给跑通了,特此记录以下,后面对ddr4的读写、HDMI显示以及电磁暂态程序课题思路会一一发布,师弟们耐心等待!
3、文章目的:给ZCU106入门级选手一个参照,全网ZCU106最详指导,如果有多年FPGA经验请迅速联系博主敬请指点一二。
4、实验软硬件:ZCU106、Vivado 2019.1
5、实验过程:
step1:创建项目---PS_LED_test
step2:IP INTEGRATOR列表点击 Create Block Design弹出窗口直接点击OK按钮,然后双击下图红色框。
然后出现了模块---zynq_ultra_ps_e_0
step3:修改加入的模块设置,这一步很关键。由于SDK的DEBUG是运行在DDR上的,如果配置错误将会出现不能调试以及程序跑飞的情况。原因请参考文献Xilinx SDK程序Debug无法在main函数入口处停住解决_Setul-优快云博客,如果后面SDK不能调试而且第一步boot出现跑飞的情况就是这一步没有设置好。
①点击蓝色自动运行模块,弹出界面直接点击OK按钮。然后变成了这样
②去掉GPIO1的钩子,去掉QSPI的钩子
③DDR选择中间那个美光的,然后做以下更改
④PS-PL Configuration做以下更改。IRQ改为0,这是一个发热监视
这两个钩子去掉,这是AXI线
下面这个钩子也去掉。这个是复位按钮
然后点击OK按钮,就变成了下面这样
点击检测按钮,提示successful,no error就是成功啦
⑤设置ddr4的原因 :PL侧的DDR就叫MT40A256M16GE-xxxE,具体参考zcu102 zynq Mpsoc uart hello world_pipiak5you的博客-优快云博客_zcu102开发板
step4:输出产品,创建HDL,然后生成Bit
然后就变成了这样
然后我们生成bit文件,参考前面的生成步骤(直接点击左侧的按钮)
step5:输出产品,启动SDK
step6:建立---PS_LED工程
step7:观察右下角的打包进程,到了什么都不显示的时候在进行第8步操作
step8:双击helloword.c文件并替换源码如下所示,代码是本篇文章第二篇文章复制过来的,就是用c来实现一个LED的闪烁。复制完毕,键盘操作(CTRL+B)打包
#include "xgpiops.h"
#include "sleep.h"
int main()
{
static XGpioPs psGpioInstancePtr;
XGpioPs_Config* GpioConfigPtr;
int iPinNumber= 23; //MIO23
u32 uPinDirection = 0x1; //1表示输出, 0表示输入
int xStatus;
//--MIO的初始化
GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PSU_GPIO_0_DEVICE_ID);
if(GpioConfigPtr == NULL)
return XST_FAILURE;
xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr,GpioConfigPtr,
GpioConfigPtr->BaseAddr);
if(XST_SUCCESS != xStatus)
print(" PS GPIO INIT FAILED \n\r");
//--MIO的输入输出操作
XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumber,uPinDirection);//配置MIO输出方向
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumber,1);//配置MIO的第7位输出
while(1)
{
XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 1);//点亮MIO的第7位输出1
usleep(500000); //延时
XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 0);//熄灭MIO的第7位输出0
usleep(500000); //延时
}
return 0;
}
step9:右键PS_LED文件夹,设置debug操作。
双击红色框
然后勾选红色框框住的这几个按钮。
Stop at program entry勾选后就可以从boot开始调试了,然后我们点击debug按钮。弹出框点击Yes
step10:然后出现下面界面,我们看problems框,如果没有出现warning和error,那就是成功了,如果出现,请查看step3.
step10:没有出现上图警告,我们disconnect按钮。
红框部分从左到右的意思是:重新运行、断开调试、步入、步出最后一个没啥用。
step11:右键PS_LED点击红框,等待烧写完成后。可以看到PS侧的led闪烁。
下面是闪烁视频