FPGA Xilinx Zynq 系列(二十三)Zynq 片上系统的开发

2020-12-30 11:10:33 浏览数 (1)

大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

今天给大侠带来FPGA Xilinx Zynq 系列第二十三篇,开启十一章,讲述Zynq 片上系统的开发等相关内容,本篇内容目录简介如下:

11. Zynq 片上系统的开发

11.1 硬件 / 软件划分

11.2 剖析

11.3 软件开发工具

11.3.1 软件工具

11.3.2 硬件配置工具

11.3.3 软件开发包(SDK)

11.3.4 微处理器调试器

11.3.5 用于 Xilinx Cortex-A9 编译器工具链 Sourcery CodeBench Lite Edition

11.3.6 逻辑分析仪

11.3.7 System Generator for DSP

11.4 本章回顾

11.5 参考文献

本系列分享来源于《The Zynq Book》,Louise H. Crockett, Ross A. Elliot,Martin A. Enderwitz, Robert W. Stewart. L. H. Crockett, R. A. Elliot, M. A. Enderwitz and R. W. Stewart, The Zynq Book: Embedded Processing with the ARM Cortex-A9 on the Xilinx Zynq-7000 All Programmable SoC, First Edition, Strathclyde Academic Media, 2016。

Zynq 片上系统的开发

本章我们要讨论 Zynq 开发流程中软件开发的所有内容。我们要仔细研究 Zynq 的软件开发和划分的某些方面。本章的各个小节会研究硬件 / 软件划分、Zynq 软件开发和剖析的重要概念。这些配合起来形成 Zynq 芯片的软件开发周期,从早期概念阶段,到测试和验证的阶段。

11.1 硬件 / 软件划分

硬件 / 软件划分,又叫做硬件 / 软件协同设计,是嵌入式系统设计的重要阶段, 而且,如果执行得好的话,能对系统性能产生显著的提升。硬件 / 软件划分的过程,顾名思义,涉及到决定系统的各个部分中,哪些应该用硬件来实现,而哪些应该用软件来实现。这个划分过程背后的原动力,是硬件部件,比如驻留在 FPGA 可编程逻辑里的那些,通常会由于 FPGA 芯片天然的并行处理特性而快很多,不过也要贵一些。另一方面来说,实现在 GPP 或微处理器里的软件部件,创建和维护都要便宜一些,但是也是因为本身的串行执行的特性而比较慢。为了在性能和成本之间实现良好的权衡,高性能部件可以在硬件中实现,而不那么密集计算的部分可以以软件来实现。

传统上这个划分的过程是由系统设计师人工操作的,他要决定设计模块中哪些由硬件实现,哪些由软件实现。最近一些算法和技术也被开发出来,在各种不同的设计环境中,让这个划分决策过程可以自动进行 [1]。像 HLS 这样的技术的出现,对于划分过程也有重要的影响,让软件算法能直接转变为用于硬件实现的 RTL。

图 11.1 给出了硬件 / 软件划分的概述。

图 11.1: 硬件 / 软件划分的概述

FPGA 可编程逻辑适合解决那种能高效地划分为多道并行任务的问题。由于可编程逻辑固有的并行执行方式,多个运算可以被同时处理,用比串行处理更短的时间计算出最终的结果。FPGA 实现的例子应用包括数字过滤计算、波束形成和图像处理。传统上这些任务是重复的,而且计算的过程本质上是完全静态的。另一方面,存在一些更动态、不可预测的问题,这些任务更适合在基于处理器的系统上实现。

在决定一个过程应该以硬件还是软件来实现的时候,另一个要考虑的因素是要用到的格式的数量。传统上,由于存在特别开发的向量数学引擎和专用的浮点单元,处理器对于浮点运算具有更好的支持。FPGA 可以支持浮点计算,但是需要很大数量的逻辑单元来实现。对于高精度定点计算也是类似的情况。现在,随着 FPGA 尺寸的增加,用于实现高精度计算的逻辑部分所占的面积,相对于芯片的尺寸已经变少了,所以高精度计算也变得常见了。因此,如果一个应用需要高精度浮点运算,最好的选择是要么用处理器实现,要么在大规模的 FPGA 中实现。

有必要正确理解严苛时间驱动功能在可编程逻辑中并行执行的情况。图 11.2 展 示了并行计算的优势。如果采用软件执行,要得到结果 G 需要 12 个时钟周期 (串行执行),而并行实现只需要 2 个时钟周期 (并行执行)就能得到相同的结果。不过,如果运算的输入和输出是在 PS 和 PL 之间发送的,就会有通信上的额外开销。在 Zynq-7000 SoC 芯片内,PS 和 PL 是紧密耦合的,而且中间的互联是高速的,这 就不是什么大问题了。

图 11.2: 并行 vs 串行的实现

11.2 剖析

剖析 (profile)是程序分析的一种形式,用来帮助对软件做出优化。我们用 它来测量应用代码的一些属性,包括:

• 存储器的使用

• 函数调用的执行时间

• 函数调用的频度

• 指令的使用

剖析可以静态运行 (不执行软件程序),也可以动态运行 (在实际或虚拟的处理器上运行软件应用的时候运行)。静态剖析一般是通过分析源码来做的,也有时候是分析目的代码来做的,而动态剖析是一种介入的过程,通过打断处理器上的程序的执行来提取数据。用剖析可以识别出代码执行中可能造成的瓶颈的低效率代码,也能找到函数与 PL 中的模块或软件中其他函数之间的糟糕的交互通信。还可能发现某个算法或例程可能本质上更适合在硬件中实现。一旦被识别出来,可以重写原始的软件函数来优化瓶颈问题,或把它转移到 PL 来加速。或者,部分函数可以保留在软件中,但是把有问题的部分转移到硬件中去。

对于大型的程序,如果代码已经太大而无法阅读源码,也可以用剖析来做分 析。运用剖析可以帮助找出其他方法可能不会注意到的错误。

图 11.3展示了各个函数的执行流程,并给出了每个函数执行所需的时钟周期。

图 11.3: 剖析

通过剖析程序,从而得到每个函数执行所需的时钟周期数,就可以判断某个函数是否需要被优化。一个软件函数被写出来,工程师就应该对于在某个 PS 上执行这个函数需要多少时间有大致的印象。这个估算的时间可以和实际剖析的结果做比较,对出入较大的要做研究。图 11.4 给出了图 11.3 的执行流程的一个剖析结果。

图 11.4: 图 11.3 的剖析结果

11.3 软件开发工具

Zynq-7000 AP SoC 芯片的软件应用开发流程允许用户运用统一的 Xilinx 工具 集,以及利用广泛第三方厂家的以 ARM Cortex-A9 处理器为目标的工具来创建软件应用 [2]。虽然本节主要关注 Xilinx 工具和工具流,这里所讨论的概念可以广泛应用于第三方工具。熟悉软件开发的人会发现熟悉的软件成分,比如 GNU 编译器工具链和基于 Eclipse 的 IDE。

11.3.1 软件工具

Xilinx 为开发和调试 Zynq-7000 AP SoC 芯片上的软件应用提供了设计工具。所提供的软件包括 [2]:

• 软件 IDE - 这是用以开发在 PS 上执行的软件应用的集成设计环境。

• 基于 GNU 的编译器工具链 - 用来把应用程序的源代码转换成可执行程序。它是基于 GNU项目所做的编程工具的集合,包括 GCC编译器、GNU调试器(GDB)、工具和库。

• JTAG 调试器- 通过 JTAG连接来对运行在目标芯片上的软件应用做硬件调试。

• 各种其他相关工具。

所提供的软件工具让用户可以开发无需操作系统就在 Zynq-7000 芯片上直接运行的裸机应用,也可以开发 Linux 应用。

也有支持 Cortex-A9 处理器的第三方软件工具,包括 [2]:

• 软件 IDE

• 编译器工具链

• 调试与跟踪工具

• 嵌入式系统和软件库

• 仿真器

• 模型和虚拟原型工具

第三方工具对 Zynq-7000 AP SoC 芯片的直接支持和集成的程度是不同的。支持 Linux 内核开发的工具不是由 Xilinx 提供的,而是由第三方厂家提供的。

11.3.2 硬件配置工具

Xilinx 提供了两种支持 Zynq-7000 AP SoC 芯片的硬件配置工具,它们是:

• Vivado IDE 设计工具集的 IP 集成器 (Vivado IDE Design Suite IP Integrator) - IP 集成器提供了一个图形界面,让用户可以创建集成了 PL 和 PS 的系统的结构图。

• ISE 设计工具集的嵌入式开发包 (EDK)Xilinx 平台开发工具 (XPS)(ISEDesign Suite Embedded Development Kit (EDK) Xilinx Platform Studio (XPS)) - XPS 捕捉 PS 和外设的数据,包括配置设置、寄存器存储地址映射 和用来初始化 PL 的硬件位流。

Vivado IP Integrator

Vivado IDE Design Suite IP Integrator 实现了一个方块形式的设计环境来 构建 Zynq-7000 AP SoC 系统。用结构图可以配置 PS 和 PL 部件。配置数据被保存在 一个 XML 文件和其他 INIT 文件中,这些文件可以用在软件设计工具中来推断编译器参数、定义JTAG设置、创建和配置BSP库,以及自动做一些其他硬件相关的操作[2]。Vivado IP Integrator 的进一步信息可以在第 18 章《IP 重用和集成》中找到。

Xilinx Platform Studio

ISE Design Suite EDK Xilinx Platform Studio 把配置数据保存在一个 XML 文件和其他 INIT 文件中,这些文件可以用在软件设计工具中来推断编译器参数、定义 JTAG 设置、创建和配置 BSP 库,对 PL 编程以及自动做一些其他硬件相关的操作[2]。

11.3.3 软件开发包(SDK)

Xilink 的 SDK 提供了一个环境,在一个工具中就可以创建全功能的软件应用、 编译然后调试。SDK 包括基于 GNU 的编译工具链(GCC 编译器、GDB 调试器、工具和库)、JTAG 调试器、闪存编程器、Xilinx IP 的驱动和裸机 BSP 及应用领域函数的 中间件库 [2]。提到的所有这些功能都能在基于集成了 C/C 开发包 (CDK)的Eclipse 的 IDE 里使用 [2]。

这个 SDK 的功能包括 [2]:

• 项目管理

• 错误导航

• C/C 代码编辑和编译环境

• 应用构建配置和自动产生 makefile

• 调试和剖析嵌入式目标的集成环境

• 通过第三方插件的额外功能,比如源代码和版本控制

SDK 是 Xilinx Vivado IDE,ISE Design Suite 和 EDK 的一部分,也可以是独立的应用。SDK 里还有创建第一级引导装载程序 (FSBL)的应用模板,以及构建一个引导映像的图形界面。文档和参考材料可以直接从 SDK 的帮助系统中获得 [2]。

11.3.4 微处理器调试器

XMD 是一个命令行驱动的 JTAG 调试器,可以用来下载、调试和验证程序。它带有一个 Tcl 界面,支持任务重复操作的脚本。在调试裸机应用的时候,XMD 可以作为 GDB 和 SDK 的 GDB 服务器 [2]。

在调试 Linux 应用的时候,SDK 与目标平台上运行的 GDB 服务器交互。调试器 可以连接运行在主机上的 XMD 或运行在同一个网络内的远端机器 [2]。

11.3.5 用于 Xilinx Cortex-A9 编译器工具链 Sourcery CodeBench Lite Edition

另外,这个 SDK 还带有用于 Xilinx Cortex-A9 编译器工具链的 Sourcery CodeBench Lite Edition。这是用于 Linux 应用和裸机嵌入式应用二进制接口 (Embedded Application Binary Interface,EABI)程序开发的 [2]。

SDK 里的 Xilinx Sourcery CodeBench Lite Edition 包含了与标准版本相同的 GNU 工具、库和文档,但是有以下的增强 [2]:

• 用于 Xilinx Cortex-A9 处理器的默认工具链设置

• 用于 Xilinx Cortex-A9 处理器的裸机 (EABI)启动支持和默认链接脚本

• 被向量浮点 (Vector Floating Point,VFP)和 NEON 优化过的库

11.3.6 逻辑分析仪

分析工具能分析 PL 内运行的内部信号和定制逻辑的端口。Xilinx 提供了两个 分析工具:ChipScope<sup>TM</sup> Pro Analyzer 和 Vivado Logic Analyzer。两个工具具有相似的功能,但是工作在不同的环境中。ChipScope Pro Analyzer 是一 个独立的应用,而 Vivado Lab Tool 是在 Vivado IDE 中运行的。

ChipScope Pro 包括两个工具:ChipScope Pro Core Inserter 和 ChipScope Pro Analyzer。后者在 PL 定制逻辑设计中插入裸机分析仪、系统分析仪和虚拟 I/O 核,这样就能分析和观看内部信号了。所有的信号都以 PL 的运算速度被捕捉到,然后可以在ChipScope调试工具中显示和分析。信号数据的捕捉和软件调试器的断点,可以被定制逻辑中的事件所触发 [2]。

Vivado Logic Analyzer 的工作方式和 ChipScope 相似,但是是在 Vivado IDE 里使用而不是作为独立的应用程序 [2]。

11.3.7 System Generator for DSP

System Generator for DSP 是一个方块形式的开发工具,允许用户在 MATLAB/ Simulink 环境中创建 DSP 硬件协处理器设计。它支持 DSP 硬件的快速开发和仿真,同时能自动地生成协处理器,从而降低整体系统开发时间。SDK 的协调试功能让用户可以运行和调试运行在处理器上的程序,同时保持对还在 System Generator 中开 发的硬件的控制。

11.4 本章回顾

本章介绍了硬件 / 软件划分的概念,就是系统的部件要划分到硬件 (在 PL 中 实现)和软件 (在 PS 上运行)上去。也讨论了剖析的过程,剖析有助于识别出系统中存在于软件的瓶颈。这样的软件功能可以被硬件加速,因此需要在 PL 中实现。Xilinx Vivado HLS 工具可以通过自动把 C/C /SystemC 写的算法转换成 RTL 代码, 来协助从软件到硬件的迁移。

本章还介绍了 Xilinx 提供的 Zynq 软件开发工具,既有用于 Linux 的也有用于裸机的。还介绍了硬件配置工具,比如 Vivado IDE IP Integrator 和 Xilinx Platform Studio。

11.5 参考文献

说明:所有的 URL 最后在 2014 年 6 月访问过。

[1] M. López-Vallejo and J. C. López, “On the Hardware-Software Partitioning Problem: System Modeling and Partitioning Techniques” ACM Transactions on Design Automation of Electronic Systems (TODAES), vol. 8, no. 3, pp. 269-297, July 2003.

[2] Xilinx, Inc, “Zynq-7000 All Programmable SoC Software Developers Guide”, UG821, v8.0, April 2014.位于 : http://www.xilinx.com/support/documentation/user_guides/ug821-zynq-7000-swdev.pdf

第二十三篇到此结束,下一篇将带来第二十四篇,开启第十二章,Zynq SoC 设计的下一步等相关内容。欢迎各位大侠一起交流学习,共同进步。

END

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

0 人点赞