今天给大侠带来FPGA Xilinx Zynq 系列第八篇,本篇内容目录简介如下:
3. Zynq 设计指南(“ 如何使用它?”)
3.3 SoC设计团队
3.4 使用 Vivado 进行以 IP 为重点的系统级设计
3.5 ISE 和 Vivado 设计套件
3.5.1 特性比较
3.5.2 升级到 Vivado
本系列分享来源于《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 设计指南(“ 如何使用它?”)
3.3 SoC设计团队
SoC 设计常常是由一个团队而不是个人来开发。一个开发团队也许会包含系统 级,硬件,软件,固件设计和测试方面的专家。正如前篇图 3.2 所描述的设计流程模型一样,高级系统设计必须在硬件或 者软件设计开始前完成。这一步主要定义系统的结构,接口,内部和外部的事务,约束,以及软硬件的划分。该过程应该由系统设计专家来领导。
当高级设计完成后,独立的进度才能开始推进。为了最大化利用资源,硬件工 程师和软件工程师应当同时推进这些系统进度。比如说:
- 一个硬件设计团队负责架构和实现硬件系统,包括设计,重用,以及集成 IP模块。
- 一个固件设计团队负责设计和实现引导程序和软硬件之间必须的驱动程序。
- 一个软件设计团队则着眼于设计和编写系统中的软件元素,并且像标准的操作系统一样集成其他可合并的元素。
其中每一个元素都需要单独验证,这其中含有很多技术,包括软件仿真,RTL 仿真,硬件在环,虚拟平台的使用,板级测试等等。在项目的最后,会有一个最终整合和测试的阶段,此时所有的团队成员会将他们的系统元素结合起来,并且确定每一个期望的功能都已经被实现。如果需要的话,还会有后续的迭代,一直到最终的产品经过全部的测试并且满足了所有的需求。
在开发复杂的大型系统时的一个难点就是定义和管理设计中的IP模块接口以及 在系统层级集成这些模块。设计不同接口间的连接模块可能会花费非常多的时间并且产生很多错误,并且会非常难以将其集成进系统。Vivado 和 IP Integrator 提供 了一个框架,通过工业级的 AXI 总线接口,能够使 IP 集成变得快速,容易并且减少错误发生。这使得项目间的 IP 共享和重用变得容易,并且能够接受第三方的 IP。Vivado 中有一个大型的预设 IP 库可以通过这种方法使用,同时还有大量的第三方IP 可用。AXI 的使用同样有助于软件和硬件进度的同步推进,因为 AXI 是一个具有完善定义的标准协议。
另一个潜在的难点是在进程中可能发生的对设计做重新划分的需求,比如说, 在软件团队发现有一个功能比预期的要更加依赖于计算,非常适合于硬件加速。Vivado 设计套件的一个好处就在于它的 Vivado HLS 工具可以将 C 语言高级综合为 硬件,这意味着可以很快地基于现有的 C 代码将软件程序转化为硬件,而不需要去开发一个硬件协处理器。
3.4 使用 Vivado 进行以 IP 为重点的系统级设计
先进的系统设计主要特点就是设计重用和快速开发的潜力。及时上市对于许多 应用领域都很重要,而且设计工具,如果能在加速开发进程的同时,不需要在健壮性和质量上进行妥协,将会具有非常明显的优势。
Vivado 的设计流程就是基于这样一准则,而且许多系统模块的建立将以一个个 准备好的 IP 集成进系统作为前提。不同于老的、只是从零开始建立系统的设计方法,Vivado 着眼于从 Vivado IP 库(这些核由 Xilinx 开发)中,或从第三方 IP 开 发者,或从前人 (他或她的团队)的努力中获取预先验证好的 IP 来开发。在很大程度上,任务的焦点被转换到了上层的系统集成,而不是底层的硬件设计,Vivado设计套件的特点正是反映了这种思想。正如之前所说,它同样也包括自定义的逻辑设计功能,如果系统需要的话。
IP Integrator 常常被用来设计如图 3.4 中的样例系统,是以 IP 为重点的设计 方法的主要体现。IP Integrator是Vivado 设计套件是特色,通过使用它用户可以 使用自顶向下的设计方法来进行设计,就和构思系统结构时一样。IP 实例既可以从现有的列表中适当选择,也可以先创建一个类似于黑箱的模块,之后再完善其功能以及创建对外的接口。这种方法可以引导一个硬件系统的快速开发。
图 3.6 提供了一个 IP 实例化的例子,里面展示了一个 Vivado IP 目录 (注意 这里只显示了一小部分 IP)。这里展示的坐标旋转算法(CORDIC)IP 被选中并且拖动到工作空间,或者说是 “ 画布 ” 上。之后,设计者可以配置 CORDIC 设计单元的参数,如图 3.7 所示,将其和系统中其他模块正确地连接起来。IP 集成阶段的成功依赖与 IP 运行状态和接口的一致性。为了支持这些,Vivado 设计套件包括了一个相关的特色功能,IP Packager,它使得 IP 等被打包成标准包 (基于 IP-XACT 标准)以便能够满足后期重用的目的。这就是推荐 IP 开发和设计团队去做的工作。通过这种方法,IP 设计可以获得最大化的可移植性和可重用性。从设计团队的角度看,为方便 IP 重用建立一个内部仓库,然后在组织内进行共享,应该是为加速产品设计环路而设的一种必须的措施。
图 3.6: 将 CORDIC IP 模块引入 IP Integrator 系统
有很多工具和设计方法可以用于生成 IP。比如可以使用 HDL,VHDL 或者 Verilog 编写;或者使用 Vivado HLS 工具从 C 语言高级综合中生成;或者从一个 System Generator 的模块图中生成。最后关于 Vivado 的重要的一点就是,尽管在本系列中我们主要使用带有 GUI 特性 的工具,所有的这些设计工作同样也可以使用工业标准的 Tool Command Language(TCL) 脚本语言来完成。这是一种使用设计工具过程中非常强大的、可重现的、参数化的方法。
图 3.7: CORDIC IP 模块的参数化
3.5 ISE 和 Vivado 设计套件
Vivado 具有非常多的优点,但却是一个崭新的开发环境,许多读者可能会觉得 不熟悉。这一小节的目的就是阐明 Vivado 开发套件中的各个组件,以及突出说明其在实践上和 ISE 设计套件相似和迥异之处。我们也会提供一个简短的说明,针对如何将已有的工程从 ISE 升级到 Vivado。
3.5.1 特性比较
对 Vivado 和它的前一代设计套件,ISE 做一个组件功能上的平行比较和总结是 很有用的。其目的是让那些具有在 ISE 下工作经验 (但是不具有 Vivado 下经验)的人能够更快的适应新工具的各个特性。详细信息见下表 3.2。
表 3.2: ISE 和 Vivado 设计套件之间的比较
部分软件工具的变化是很值得注意的,它会导致设计者的工作方法的改变。比 如说,ISE 的 Xilinx Platform Studio(XPS) 和 Vivado 的 IP Integrator 都是用于 设计嵌入式硬件系统的环境,但是它们的用户界面迥然不同。XPS 使用一系列的下拉列表和基于文本的配置选项,然而 IP Integrator 提供了更加图形化的接口。其 他的变化则更加细微,比如说,Vivado 中的综合和布线的引擎相比 ISE 来说有很大的改进,但是这对于用户却是透明的。更多有关背景的话题,读者可以通过参看 [9]来获取关于原始的 ISE 设计套件以及 Xilinx 在 Vivado 中对这些开发工具做改进的理由的讨论。
值得重申的是,Vivado 支持 7 系列和 Zynq-7000 以及之后的设备,但是不支持 更老的设备(Spartan, Virtex-6 以及之前的 FPGA)。同样 ,ISE 也不再支持 7 系列 之后的设备。
3.5.2 升级到 Vivado
所有的新设计都推荐在 Vivado 上展开。自从 2013.2 版之后,Vivado 已经完全支持 Zynq,就像前几篇提到的一样,以 IP 为核心的 Vivado 设计流程更加适合于系统设计,并且能够加速设计进程。ISE 工程可以移植到 Vivado,但是相反却是不可行的。比如说,XPS 设计可以 升级到 IP Integrator,以及 ISE/PlanAhead 工程可以升级到 Vivado。不过解释从 ISE 到 Vivado 的移植过程则超出了本书的范畴,更多地引导可见于 [24]。
ISE 和 Vivado 之间另一个重要的区别就是约束文件的类型。在 ISE 的流程中, 使用的是 UCF(.ucf)文件(User Constraints File,用户约束文件的首字母缩写), 然而在 Vivado 中,则使用 XDC(.xdc) 文件 (Xilinx Design Constraints,Xilinx 设计约束 )。新的文件类型提供了与工业级集成电路设计约束的兼容性,并且增强了一些特定的 Xilinx 约束文件。XDC 文件使用的约束语法和 UCF 完全不同,因此ISE 的用户需要熟悉这种新的样式。在 [24],[25] 中明确的提供了从 UCF 文件到 XDC文件转换的方法。System Generator 的用户也会注意到 MATLAB/Simulink 在版本 2012b 中所作的 接口升级(这和 ISE 到 Vivado 的升级是相互独立的,不过也非常值得注意)。首先在美观上有了改进,但是其文件类型也有了变化:Simulink 的模型之前使用文件类型 .mdl,现在则默认使用 .slx。新的模型都会自动使用新的文件类型,SystemGenerator 也会完全支持。旧的 .mdl 的模型文件依旧可以被打开,编辑,保存,如果需要的话,新的模型也可以被向后兼容保存成 .mdl 格式。
第八篇到此结束,下一篇将带来第九篇,介绍开发板(Zynq-7000 SoC ZC702 Evaluation Kit、Zynq-7000 SoC Video & Imaging Kit、Zynq-7000 ZC706 Evaluation Kit、ZedBoard 、ZYBO、第三方开发板、附件和扩展、使用开发板工作)、支持和文档及第三章回顾相关内容。欢迎各位大侠一起交流学习,共同进步。
END
后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。
大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!