Zynq

ZYNQ基础系列(五) AMP模式 双裸核CPU同时运行

AMP模式 双核CPU同时运行

从软件的角度来看,多核处理器的运行模式有三种:
AMP(非对称多进程):多个核心相对独立的运行不同的任务,每个核心可能运行不同的操作系统或裸机程序,但是有一个主要核心,用来控制整个系统以及其它从核心
SMP(对称多进程):一个操作系统同等的管理各个内核,例如PC机
BMP(受约束多进程):与SMP类似,但开发者可以指定将某个任务仅在某个指定内核上执行
默认情况下,ZYNQ仅运行一个CPU,这里主要研究AMP模式下,两个CPU同时运行

实验目的
使用ZYNQ7010完成
1> CPU0在裸核下运行helloworld,CPU1在裸核下运行流水灯

硬件环境
硬件环境过于简单,这里只文字描述
1.创建原理图,添加PS核,双击进入PS的配置界面
2.peripheral I/O pin里开启串口和EMIO和SD卡
3.在MIO configuration中,配置EMIO宽度为4
4.在clock configuration和DDR configuration中,设置对应的时钟频率和DDR型号
5.关闭配置界面,原理图如下

1、背景介绍
最近为了使用PCIe驱动,对Linux内核进行了升级,目前ZYNQ发布的最新版内核为2017.4(对应内核版本4.9),升级虽然解决了PCIe驱动问题,但却引入了另一个奇怪的问题-挂载JFFS2文件系统时会出现如下错误:
jffs2: jffs2_scan_eraseblock(): Node at 0x0000225c {0x1985, 0xe002, 0xe002e002) has invalid CRC 0x84d1586d (calculated 0x1d56aca6)
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00002260: 0xe002 instead
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00002264: 0x586d instead
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00002268: 0x0002 instead

ZYNQ7010把SD卡的图片显示到HDMI
在ZYNQ基础系列(三)中有相关IP核的初步介绍,在已有的基础上可以搭建一个基础的显示通路了
实验目的:在Mi701N开发板的基础上,驱动800*600的显示屏输出图片(图片文件[.bin文件]存放SD卡中)

一、PL部分实现
大体框图:

AXI接口连接模块和复位模块是通过自动生成的

rgb2dvi模块:用于IO口输出HDMI信号 [在ZYNQ基础系列(二)],也可以不加该模块直接以VGA形式输出,或者加一个驱动HDMI芯片的IP核输出

PS模块:注意根据板子具体情况设置PS时钟和PL时钟以及DDR型号

在对模块进行信息监测时,会用到ZYNQ内部的VPVN通道,默认情况下该通道是不开启的,需要手动在内核驱动代码中设置

修改为

重新编译内核,加载镜像就能够系统/sys/bus/iio/devices/iio:device0/中看到VPVN了

将VPVN电压转换为温度可以参考下面代码TEMP1848_1

在上一篇ZYNQ基础系列(二) IO口模拟HDMI中,介绍了VGA到HDMI输出的IP核的使用方法,本文将先介绍三个VIVADO自带的视频输出通路相关的重要IP核,搭建一个比较简单的视频通路,为不久之后的摄像头到显示屏通路打下基础:
1> Video Timing Controller
2> AXI4-Stream to Video Out
3> Video DMA

首先要对IP核的功能和配置有一个了解,才能做到肆无忌惮的去搭建通路

VTC核
这个IP核其实可以就看做是一个时序发生器,产生显示器输出所需要的时序信号,有了此核之后,那些各种显示消隐区也就不需要怎么考虑了,省心了很多

1>引脚
完整的引脚图如下:

Optional AXI4-Lite Control Interface : 用于通过AXI总线实时动态更换VTC核的参数
Detector Interface : 图中的Video Timing (input) Interface,探测器接口,用于捕捉视频时序然后处理

默认情况下QSPI拷贝文件到DDR中需要时间很长,15M左右大小的bin文件约30s左右。在某些产品中无法满足需求。

经排查发现u-boot代码中有对速度进行配置的地方,位于zynq-common.h中。

默认值为30000000,也就是30M,而QSPI主频最多可达到100M,所以应该可以通过修改该值提升QSPI读写速度。

但是从30M提升到50M后发现速度依然不变,怀疑代码中根本没有配置该值,于是对u-boot代码进行了检查。

排查发现在u-boot在/common/cmd_sf.c中用到了速度配置,函数如下:
static int do_spi_flash_probe(int argc,char * const argv[])

{

unsignedint bus = CONFIG_SF_DEFAULT_BUS;

unsignedint cs = CONFIG_SF_DEFAULT_CS;

ZYNQ基础系列(二) IO口模拟HDMI

IO口直接驱动HDMI接口
HDMI主要用于给高清显示设备传输视频和音频数据,除了使用专门的HMDI芯片外,当然还可以用ZYNQ的PL部分产生相应的时序,本文就是用FPGA的IO口与HDMI显示设备直接进行通信。

本文的工程rgb2dvi的IP核都上传到了这里

一、原理图
本文采用的是米联客的Mi701开发板,可以看到IO口是直接连到接口上的,只加了一些简单的上拉增加一下驱动能力,IIC也是经过了5V的电平转换,HDMI的5V供电由使能引脚控制。

ZYNQ跑系统系列(三) SDSoc方式移植linux

移植linux之SDSoc
想让ZYNQ上跑个linux系统,除了之前的两篇文章中的传统方式和petalinux方式外,还有一种更简单快捷的SDSoc,xilinx的SDx系列开发工具主要是面向软件开发人员和系统工程师,加快应用的开发,让软件开发者加入到项目中,SDSoc侧重的是对软件算法进行加速,本文仅仅是使用该工具生成一个linux环境下的helloworld应用

SDSoc可以直接运行在Windows环境下,不需要搭建linux开发环境,一键生成SD卡的启动文件,可以说是很省心了

一、准备工作
1.下载SDsoc的预安装程序
这里没有去下载全安装包,因为太大了,30多个G,而是选择了可以根据自己的需要,去定制要下载的安装包的预安装程序
SDsoc的安装程序建议去官网下载,也可以从这里直接下载

2.打开安装程序,选择自己需要安装的东西,越少越好

3.继续,等待下载和安装

4.安装完成后要去下载一个SDSoc的lic

ZYNQ跑系统系列(二) petalinux方式移植linux

移植linux之petalinux
之前一篇博文中,提到了一种通用的传统移植方式,将linux移植到ZYNQ中的ARM芯片中。本文将针对xilinx的专用开发环境petalinux,进行入门和开发,本文petalinux的运行环境依然在虚拟机的linux系统里,即将体验petalinux相对于传统方式的便捷和强大之处

一、安装petalinux
-1.安装虚拟机,在虚拟机里安装linux系统(ubuntu16)

  • 虚拟机里磁盘尽量留大点,建议60G,我的是80G
  • sudo passwd命令,设置超级用户su时的密码
  • 建议安装VMware Tools
  • 开发工具:vivado2017.1(Windows下) + petalinux 2017.1(Linux下)
  • 0.更新apt-get(可选,加速用,同传统方式移植那篇文章的第二节)

    1.安装petalinux的依赖环境
    安装petalinux的必要依赖环境,直接复制粘贴下面的命令行到shell中,系统自动下载安装下面的工具:
    sudo apt-get install build-essential vim tofrodos \

    ZYNQ跑系统系列(一) 传统方式移植linux

    移植linux之传统方式
    在ZYNQ开发时,有些情况下,为了降低开发的复杂性,或是提升系统运行的性能,在ARM上跑一个linux系统往往是一个不错的选择,而且linux系统一般集成了一些常用的成熟驱动,可以减少开发周期。本章将通过传统u-boot、kernel方式,完成移植。该方式虽然繁琐复杂,但是毕竟是一种通用的移植方式。

    一、搭建硬件环境
    1.新建工程,并新建一个 BD 文件,然后添加一个ZYNQ Processing system的IP核,并设置好与硬件相符合的PS和PL时钟以及DDR型号


    2.添加一些必要外设

    同步内容