ZedBoard

简介
本篇博客大部分内容前三篇博客都已经包含了,此处重点叙述不同之处,主要对比Tcl命令的不同和解决SDSoc程序找不到基地址的问题。

使用ZedBoard开发板,SDSoc 2017.4, Win10系统;此处通过AXI_GPIO点亮ZedBoard板子上连接在PL端的8个LED灯。

Tcl命令
搭建平台的步骤在 SDSoc学习(二)中进行了较为详细的描述,同时也可以参见官方文档 ug1146 和 ug1236 。

VIVADO工程如下:

AXI_GPIO设置如下:

部分Tcl命令如下:

SDSoc学习(二):搭建平台,使用EMIO点亮LED

简介
这是学习SDSoc的第二个入门实验,通过EMIO点亮连接在PL上的8个LED。与上一个实验不一样,在这一个实验中,由于ZedBoard平台中没有使能EMIO,因此想直接通过SDSoc编写程序驱动MIO是不行的,所以这一个实验需要自己搭建包含EMIO的平台。

我用的是ZedBoard开发板,SDSoc2017.4。

第一步:搭建平台
通过对官方资料的学习,平台分为软件平台和硬件平台两部分,官方就如何搭建平台提供了较为详细的说明,可以在XILINX官网中搜索ug1146 和ug1236 两篇文档并下载。其中ug1146 理论讲解比较详细,ug1236 重在叙述操作实践,本实验需要搭建的平台就是参照这两篇文档,同时增加了一点点东西完成的。

1、新建VIVADO工程,点击Next;

2、设置工程名和路径,这里设置为zedemio,点击Next;

SDSoc学习(一):使用MIO驱动LED

简介
在XILINX官网上看见了一些SDSoc的介绍视频,感觉这个工具很强大,我之前也有一点点VIVADO+HLS的学习经历,感觉会为学习SDSoc提供一些帮助,所以就尝试学习学习。

先从最基础的点亮一个LED入手,通过对官方资料的学习,惊奇的发现官方给的例程都是对算法加速,而没有一些入门例程,比如说点亮一个LED(可能是太简单了官方不屑说,也有可能是我没找到)。

我用的是ZedBoard开发板,SDSoc版本2017.4,Win10 64位系统。这个例子是我用ZedBoard开发板点亮一个直接连在MIO7上的LD9。

第一步:搭建平台
搭建平台是使用SDSoc工具开发的第一步,对于如何搭建平台,XILINX官方提供了较为详细的说明,由于SDSoc2017.4包含了ZedBoard开发板平台,而且提供的这个平台也刚好配置了MIO(如下图所示),因此这个例子就可以省去搭建平台的操作。

xilinx-arm-linux交叉编译链 安装总结

首先,说明为什么要装xilinx-arm-linux编译链,我使用的是Xilinx的Zedboard开发。

在Zynq上运行Linux后,如果还要对PS操作,有两个办法:

(1)、在Windows系统上面,使用SDK新建C Project SDK自带编译环境,编译后自动产生elf文件。使用U盘将elf拷贝到Zedboard,运行即可。这个方法今后会详细说明。

(2)、在Linux系统上面,使用xilinx-arm-linux交叉编译链,编译C文件,将编译后的文件拷贝到Zedboard即可。今天主要讲这一部分,安装步骤如下:
1.在linux系统根目录下新建一个目录,mkdir /zedboard
2.将下载的xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin拷贝到目录下
3.更改 xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin权限,sudo chmod 777 xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin
4.安装“./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin”,若出现下面错误执行如图所示命令

ZYNQ-ZedBoard USB HOST问题二探

上一次讲到USB不启动问题是由与Vivado工程中的EMIO引脚未正确配置造成的,那么软件上又是如何使用这个引脚的呢?

首先,Xilinx提供的Linux 开发包中已经包含了gpio的驱动和sysfs进行配套,并在设备树文件中对OTG-RESETN进行了初始化配置和声明。

其次,在实际使用中,USB-OTG的驱动向系统申请了OTG-RESETN的使用权,用来对PHY芯片完成配置。

启动后,查看sysfs中GPIO的相关状态信息:
root@linaro-ubuntu-desktop:~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 906-1023, parent: platform/e000a000.gpio, zynq_gpio:
gpio-991 ( |ulpi resetb ) out hi
root@linaro-ubuntu-desktop:~#

991号gpio正被使用,标签为“ulpi resetb”,从字面意思可以知道,它与USB-PHY和复位信号有一定关系。该gpio为输出状态,电平为高。

USB-PHY芯片是低复位,此时是正常工作的。

ZYNQ-ZedBoard USB HOST问题初探

在用Vivado (2015.4.2)在ZedBoard上搭建如图所示的PS最小系统时,USB-OTG无法正常使用且在启动LOG中报错。

经过与原厂的各个启动文件进行对比替换,最后确定是Vivado工程生成的bit流出了问题。也就是说建立的工程不对。

USB 启动错误提示信息:外置PHY芯片初始化失败,载入模块失败。
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver usbserial
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial support registered for generic

Zedboard移植QT

参照《嵌入式系统软硬件协同设计实战指南》这本书第十四章 系统级设计案例的14.2.7节 在ZedBoard上运行QT程序。

一、关于QT在PC Ubuntu上的安装与使用
一个简单的例子可以参照 懒兔子 ZedBoard学习手记(八) 更大的目标!在Linux下开发图形用户界面,建立一个简单的工程,编译后生成的可执行文件效果如下图:

工程文件夹下的源文件如下:

作为Zedboard移植的测试工程

二、Zedboard移植QT

Zedboard安装与移植OpenCV

参照《嵌入式系统软硬件协同设计实战指南》这本书第十三章13.5 OpenCV移植与sanwan的一篇博客中的相关内容;

主要分为两个大部分,OpenCV在PC Ubuntu上的安装和OpenCV在Zedboard上的移植。

一、OpenCV在PC Ubuntu上的安装

采用的是Ubuntu 14.04系统,在OpenCV官网下载的源码版本为2.3.1

1. 安装第三方库

获取su权限进行操作。安装第三方库,命令如下:
apt-get install build-essential
apt-get install cmake cmake-gui
apt-get install libgtk2.0-dev
apt-get install libavcodec-dev libavformat-dev libswscale-dev
apt-get install libdc1394-22-dev
apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev

2. 新建安装文件夹

将OpenCV解压到自建目录/home/linux/OpenCV-2.3.1下,新建目标build。这是个临时文件夹,安装完成后可以删除。

进入build目录。进行命令配置:

Zedboard使用Linaro Ubuntu图形界面

参照《嵌入式系统软硬件协同设计实战指南》这本书第一章 初试Zedboard的 1.2节 Linaro Ubuntu动手玩。

1. SD卡分区

采用的是Kingston SD4/16GB卡,在Ubuntu14.04系统下进行操作。使用Ubuntu自带硬盘工具(Disk Unity)将SD卡格式化后,分为两个分区:FAT格式分区(500M)和EXT4分区(15GB)。

2. 文件拷贝

首先将SD卡挂载到Ubuntu的某个目录下,此处和书上一致:
sudo mkdir -p /tmp/sd_ext4
sudo mount /dev/ /tmp/sd_ext4

对于不清楚SD卡位置的可以在Disk Unity中查看,或通过sudo fdisk -l命令查看,样例输出如下:
Disk /dev/sdb: 4007 MB, 4007657472 bytes
255 heads, 63 sectors/track, 487 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

zedboard平台结构(PS、PL、硬件互联)

zedboard可以将逻辑资源和软件分别映射到PS和PL中,这样可以实现独一无二和差异换的系统功能,主要分为两大部分,处理系统和可编程逻辑。以及二者之间的互联特性。这篇笔记主要记录zedboard的大体架构。

1. 处理系统(PS)
应用处理单元(APU)
存储器接口
I/O外设,包括静态存储器和Flash存储器接口,可以通过共享一个54引脚的多路复用io(MIO)
互联,也可以扩展访问PL中的IO

2. 可编程逻辑(PL)
PS和PL使用了大量的借口和信号可以满足几乎所有的连接。

系统的启动

zynq的启动过程包含多个阶段,启动过程至少包含启动rom和第一级的启动引导代码( first-stage boot loader FSBL ),t同时包含可启动的rom,这个rom用户不可修改,完成了启动rom之后,然后执行FSLB .复位之后,zynq可以自动的从外部的引导设备中启动设备,根据需要,用户可以配置zynq的PS和PL,可以使用jtag借口,用于启动时的调试。

在使用过程中,可以选择性的关闭PL一侧的电源,以降低功耗,当然也可以降低PS内的时钟。

处理系统的PS特性
1. 应用处理单元(APU)

同步内容