Zynq-7000

Zynq™-7000 All Programmable SoC在单个器件上实现了ARM处理功能与FPGA逻辑独特的组合,因此需要双重的配置过程,同时需要考虑处理器系统和可编程逻辑。工程师会发现,其配置顺序与传统的赛灵思FPGA稍有差别。尽管如此,方法仍是相似的,生成引导镜像和完成配置存储器编程的难度不大。

  虽然标准的FPGA配置实践一般只需要FPGA bit文件,但是如果您想最大限度地利用Zynq SoC的优势,还需要添加另一种配置文件,即软件可执行与可链接格式(ELF)文件。FPGAbit文件用于定义设计中可编程逻辑部分的行为,而ELF文件则是处理系统将要执行的软件程序。

下面让我们来看看如何在Zynq SoC上实现裸机(无操作系统)软件应用。

  配置概览
  在Zynq SoC中,处理系统(PS)处于主控地位,因此负责配置器件的可编程逻辑(PL)侧。(唯一例外的情况是在使用JTAG接口进行配置时。)这就是说,如果需要,您可以在可编程逻辑侧不加电的情况下给处理系统加电并使之运行,从而降低系统的总功耗。当然如果需要使用Zynq SoC的PL侧,您也需要给它加电。

【视频】Zynq开发工具简介

了解可用于 Zynq-7000 可编程 SoC 的不同开发工具。从愿景到部署,Xilinx 开发工具着重端到端开发,包括:系统设计、软件和固件开发、硬件设计、协仿真和调试以及图像生成。

【视频】Zynq-7000 SoC 动态功耗管理演示

该低功耗模式 (LPM) 演示将讨论并展示 Xilinx Zynq-7000 SoC 动态电源管理功能的实例。LPM 演示可清楚地展示 Zynq-7000 SoC 在通过可扩展动态电源管理 (DPM) 提供极低待机功耗时有多强大。

FPGA+ARM是ZYNQ的特点,那么PL部分怎么和ARM通信呢,依靠的就是AXI总线。这个实验是创建一个基于AXI总线的GPIO IP,利用PL的资源来扩充GPIO资源。通过这个实验迅速入门开发基于总线的系统。

使用的板子是zc702。

AXI总线初识:

AXI (Advanced eXtensible Interface),由ARM公司提出的一种总线协议。总线是一组传输通道, 是各种逻辑器件构成的传输数据的通道, 一般由数据线、地址线、 控制线构成。 Xilinx从6系列的 FPGA 开始对 AXI 总线提供支持, 此时 AXI 已经发展到了 AXI4 这个版本, Vivado里都是基于AIX4的 IP。

ZYNQ支持三种AXI总线,拥有三种AXI接口,用的都是AXI协议:
AXI4:(For high-performance memory-mapped requirements)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输。
AXI4-Lite:(For simple, low-throughput memory-mapped communication)是一个轻量级的地址映射单次传输接口, 占用很少的逻辑单元。

本演示介绍了 Zynq-7000 SoC 及其利用 NEON 引擎或硬件加速功能实现软件加速的能力。敬请查看 Zynq-7000 SoC 在面向数据采集和加速数字信号处理 (DSP) 的单芯片参考设计中的灵活性优势,其不仅可对软件进行加速,还能充分利用处理器和可编程逻辑之间的低延迟和高性能数据传送功能。

前言:

前面我们都是使用JTAG方式下载比特流文件,然后下载elf文件,最后点击Run as或者Debug as来运行程序。JTAG方式是通过tcl脚本来初始化PS,然后用JTAG收发信息,优点是可以在线调试,缺点是断电后程序就丢失了。为了解决程序丢失的问题,可以制作镜像文件烧写到sd卡或者flash中,上电即可加载程序。

ZYNQ有两大类启动模式:从BootROM主动启动,从JTAG被动启动。

在没有外部JTAG的情况下,处理系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。即借助CPU来完成配置,这也是ZYNQ系列的不同之处。

板子依然使用的是zc702.

启动模式设置:

zynq 具有多种启动方式: NOR, NAND, Quad-SPI, SD Card以及 JTAG 。 zynq 如何判断从哪里启动呢? 上电后, zynq 会根据模式管脚的设定选用 boot 的方式。 而这个管脚的设定是通过核心板上的拨码开关实现的。zc702的拨码开关是sw16。

The ZC702 board supports these configurationoptions:
• PS Configuration: Quad SPI flash memory

前言:

ZYNQ 7000有三种GPIO:MIO,EMIO,AXI_GPIO

MIO是固定管脚的,属于PS,使用时不消耗PL资源;EMIO通过PL扩展,使用时需要分配管脚,使用时消耗PL管脚资源;AXI_GPIO是封装好的IP核,PS通过M_AXI_GPIO接口控制PL部分实现IO,使用时消耗管脚资源和逻辑资源。

使用的板子是zc702。

1.MIO方式

Zynq7000 系列芯片有 54 个 MIO(multiuse I/O), 它们分配在 GPIO 的 Bank0 和Bank1 隶属于 PS 部分, 这些 IO 与 PS 直接相连。 不需要添加引脚约束, MIO 信号对 PL部分是透明的, 不可见。 所以对 MIO 的操作可以看作是纯 PS 的操作。

前言:

使用的板子是zc702。用Vivado的IP核搭建最小系统,包括ARM核(CPU xc7z020),DDR3(4×256M),一个UART串口(Mini USB转串口),纯PS,通过串口打印出HelloWorld,工程虽小,五脏俱全,算是一种朝圣。配置要和板子对应,大家注意修改。

操作步骤:

硬件部分

1. 新建Vivado工程。选择芯片型号xc7z020clg484_1或者点击Boards选择zc702

2.单击Create Block Design, 命名

前言:

偶数分频容易得到:N倍偶数分频,可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。

奇数分频如何得到呢?

第一部分  奇数分频

奇数分频方法:

N倍奇数分频,首先进行上升沿触发进行模N计数,计数到(N-1)/2时输出时钟翻转,同时进行下降沿触发的模N计数,计数到(N-1)/2时输出时钟翻转时,进行输出时钟时钟翻转。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数N分频时钟。

或者使用“相与”,方法与上相同,只是翻转的数值变为(N-2)/2。

三分频的Verilog实现:
module Divider_Multiple(
input clk_i,
input rst_n_i,
output div2_o,
output div3_o
);

reg div2_o_r;
always@(posedge clk_i or negedge rst_n_i) //二分频
begin
if(!rst_n_i)
div2_o_r<=1'b0;
else
div2_o_r<=~div2_o_r;
end
reg [1:0] pos_cnt;

Zynq-7000 人体肤色识别

作者:OpenSLee,来源:FPGA开源工作室

1 背景知识

在肤色识别算法中,常用的颜色空间为Ycbcr,Y代表亮度,cb代表蓝色分量,cr代表红色分量。

由于肤色在YCbCr 空间受亮度信息的影响较小,本算法直接考虑 YCbCr 空间的 CbCr分量,映射为两维独立分布的 CbCr空间。在 CbCr空间下,肤色类聚性好,利用人工阈值法将肤色与非肤色区域分开,形成二值图像。

RGB 转 YCbCr 的公式为:

Y = 0.257*R+0.564*G+0.098*B+16

Cb= -0.148*R-0.291*G+0.439*B+128

Cr = 0.439*R-0.368*G-0.071*B+128

对肤色进行判定的条件常使用如下判定条件:

Cb > 77 && Cb < 127

Cr > 133 && Cr < 173

2 zynq-7000的肤色识别实现

同步内容