今天给大侠带来FPGA Xilinx Zynq 系列第二十五篇,开启十三章,讲述IP包设计等相关内容,本篇内容目录简介如下:
13. IP包设计
13.1 概述
13.2 业界趋势和哲学
13.3 IP 核设计方法
13.3.1 HDL
13.3.2 System Generator
13.3.3 HDL Coder
13.3.4 Vivado High-Level Synthesis
13.3.5 选择正确的 IP 创建方法
13.4 仿真与文档
13.4.1 仿真
13.4.2 文档
13.5 本章回顾
13.6 参考文献
本系列分享来源于《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。
IP包设计
IP 在今天的 FPGA 和嵌入式系统业界起着非常重要的作用,让系统设计者可以在大量预先开发的设计包中做挑选。从开发时间上来说这有很多好处,也包括可以提供有保证的功能而不再需要额外的测试。
本章我们要来看看在 Zynq-7000 平台上知识产权的意义、业界的趋势以及有些 什么 IP 的资源可用。我们还会看看用于创建和维护你自己的 IP 库的 Xilinx 设计流程。
13.1 概述
涉及到 IP,一个敏感的起点是定义两个术语 “IP 包 (block)” 和 “IP 核 (core)” 的确切含义。IP 核或 IP 包是硬件规范,可以用来配置 FPGA 的逻辑资源,或其他硅芯片上由厂家直接做进集成电路里去的逻辑资源 [3]。IP 核这个术语有两个类型:硬 IP 核和软 IP 核。
软 IP 核让最终用户可以在一定程度上定制 IP。定制化的程度取决于 IP 发布时的实际格式。如果软核是以可综合的 RTL 的形式发布,也就是给出了 HDL 代码的话,定制化的程度是最高的。对那些熟悉软件编程的人来说,这和计算机程序带着最高级像是 C/C 这样的源代码发布是一样的。用户可以自由地对 HDL 源代码做修改然后再来综合 (要是继续和软件比较的话,就是编译),以在目标芯片上做实现。需要指出的是,大多数 IP 厂家不会对被修改过的 IP 设计提供支持或保修。为了避免被修改,RTL 可以以加密了的源码的形式提供。尽管这样的源文件不能被修改,IP还是可以通过参数进行定制。
还有一种提供软核的格式,是作为门电路级别的网络表。就是说 IP 厂家把独立的 IP 部件部分地综合起来,提供给你 IP 功能的逻辑门实现。这样,尽管还是可定制的,但会使得对 IP 的功能性的修改变得难以实现。因此,以网络表发布的 IP 使得 IP 厂家得到一定程度上的保护,避免内部的算法和过程被披露出来。这和软件开发者把 C 代码编译了,提供出汇编代码清单是相似的:代码还是可以修改的,但是必须在较低的层面上进行。
这两种 IP 分发的方式都被认为是软性的,因为它们允许用户在部署到目标芯片上的时候可控制综合、布局和布线的设计流程。因此,在对 IP 功能性部署的终极控制,和在目标芯片上用到的硬件资源的数量,取决于最终用户。
而另一方面,硬 IP 核,是以一种实际上不允许最终用户修改的格式来提供的, 某些情况下,IP 的功能是在生产的时候就以芯片中的硅片的形式实现了的。
针对 FPGA/ASIC 实现而发布的硬 IP 的一种方法,是提供一个已经完成了综合、 布局和布线设计流程的设计。这样的发布也被称作固化的 IP。因为此 IP 已经完成了设计流程的布局和布线的阶段,每个独立的 IP 必须目标在特定的最终芯片或芯片系列上,而不能轻易地被移植到其他芯片上。还有一个缺点是,这个 IP 的实现必须使用芯片中某个特定的区域。尽管存在着 IP 的功能不能以任何方式定制这样的缺点,但是它也带来了对时序性能和所需的硬件区域进行高级预测的优点。
另一种发布硅片中的硬核实现的方法,是提供晶体管布局。这种格式只能和特定晶元车间的过程设计规则兼容,因此发布用于一家晶元车间的硬 IP 不能用于另一家晶元车间,除非进行非常困难的移植过程。某些大型的晶元工厂甚至能直接提供专门用于他们自己的晶元过程设计规则的硬 IP核,以此来确保客户必须要使用他们的服务。这种形式的硬 IP 发布不适用与 FPGA。
Xilinx 为 Zynq-7000 AP 系列提供了种类丰富的软 IP 核,这些核在性能和硬件占据的面积上都做了优化。核的功能涵盖了诸如 FIFO 和算术运算这样的基本模块,一直到完整的像 MicroBlaze 处理器核这样的功能性处理器块。
还有第三方的 IP,既有商业的也有开源社区贡献的。第三方的 IP 有两种形式:指定厂家的或通用的。指定厂家的 IP 应该需要极为少量的修改就能集成进你所选用的 Zynq 芯片。而通用的 IP,可能需要修改才能适应某个 HDL 命名规范。
为你的设计获得 IP 的最后一个方式是自己做。传统的产生 IP 的方法是以 HDL, 比如 VHDL 或 Verilog,来开发。最近,一些其他的创建 IP 的方法也被引入到了Xilinx 工具集中,比如基于模型的 System Generator 设计或 Vivado HLS。也有一 些其他第三方的工具可以用。
13.2 业界趋势和哲学
最近几年,随着对更复杂的 SoC 的需求的持续增长,系统设计者不得不把越来越多的 IP 塞进他们的产品。在较复杂的系统中,这随便就可能是几百个独立的 IP核。在单个产品中有这么多的独立的 IP,对每一个 IP 包的管理就变得更加困难了。对于这个问题的一个解决方案是把具有相似关键功能的IP核组合成单个IP子系统。
图 13.1: 视频 IP 子系统
IP 子系统的一个好例子是图像处理流水线,如图 13.1 所示。独立的视频 IP 包 — 视频输入、像素校正、降噪包等等 — 组合起来去实现一个完整的视频 IP 子系 统,这样的子系统能作为单个 IP 包,而不是六个独立的 IP 核,被集成进嵌入式系统设计中。
13.3 IP 核设计方法
在介绍了 IP 核的概念和可用的 IP 的类型之后,我们要来看看各种创建自己的 IP 的方法。Xilinx 提供了大量的工具,能创建用于自己的嵌入式系统设计中的定制IP 包。
13.3.1 HDL
硬件描述语言,像是 VHDL 和 Verilog,是专门的编程语言,用来描述数字电路的结构和运作。用 HDL 来创建 IP 核,让你能最大限度地控制外设的功能。如果已有HDL设计,那么把它转变为 IP 包,就能利用 IP 模块而不必重新设计或使用第三方等价品。
用 HDL 设计要通过 AXI 接口通信的 IP 核的时候,必须要严格遵循 Xilinx IP Packager 的外设信号命名规范。一个 IP 核的顶层 HDL 文件定义了设计接口,并列出了总线接口上的默认连接和端口。它还列出了所有的通用变量,并指定了默认值。
图 13.2 给出了 HDL 外设源文件架构图的例子。
图 13.2: HDL 外设源文件架构
其中 : <peripheral> 是要创建 的 IP 的名字。<version> 是当前的版本,如 v1_0。<AXI_instance> 是 AXI4 主机(M)或从机(S)接口实例。如 M00_AXI 或S00_AXI (每个外设可能有多个实例)。
用 HDL 做 IP 主要的缺点,是其复杂的设计需要靠有经验的工程师来做出优化的解决方案来。设计的过程可能会在开发和测试中花费大量的时间,导致面市的周期过长。不过,如果寻找的是需要非常紧的时序要求或严苛的硬件限制的 IP,或者要实现的功能很复杂,HDL 往往是最好的选择。
13.3.2 System Generator
通常用于 DSP 设计的 System Generator,是一个能利用 Mathworks Simulink 这个 FPGA 系统设计平台的设计工具。它实现了高层、基于模型的开发环境来做硬件设计。
随着在 Xilinx 产品目录中引入 Vivado Design Suite,在 System Generator 中也引入了一个新的编译目标。IP Packager 编译让你能把一个 System Generator 设计打包进一个可以被引入 Vivado IP Catalog 的 IP 模块中。然后这个 System Generator 设计就可以像 IP Catalog 中的任何其他模块一样地被使用了,并且可以 被实例化进 Vivado 用户设计中 [4]。而且,System Generator 已经被完整地集成进 了 Vivado 设计流程中,这样就能从 Vivado 中直接创建 IP Integrator IP 包。
System Generator 首先从用户设计模型中产生一个 HDL 的网络表,所引用的任何 Vivado IP 模块会自动被拷贝到一个叫做 “IP” 的子文件夹中,然后所有的 RTL 设计文件和 Vivado IP 设计文件被打包进一个 ZIP 文件,这个文件被放在一个叫做 “ip_packager” 的子文件夹中。
Testbench 和 HTML 文档文件也能自动由 IP 目录编译工具产生出来。testbench 文件使得 IP 能通过 Vivado IDE 项目被完全地仿真。文档文件包含了关于这个 IP 的信息,以及如何在 Vivado 中与它接口的信息。
System Generator 为 IP 设计提供了有用的环境,IP 包可以连接起来快捷方便地做出设计来。它提供了大量的 IP 包,从简单的算术运算到复杂的 DSP 运算都有。由于有些功能并非以最可读的HDL代码的形式来实现的,就使得某些设计难以使用。由于 System Generator 设计中某些选项的设置,所实现出来的 IP 可能不如手工编 写 HDL 来得高效。
13.3.3 HDL Coder
HDL Coder 是一个 MathWorks 做的工具,能以 MATLAB 函数和 Simulink 模型来 产生可综合的 HDL 代码(VHDL 和 Verilog 格式都可以)。它的工作流会分析 MATLAB/Simulink 模型,然后自动把这个系统从浮点转换成定点,从而实现高层抽象。
这样用户就可以专注于开发算法和模型,而不必操心错综复杂的 HDL 设计。241第 13 章 : IP 包设计242 HDL Coder 的工作流还提供了做 HDL 代码校验的工具,能拿所产生的 HDL 代码 与原本的 MATLAB/Simulink 模型一起测试。这样就容易找出所产生的 HDL 代码中的任何错误,从而做出修正。
在工作流中提供的 HDL 代码优化,能指定目标 FPGA 芯片,对代码的实现做出大量的控制:高亮关键路径、控制 HDL 架构,并做出硬件资源利用情况的估计。
一旦 HDL Coder 产生了结果,HDL 代码就可以用来产生 IP 核,其步骤和 13.3.1 节中所详细描述的是一样的。
图 13.3: HDL Coder 工作流
虽然 HDL Coder 让你能用已有的 MATLAB/Simulink 模型,做最少的设计修改, 就能快速地创建 IP,但是还是有一些不利之处的。目前,并非所有的 MATLAB 函数和 Simulink 包都支持 HDL 的产生。这意味着某些功能可能必须用相应的函数或包重新做过。还有一点值得指出的是,尽管提供了大量硬件实现的定制化和优化,产生出来的 HDL 代码可能不如手工编写的 HDL 高效。所产生的代码有时候会过于复杂以至于难以阅读,某些情况下难以定制。
13.3.4 Vivado High-Level Synthesis
Vivado HLS 是 Xilinx 提供的一个工具,是 Vivado Design Suite 的一部分, 能把基于 C 的设计 (C、C 或 SystemC)转换成在 Xilinx 全可编程芯片上实现用的 RTL 设计文件 (VHDL/Verilog 或 SystemC)。Vivado HLS 设计流程的概述如图 13.4 所示。
图 13.4: Vivado HLS 工作流
从图 13.4 可以看出,Vivado HLS 流程有三种不同的 RTL 格式可以提供。概述如下 [6]:
1. IP-XACT — IP-XACT 是由 SPIRIT 财团提出的一种公共的设计 IP 的文档规范。这是一种被广泛使用的描述 IP 的 XML 模版,它与具体的工具无关而且机器可读 [1]。如果你的 IP 设计要被引入到 Vivado IP Catalog,就应该选择这种格式 [6]。<br/> 第 18 章 《IP 重用与集成》更详细地说明了 IPXACT。
2. IP Core — 选择这个选项的时候,你的 IP 会被输出成能被输入到 XPS 去的格式。
3. SysGen — 这个选项让你能把结果 RTL 文件输出成一个可以用在 System Generator 的设计中的包。
第 14 章 《高层综合中的亮点》中会详细介绍 Vivado HLS。
13.3.5 选择正确的 IP 创建方法
在选择 IP 创建方法的时候,你必须决定什么是最重要的:实现最高运算频率、 利用最少的硬件资源、最短的开发时间,还是折中。你还必须考虑你或你的团队对于哪种方法最具经验,以及采用不熟悉的方法时所需的学习曲线的问题。如果某种格式具有仿真模型,比如 MATLAB/Simulink 或 C/C ,你很有可能可以利用它们,然后用某个方法从中产生 IP,比如 HDL Coder 或 Vivado HLS。
13.4 仿真与文档
在构建起一组定制 IP 的时候,无论是个人还是商业用途,重要的是确保每个模块功能都是正确的。最不愿意看到的是某个客户联系你说你卖给他的那个 IP 不能用!要确保一切正常,最好的办法就是要做大量的仿真。
还有一件重要的事情,就是每个 IP 模块需要有恰当的文档说明,这样当某个客户想要把你的 IP 放进他的设计中去的时候,就能准确地知道它的工作原理。这当然也适用于你自己在几年后还要在产品中使用自己的 IP的时候。详尽的文档能很好地帮助你回想起自己的 IP 的工作原理。
这一节我们会讨论用 Vivado Design Suite 所提供的工具,以及一些相关的第 三方工具来做 IP 的仿真和文档。
13.4.1 仿真
IP 的仿真在设计阶段的很多不同时刻都是极为重要的。如果从非 RTL 的来源创建 IP,就必须首先确保设计源本身工作是正确的。当然,不同的 IP 源,仿真的过程是不同的。接下去会详细解释这里提到过的每个 IP 源的仿真,以及那些能帮助你验证最终的 RTL IP 文件的工具。
RTL 仿真
仿真 RTL 文件的时候有很多可用的选项,首先是可以使用 Vivado 内置的仿真器。Vivado IDE 带有一个 HDL 仿真器,能在 Zynq-7000 设计流程的各个点上仿真你的设计。
Vivado 仿真器支持以下语言 [5]:
• Verilog IEEE-STD-1364-2001
• VHDL IEEE-STD-1076-1993
• Standard Delay Format (SDF) 版本 2.1
• VITAL-2000
Vivado IDE 里没有对 SystemC 文件的仿真,但是可以由第三方 RTL 仿真产品来 做,也可以由另外在 Vivado HLS 那节里介绍的 Vivado HLS 工具来做。
下面列出了 Vivado 仿真器所支持的特性 [5]:
• 源码调试
• Value Change Dump (VCD) 文件导出
• SDF 标记
• Hard IP 包的本地化支持
• 用于功率分析和优化的 SAIF 导出
• 多线程编译
• 混合语言仿真 (VHDL 及 Verilog)
• 实时波形更新
• 内置的 Xilinx 仿真库
除了内置的 Vivado 仿真器,Xilinx 还支持下列第三方仿真器:
• Mentor Graphics Questa Sim/ModelSim (集成在 Vivado IDE 中)
• Cadence® Incisive® Enterprize Simulator (IES)
• Synopsys VCS® 及 VCS MX
• Aldec Active-HDL 及 Rivera-PRO (兼容,但不是Xilinx Technical support 正式支持的。)
图 13.5 给出了 Vivado RTL 仿真流程的例子。
图 13.5: Vivado RTL 仿真流程
System Generator
由于 System Generator 是基于 Simulink 模型平台的,System Generator 设计 的仿真过程相对要容易一些。一旦所有的包都连接好了,时序参数也设置好了,只要点击 “ 运行 ” 按钮就可以执行仿真了。仿真的数据有多种呈现的方式,比如内置的 Scope 模块可以显示时域和频域图。数据也可以输出给其下的 MATLAB 框架来做进一步的分析,并用强大的画图工具来显示。
一旦你的 IP 的 RTL 代码已经产生了,System Generator 工具就能做硬件辅助仿真来验证设计。这样就能把一个在 FPGA上运行的设计直接放进 System Generator 的仿真中,从而能同时给 System Generator 模型和实现了的 RTL 代码提供激励。然 后,仿真和硬件辅助仿真的两个输出就被集中并做比较,这样你就能检查所实现的RTL 设计是否有效。
HDL Coder
因为 HDL Coder 是在 MATLAB 和 Simulink 内运行的,所以一切 IP 设计的仿真就 和仿真一个 M-code 文件或 Simulink 模型是一样的。这样就能用和其他 MATLAB/Simulink 仿真一样的方式,用丰富的画图工具来呈现你的仿真结果。
HDL Coder 产生了 RTL 代码后,可以用 HDL Verifier 工具来将它的功能与原来的 IP 模型做比较。它支持多种验证技术,包括通过 HDL 仿真器接口 (比如 MentorGraphics 的 ModelSim 和 QuestSim 和 Cadence 的 Incisive)的辅助仿真,另外也支持通过 FPGA 环路 (FPGA-in-the-loop)的硬件辅助仿真。FPGA 环路仿真是由在开发板上创建并运行FPGA实现的自动过程来完成的。FPGA环路验证的过程和在SystemGenerator 仿真那节中描述的是类似的。
使用HDL Verifier的HDL辅助仿真和硬件辅助仿真,就能够在MATLAB/Simulink 模型和所产生的 RTL 代码上使用相同的输入激励。然后,这两个设计的输出可以做比较来验证设计并识别出错误。
Vivado HLS
HLS 能自动针对所产生的设计,使用原始的 C 测试集文件,创建用于辅助仿真的脚本 [6]。这样原本的基于 C 的设计和所产生的 RTL 文件就能用相同的输入激励来测试,然后对应的输出可以比较来找出差异。这样就不再需要创建 RTL 测试集文件了。
HLS 支持下列 RTL 仿真器 [6]:
• ModelSim
• VCS
• Open SystemC Initiative (OSCI)
• NCSim• XSim
• ISim
• Riviera
VCS、NCSim 和 Riviera 这些 HDL 仿真器只能在 Linux 上使用 [6]。如果生成了 SystemC 代码,内置的 SystemC 内核可以用来做验证。
C 和 SystemC 仿真器支持定点数据类型,如果使用的话,仿真结果和所实现的 RTL 文件是能匹配的。这样就能用快速的 C 级别的仿真来做比特精确、量化和溢出的效果分析。
作为 RTL 辅助仿真过程的一部分,HLS 产生 SystemC 的包裹器,能针对 RTL 模块建立适配器代码。然后把这个 C 的代码包裹器实例化进已有的 C 的测试集文件。这样的一个辅助仿真包裹器如图 13.6 所示。
图 13.6: RTL 辅助仿真包裹器
13.4.2 文档
无论商业、开源还是内部使用,文档都是所有 IP 重要的组成部分。好的 IP 文档应该能够让从没用过这个 IP 模块的用户理解、连接并在自己的设计中实现它,而不需要任何其他帮助。就算是自己创建 IP,文档也能够成为创建者的良好备忘录。
这一节,我们要概述本章详细提到过的 IP 创建工具的文档功能和方法。
System Generator
System Generator 有一个功能,在生成 IP 的时候,可以创建接口文档。这是一个 HTML 的文档,指明了要生成的 IP 设计的接口,并包括以下内容:
- 介绍 — 提供对文档的简要介绍。
- 端口接口 — 这一部分详细描述要生成的 IP 的端口接口。用表格列出这个设计的所有的输入和输出,每一项包括以下细节内容:
- 名称 — 顶层端口名称方向 — 端口方向, 如 `in, out` 或 `inout`。
- HDL 类型 — 端口 HDL 类型,如 `std_logic, std_logic_vector`。
- 类型 — 连接的信号类型,如 `data, clock, clock enable`。
- System Generator 类型 — System Generator 内的信号类型,如 `ufix16_15, sfix12_11` 等。
- 周期 — 所给信号的采样周期。多速率实现的数据在这个 HTML 文档的其他部分提供。
- 注释 — 如果在原本的 System Generator 设计中带有进一步的说明的话,出现在这里。
- 多数率实现 — 如果生成了多速率的设计,这个部分就会有和时钟使能信号 网络有关的数据,这个网络用来在整个设计中控制各种时钟信号。另外还包括一个总的时序图,以帮助解释不同的时钟域的实现。
- 设计文件 — 这一部分列出由 System Generator 在 IP 生成过程中所创建所有的 HDL 文件。这个列表以从顶层模块向下到最低层的顺序显示,以助于做设计编译。另外也给出了每个 HDL 文件的简单说明,以及设计的简单框图。
- 设计统计 — 这一部分会以表格的形式呈现在 System Generator 模块中专用于设计生成的各种设置。列出来的设置包括:
- 编译目标 — 编译的目标,如 IP Catalog (IP 目录)、HDL Netlist(HDL 网络表)或 Hardware Co-simulation (硬件辅助仿真)。
- 元件 — 目标 Xilinx FPGA/Zynq 元件。
- 综合工具 — 目标的综合工具,如 Vivado 或 ISE。
- 多速率实现 — 多速率的实现方法,如时钟使能。
- 工具 — 列出用来生成设计的工具及其版本。
HDL Coder
从 MATLAB 算法或 Simulink 模型产生 IP 核的时候,HDL Coder 会给出选项来产 生 HDL Code Generation Report (HDL 代码生成报告)。这是一个 HTML 格式的报 告,包括以下部分 [2]:
- 概述 — 这里给出了用于生成 IP 的基础设置的总体概述,以及所生成的 IP 的数据。这里所给出的数据包括 [2]: - IP 核的名称和版本。 - 目标的 IP 目录。 - 目标语言,如 VHDL 或 Verilog。 - 源模型的名字和版本。
- 目标接口配置 — 这部分包括处理器 /FPGA 同步化模型 (独自运行还是协同运算)以及在创建 IP 时指定的各种接口。这些细节包括 [2]:
- 端口名称 — IP 的输入和输出端口的名称。
- 端口类型 — 端口方向类型,如输入或输出。
- 端口数据类型 — 在 MATLAB/Simulink 中用的数据的类型,如 `ufix16_15, sfix12_11` 等。
- 目标平台接口 — 接口类型,如 `AXI4-Lite, AXI4-Stream` 或外部端口。
- 位范围 / 地址 /FPGA 引脚 — 根据所选择的目标平台接口的不同,这个部分包括了位范围、处理器可访问的寄存器的地址或用于外部端口的指定的FPGA 引脚。
- 寄存器地址映射 — 根据给 IP 模块所制定的接口的不同,这个部分包含了设计中任意嵌入式处理器可访问的寄存器的具体信息。这个部分里有寄存器的名字、从基址开始的对应的地址偏移量,和对其操作的简单说明。
- IP 核用户指南 — 这个部分给出所生成的 IP 的操作和连接的简要概述。它由三个部分组成 [2]:
- 操作理论 — 给出芯片的操作的简要概述,包括 IP 的主从控制和通过寄存器访问的重启和使能信号。
- 处理器 /FPGA 同步化 — 这里给出了对 FPGA 同步化模型(独自运行还是协同计算)的描述,以及在 IP 核和处理器之间数据读 / 写的过程。
- 环境集成 — 这里给出如何把新生成的 IP 集成进 Xilinx 开发环境的资料。
- IP 核文件列表 — 这里给出链接到 HDL Coder 产生的各种文件的超链接,以及到 IP 核目录的一个超链接。
13.5 本章回顾
本章我们介绍了知识产权的概念和 IP 包的使用,以及最近 IP 子系统在业界的趋势。介绍了 Vivado Design Suite 中的各种让你创建和维护自己的 IP 集的方法, 包括 HDL、Vivado HLS 和 System Generator。也讨论了 MathWorks HDL coder 这个第三方工具。
重点在于对于所创建的所有 IP 的正确文档、仿真和测试的需要上,并且着重突出了前面介绍的所有 IP 创建工具的各种仿真过程。也详细说明了工具中相应带有的文件创建选项。
13.6 参考文献
注意:所有的 URL 最后在 2014 年 7 月访问过。
[1] “IEEE Standard for IP-XACT, Standard Structure for Packaging, Integrating, and Reusing IP within Tool Flows”, IEEE Standard 1685-2009, February 2010.
[2] MathWorks, “HDL Coder User’s Guide”, R2014a, March 2014. 位于 : http://www.mathworks.co.uk/help/
[3] R. Sass and A. G. Schmidt, “Introduction” in Embedded Systems Design with Platform FPGAs: Principles and Practices, 1st. Ed, Morgan Kaufmann, 2010, pp 1 - 42.
[4] Xilinx, Inc, “Vivado Design Suite User Guide: Model Based DSP Design using System Generator”, UG897, v2014.1, April 2014.位于 : http://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_2/ug897-vivado-sysgenuser.pdf
[5] Xilinx, Inc, “Vivado Design Suite User Guide: Logic Simulation”, v2014.2, UG900, June 2014.位于 : http://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_2/ug900-vivado-logicsimulation.pdf
[6] Xilinx, Inc, “Vivado Design Suite User Guide: High-Level Synthesis”, UG902, v2014.1, May 2014.位于 : http://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_2/ug902-vivado-highlevel-synthesis.pdf
第二十五篇到此结束,下一篇将带来第二十六篇,开启第十四章,高层综合等相关内容。欢迎各位大侠一起交流学习,共同进步。
END
后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。
大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!