文章目录

  • 前言
  • 1 基于ARM的裸机程序设计与开发
  • 1.1 用Vivado创建工程
  • 1.2 Zynq IP核的设置
  • 2 用SDK创建和编写裸机应用程序
  • 创建应用工程
  • 编写C代码
  • 3 zynq SOC开发的总结(PL+PS)


前言

  1. 在Zynq笔记(一)中,我们已经了解了PL端的设计流程,且最终生成了比特流文件,并进行了上板验证与调试。
  2. 接下来就用一个简单的例子来介绍PS端的设计流程。(使用GPIO来点亮LED)
  3. PS端的设计主要包括两个部分:



1 基于ARM的裸机程序设计与开发

1.1 用Vivado创建工程

  • 和普通的工程创建相同,这里的重点在于PS端设计开发,因此主要进行器件的选择,不进行v文件的编写,创建完成后即可。

1.2 Zynq IP核的设置

  • 首先用IP 集成环境来进行块设计
  • postgres arm架构 arm架构的ps_人工智能

  • 为设计设置名称——ok——自动跳转生成界面
  • postgres arm架构 arm架构的ps_人工智能_02

  • 点击界面加号即可跳转到搜索框,我们就可以在里面输入Zynq,即可添加该IP核
  • postgres arm架构 arm架构的ps_IP_03


  • postgres arm架构 arm架构的ps_人工智能_04

  • 双击添加之后的IP核,就能看到Zynq的接口界面,从而能对齐进行参数的设置
  • postgres arm架构 arm架构的ps_人工智能_05


  • postgres arm架构 arm架构的ps_Data_06


  • 点击接口界面中的ENET1,并下滑找到GPIO,进行相应的勾选
  • postgres arm架构 arm架构的ps_Data_07


  • postgres arm架构 arm架构的ps_人工智能_08

  • 进行DDR的参数配置(主要进行型号的选择,根据开发板上DDR的型号来找)
  • postgres arm架构 arm架构的ps_fpga开发_09

  • 目前所需要的配置已经完成,点击run Block,ok后相应的IO被导出
  • postgres arm架构 arm架构的ps_Data_10


  • postgres arm架构 arm架构的ps_postgres arm架构_11

  • 因为我们这里没有用到时钟引脚,如果直接生成配置文件会出错,因此可以直接进行如下的连线,或者将时钟接口取消掉
  • postgres arm架构 arm架构的ps_Data_12


  • postgres arm架构 arm架构的ps_Data_13

  • 修改完成后进行校验,成功即可。
  • postgres arm架构 arm架构的ps_IP_14

  • 块创建完成后,都是以符号的形式呈现的,因此我们将其生成输出的配置文件
  • postgres arm架构 arm架构的ps_postgres arm架构_15

  • 创建HDL Wrapper,且能在资源处看到创建好的wrapper文件,因此配置文件也ok了
  • postgres arm架构 arm架构的ps_fpga开发_16


  • postgres arm架构 arm架构的ps_fpga开发_17

  • 比特流文件的生成(等待)
  • postgres arm架构 arm架构的ps_Data_18

  • 将我们创建的PS系统导出(秒完)【这里导出的时候包含我们的比特流文件】
  • postgres arm架构 arm架构的ps_IP_19


  • postgres arm架构 arm架构的ps_人工智能_20

  • 以上就是创建包含zynq PS硬核的系统 的流程,接下来我们就可以进行C程序的编写来实现控制。

2 用SDK创建和编写裸机应用程序

  • 打开Launch SDK
  • postgres arm架构 arm架构的ps_fpga开发_21

  • ok后,软件就会自动打开elipse,出现如下界面,我们可以看到自动生成了system_wrapper_hw_platform_0
  • postgres arm架构 arm架构的ps_人工智能_22

创建应用工程

postgres arm架构 arm架构的ps_人工智能_23

  • 命名和之前工程名称相同即可,Next,后空工程创建完成
  • postgres arm架构 arm架构的ps_postgres arm架构_24


  • postgres arm架构 arm架构的ps_Data_25

  • 能看到 除了空工程,也可建立hello word 等
  • 创建source file(创建c文件),注意加 .c —— finish


postgres arm架构 arm架构的ps_人工智能_26

编写C代码

#include "xparameters.h"
#include "xil_io.h"
#include "xgpiops.h"
#include "sleep.h"
int main (void)
{
u32 reg_val = 0;
u32 Data = 0;
//设置IO方向,bit7的方向为输出
reg_val = Xil_In32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_DIRM_OFFSET);
Data = reg_val | (1<<7);
Xil_Out32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_DIRM_OFFSET,Data);
//设置输出使能,bit7输出使能
reg_val = Xil_In32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_OUTEN_OFFSET);
Data = reg_val | (1<<7);
Xil_Out32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_OUTEN_OFFSET,Data);

while(1)
 {//设置bit7输出1
	Data =((~(1<<7))<<16)|(1<<7);
	Xil_Out32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_DATA_LSW_OFFSET,Data);
	usleep(1000000);
	//设置bit7输出0
	Data =((~(1<<7))<<16)& (~(1<<7));
	Xil_Out32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_DATA_LSW_OFFSET,Data);
	usleep(1000000);

 }
}
  1. ctrl+B(或者project——Build All)对已有工程进行编译即可。编译完后,要想在开发板上点亮LED,首先必须保证开发板正确连接,然后运行,点击run——run configurations,出现如下界面,双击GDB即可进入运行的调试界面(主要添加比特流文件和tcl脚本),另外勾选0核,相当于对于双核里面的0核进行调试


    进行Run,所连接的开发板就能看到LED的点亮效果。如果对C程序又进行了修改,那么同样的修改后保存,Ctrl+B进行编译,然后Run查看效果。

3 zynq SOC开发的总结(PL+PS)

1、创建Vivado工程
2、创建包含PS硬核的系统
3、导出包含包含PS系统的hdf文件(包含比特流文件)
4、在SDK中基于hdf文件创建板级信息文件
5、创建应用工程,然后创建c文件
6、编写c程序,编译运行