书籍作者:何宾 | ISBN:9787121349379 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:5654 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书系统地介绍了Xilinx新一代集成开发环境Vivado 2018的设计方法、设计流程和具体实现。全书共11章,内容包括Xilinx新一代UltraScale结构、Vivado集成设计环境导论、Vivado工程模式基本设计实现、Vivado非工程模式基本设计实现、创建和封装用户IP核流程、Vivado高级约束原理及实现、Vivado调试工具原理及实现、Vivado部分可重配置原理及实现、Vivado HLS原理详解、Vivado HLS实现过程详解、HDMI显示屏驱动原理和实现。 本书参考了Xilinx新一代的Vivado 2018设计套件设计资料,理论与应用并重,将Xilinx新一代的设计理论贯穿在具体的设计实现中。
何宾 任教于北京化工大学信息学院,长期从事电子设计自动化方面的教学和科研工作,与全球多家知名的半导体厂商和EDA工具厂商大学计划保持紧密合作。目前已经出版EDA方面的著作共20余部,内容涵盖电路仿真、电路设计、FPGA、单片机、嵌入式系统等。典型的代表作有《Xilinx FPGA设计**指南》《Xilinx All Programmable Zynq-7000 SoC设计指南》《Altium Designer13.0电路设计、仿真与验证**指南》《Xilinx FPGA数字设计-从门级到行为级的双重描述》《Xilinx FPGA数字信号处理**指南-从HDL、模型到C的描述》《模拟与数字系统协同设计**指南-Cypress集成开发环境》。
本书特点
内容全面:本书内容涵盖了现场可编程门阵列器件的内部结构, Vivado 2018集成开发环境及其在工程模式和非工程模式下的设计流程,IP的封装和调用,高级约束、部分可重配置、高级综合工具,以及SelectIO资源的高级应用(HDMI驱动)。
解读详细:对Vivado 2018集成开发环境的一些具体细节问题进行更深入的分析与
讲解,如UltraScale器件内部结构的原理和使用方法、创建不包含源文件的IP核方法、VIO的原理和应用、基于工程的部分可重配置实现、高级综合工具详解,以及SelectIO资源的高级应用。
实例丰富:为了帮助读者全面掌握Vivado 2018集成开发工具的使用方法,本书配
套提供近50个设计实例,这些设计实例基本覆盖了Vivado 2018集成开发环境所提供的设计功能。
前 言
全球知名的可编程逻辑元器件生产厂商——美国Xilinx公司,于2012年发布了新一代Vivado集成开发环境,使得新一代FPGA的设计环境和设计方法发生了重大变化。2014年年初,Xilinx新一代UltraScale结构的FPGA也进入量产阶段。这些都标志着未来在高性能数据处理方面(如人工智能、云计算和物联网等),FPGA将发挥越来越重要的作用。
Xilinx新一代集成开发环境Vivado突出基于知识产权(Intellectual Properity,IP)核的设计方法,更加体现系统级设计的思想,进一步增强了设计者对FPGA底层物理约束和时序约束能力,这样设计者可以尝试选择不同的设计策略,然后评估在不同策略下的最终实现结果,从中找到最佳的设计方案。
Vivado设计套件所集成的高级综合工具HLS,真正实现了从软件算法到FPGA物理硬件实现的自动转换,加速了算法模型的构建与实现过程,显著提高了设计效率,缩短了产品的上市时间,并将FPGA的设计方法从传统的基于HDL的RTL级设计提高到了基于C/C++/SystmC的高层次设计,为FPGA的设计方法带来了一场深刻的变革。
本书是在《Xilinx FPGA设计权威指南——Vivado 2014集成开发环境》(电子工业出版社,2015)的基础上,针对读者提出的意见和建议,对原书进行了大幅度修订。主要修订内容包括:
(1)采用Xilinx公司最新的Vivado 2018设计套件,书中所有的设计实例均在Vivado 2018设计套件中进行了验证。
(2)在介绍UltraScale结构时,增加了对内部单元原理和用法的进一步解释与说明,用于帮助读者能够正确地理解并掌握Xilinx FPGA底层原语的原理及使用方法,以实现RTL级上的最佳设计。
(3)在介绍第2章和第3章内容时,重新提供了设计实例,并增加了设计实例的难度,以帮助读者能够进一步学习和掌握Vivado设计套件在工程模式和非工程模式下的完整设计流程,并增加了对一些设计流程细节的说明。此外,对从用户HDL代码中生成HDL例化模板的方法进行了详细介绍。
(4)在第5章介绍IP封装和调用的内容时,增加了不包含源文件的IP封装和调用的方法。
(5)在第7章介绍Vivado调试工具时,增加了虚拟输入输出(Virtual Input Output,VIO)IP核在调试设计中的应用。
(6)在第8章介绍部分可重配置原理及实现的内容时,增加了工程模式下的可重配置实现过程,以及部分重配置控制器PRC的原理及应用。
(7)考虑Vivado HLS工具正逐渐大规模广泛应用于Xilinx FPGA设计中,因此本书大幅度增加了对HLS原理内容的介绍,使所涵盖的内容更全面。本次修订后,将HLS相关内容扩展为两章,分别介绍HLS原理和实现过程。并且,对HLS实现过程的一些细节问题进行了进一步的详细说明,并对设计实例中的一些代码和用户策略进行了修正,以满足读者对掌握HLS设计方法的要求。
参加本书编写的人员还有王中正、张艳辉和汤宗美。其中,王中正参与第3章和第6章设计实例的验证,张艳辉参与第7章设计实例的验证,汤宗美参与第8章设计实例的验证。全书由何宾统稿和定稿。
本书的修订得到Xilinx大中华区新任大学计划经理陆佳华先生和Xilinx亚太区传媒总监张俊伟女士的大力支持和帮助,他们为本书的编写提供了大量的资料和硬件设计平台。回想起来,2008年作者与Xilinx大学计划建立正式的合作关系,到今年整整十年了。在这十年间,相继得到 Xilinx公司不同技术专家的无私帮助和鼎力支持,才能使作者编写并出版一系列Xilinx FPGA方面的著作和教材,以促进该技术在中国的普及和推广,进一步提升国内相关技术的科技实力。也要感谢电子工业出版社的编辑和相关工作人员,他们的辛勤工作保证了本书的高质量出版。
由于FPGA技术发展迅速,作者水平有限,书中难免会有疏漏之处,欢迎读者批评指正。
作 者
2018年9月于北京
目 录
第 章 Xilinx新一代UltraScale结构 1
1.1 UltraScale结构特点 1
1.2 可配置逻辑块 2
1.2.1 可配置逻辑块的特点 2
1.2.2 多路复用器 6
1.2.3 进位逻辑 9
1.2.4 存储元素 13
1.2.5 分布式RAM 16
1.2.6 只读存储器(ROM) 18
1.2.7 移位寄存器 21
1.3 时钟资源和时钟管理模块 23
1.3.1 时钟资源 25
1.3.2 时钟管理模块 28
1.4 块存储器资源 29
1.5 专用的DSP模块 33
1.6 SelectIO资源 36
1.7 高速串行收发器 41
1.8 PCI-E模块 43
1.9 Interlaken集成块 43
1.10 Ethernet模块 43
1.11 系统监控器模块 44
1.12 配置模块 44
1.13 互联资源 45
第 章 Vivado集成设计环境导论 46
2.1 Vivado系统级设计流程 46
2.2 Vivado功能和特性 48
2.3 Vivado中电路结构的网表描述 49
2.4 Vivado中工程数据的目录结构 50
2.5 Vivado中Journal文件和Log文件功能 50
2.5.1 Journal文件(Vivado.jou) 50
2.5.2 Log文件(Vivado.log) 51
2.6 Vivado两种设计流程模式 52
2.6.1 工程模式和非工程模式不同点比较 53
2.6.2 工程模式和非工程模式命令的不同 53
2.7 Vivado中的XDC文件 55
2.7.1 XDC的特性 55
2.7.2 XDC与UCF比较 55
2.7.3 约束文件的使用方法 56
2.7.4 约束顺序 56
2.7.5 XDC约束命令 58
2.8 Vivado集成设计环境的启动方法 59
2.9 Vivado集成设计环境主界面 60
2.10 Vivado设计主界面及功能 63
2.10.1 流程处理主界面及功能 63
2.10.2 工程管理器主界面及功能 64
2.10.3 工作区窗口 66
2.10.4 设计运行窗口 67
2.11 Vivado支持的属性 68
第 章 Vivado工程模式基本设计实现 76
3.1 创建新的设计工程 76
3.2 创建并添加一个新的设计文件 80
3.3 RTL详细描述和分析 85
3.3.1 详细描述的实现 85
3.3.2 生成HDL例化模板 87
3.4 设计综合和分析 89
3.4.1 综合过程的关键问题 89
3.4.2 设计综合选项 89
3.4.3 执行设计综合 92
3.4.4 综合报告的查看 96
3.5 设计行为级仿真 97
3.6 创建实现约束 102
3.6.1 实现约束的原理 102
3.6.2 I/O规划器功能 103
3.6.3 添加引脚约束 104
3.6.4 添加简单的时钟约束 109
3.7 设计实现和分析 111
3.7.1 设计实现原理 112
3.7.2 设计实现选项 112
3.7.3 设计实现及分析 117
3.7.4 静态时序分析 123
3.8 设计时序仿真 126
3.9 生成编程文件 127
3.9.1 配置器件属性 127
3.9.2 生成可编程文件 128
3.9.3 生成可编程文件选项 128
3.10 下载比特流文件到FPGA 130
3.11 生成并烧写PROM文件 132
第 章 Vivado非工程模式基本设计实现 136
4.1 非工程模式基本命令和功能 136
4.1.1 非工程模式基本命令列表 136
4.1.2 典型Tcl脚本的使用 137
4.2 Vivado集成开发环境分析设计 138
4.2.1 启动Vivado集成开发环境 138
4.2.2 打开设计检查点的方法 139
4.3 修改设计路径 139
4.4 设置设计输出路径 140
4.5 读取设计文件 140
4.6 运行设计综合 141
4.7 运行设计布局 142
4.8 运行设计布线 144
4.9 生成比特流文件 145
4.10 下载比特流文件 145
第 章 创建和封装用户IP核流程 148
5.1 Vivado定制IP流程 148
5.2 创建并封装包含源文件的IP 149
5.2.1 创建新的用于创建IP的工程 149
5.2.2 设置定制IP的库名和目录 150
5.2.3 封装定制IP的实现 151
5.3 调用并验证包含源文件的IP设计 155
5.3.1 创建新的用于调用IP的工程 156
5.3.2 设置包含调用IP的路径 156
5.3.3 创建基于IP的系统 158
5.3.4 系统行为级仿真 162
5.3.5 系统设计综合 165
5.3.6 系统实现和验证 166
5.4 创建并封装不包含源文件的IP 166
5.4.1 创建网表文件 166
5.4.2 创建新的设计工程 167
5.4.3 设置定制IP的库名和目录 168
5.4.4 封装定制IP的实现 168
5.5 调用并验证不包含源文件的IP设计 169
5.5.1 创建新的用于调用IP的工程 169
5.5.2 设置包含调用IP的路径 170
5.5.3 创建基于IP的系统 170
5.5.4 系统设计综合 171
第 章 Vivado高级约束原理及实现 173
6.1 时序检查概念 173
6.1.1 基本术语 173
6.1.2 时序路径 173
6.1.3 建立和保持松弛 175
6.1.4 建立和保持检查 176
6.1.5 恢复和去除检查 179
6.2 时序约束概念 180
6.2.1 时钟定义 180
6.2.2 时钟组 186
6.2.3 I/O延迟约束 189
6.2.4 时序例外 192
6.3 生成时序报告 205
6.4 添加时序约束 212
6.4.1 时序约束策略1 212
6.4.2 时序约束策略2 214
6.5 物理约束原理 219
6.5.1 网表约束 219
6.5.2 布局约束 220
6.5.3 布线约束 221
6.6 布局约束实现 223
6.6.1 修改综合属性 224
6.6.2 布局约束方法 224
6.7 布线约束实现 227
6.7.1 手工布线 227
6.7.2 进入分配布线模式 228
6.7.3 分配布线节点 230
6.7.4 取消分配布线节点 230
6.7.5 完成并退出分配布线模式 230
6.7.6 锁定LUT负载上的单元输入 231
6.7.7 分支布线 231
6.7.8 直接约束布线 233
6.8 修改逻辑实现 233
6.9 配置约束原理 235
6.10 增量编译 235
6.10.1 增量编译流程 235
6.10.2 运行增量布局和布线 236
6.10.3 使用增量编译 238
6.10.4 增量编译高级分析 240
第 章 Vivado调试工具原理及实现 241
7.1 设计调试原理和方法 241
7.2 创建新的设计 242
7.2.1 创建新的FIFO调试工程 242
7.2.2 添加FIFO IP到设计中 243
7.2.3 添加顶层设计文件 246
7.2.4 使用HDL例化添加FIFO到设计中 247
7.2.5 添加约束文件 251
7.3 网表插入调试探测流程方法及实现 253
7.3.1 网表插入调试探测流程的方法 253
7.3.2 网表插入调试探测流程的实现 255
7.4 使用添加HDL属性调试探测流程 261
7.5 使用HDL例化调试核调试探测流程 262
7.6 VIO原理及应用 267
7.6.1 设计原理 267
7.6.2 添加VIO核 268
7.6.3 生成比特流文件 271
7.6.4 下载并调试设计 272
第 章 Vivado部分可重配置原理及实现 274
8.1 可重配置导论 274
8.1.1 可重配置的概念 274
8.1.2 可重配置的应用 275
8.1.3 可重配置的特点 278
8.1.4 可重配置术语解释 280
8.1.5 可重配置的要求 282
8.1.6 可重配置的标准 283
8.1.7 可重配置的流程 285
8.2 基于工程的部分可重配置实现 285
8.2.1 设计原理 285
8.2.2 建立可重配置工程 289
8.2.3 创建新的分区定义 291
8.2.4 添加新的可重配置模块 292
8.2.5 设置不同的配置选项 294
8.2.6 定义分区的布局 298
8.2.7 执行DRC 301
8.2.8 实现第一个运行配置并生成比特流文件 302
8.2.9 实现第二个运行配置并生成比特流文件 304
8.2.10 实现第三个运行配置并生成比特流文件 304
8.2.11 实现第四个运行配置并生成比特流文件 305
8.2.12 下载不同运行配置的部分比特流 305
8.3 基于非工程的部分可重配置实现 307
8.3.1 查看脚本 307
8.3.2 综合设计 309
8.3.3 实现第一个配置 310
8.3.4 实现第二个配置 315
8.3.5 验证配置 317
8.3.6 生成比特流 317
8.3.7 部分重配置FPGA 318
8.4 部分重配置控制器PRC的原理及应用 320
8.4.1 部分重配置控制器原理 320
8.4.2 实现原理 324
8.4.3 创建和配置新的设计 325
8.4.4 添加ILA核 327
8.4.5 添加和设置PRC核 328
8.4.6 设置不同的配置选项 331
8.4.7 定义分区的布局 334
8.4.8 实现第一个运行配置并生成比特流文件 335
8.4.9 实现第二个运行配置并生成比特流文件 337
8.4.10 实现第三个运行配置并生成比特流文件 337
8.4.11 创建板支持包工程 338
8.4.12 创建应用程序工程 339
8.4.13 创建zynq_fsbl应用 343
8.4.14 创建启动镜像 343
8.4.15 从SD卡启动引导系统 345
第 章 Vivado HLS原理详解 347
9.1 高级综合工具概述 347
9.1.1 高级综合工具的功能和特点 347
9.1.2 Vivado HLS工具的优势 348
9.1.3 HLS中使用术语说明 349
9.1.4 从C中提取硬件结构 350
9.1.5 不同的命令对HLS综合结果的影响 352
9.2 高级综合工具调度和绑定 354
9.2.1 高级综合工具调度 355
9.2.2 高级综合工具绑定 355
9.3 C代码的关键属性 356
9.3.1 函数 357
9.3.2 类型 357
9.3.3 循环 364
9.3.4 数组 366
9.3.5 I/O端口 366
9.3.6 运算符 367
9.4 C代码级和RTL级算法验证 368
9.5 添加命令 370
9.6 延迟和吞吐量的概念 373
9.6.1 设计延迟 373
9.6.2 设计吞吐量 374
9.7 改善延迟 374
9.7.1 延迟最小化 374
9.7.2 用户延迟的定义 375
9.7.3 循环的处理 377
9.8 改善吞吐量 380
9.8.1 数据流优化 381
9.8.2 流水线优化 384
9.9 性能瓶颈――数组 390
9.9.1 数组分割 391
9.9.2 数组重组 394
9.9.3 数据打包 395
9.10 改善面积和资源 396
9.10.1 绑定配置 396
9.10.2 分配命令 397
9.10.3 指定资源 397
9.10.4 函数内联 398
9.10.5 循环合并和平坦化 401
9.10.6 映射数组 401
9.10.7 任意精度整数 403
9.11 I/O类型 404
9.11.1 组合和时序逻辑设计 404
9.11.2 Vivado HLS I/O选项 405
9.11.3 模块级协议说明 408
9.11.4 端口级I/O协议 412
9.12 命令和编译指示 422
第 章 Vivado HLS实现过程详解 425
10.1 FIR滤波器不同语言的描述方式 425
10.1.1 C语言描述风格 425
10.1.2 C++语言描述风格 427
10.1.3 SystemC语言描述风格 428
10.2 Vivado HLS不支持的操作 429
10.3 测试平台编码 431
10.4 指针的使用 432
10.5 流的使用 437
10.6 支持库 438
10.6.1 FFT 439
10.6.2 FIR 442
10.6.3 移位寄存器 446
10.6.4 线性算法库 447
10.6.5 OpenCV库 448
10.7 Vivado HLS数字系统实现 453
10.7.1 基于HLS实现组合逻辑 453
10.7.2 基于HLS实现时序逻辑 468
10.7.3 基于HLS实现矩阵相乘 476
第 章 HDMI显示屏驱动原理和实现 495
11.1 HDMI的发展历史 495
11.2 HDMI视频显示接口定义 496
11.3 HDMI链路结构 497
11.4 HDMI链路时序要求 499
11.5 HDMI编码算法 500
11.6 HDMI并行编码数据转换原理及实现 504
11.6.1 数据并行-串行转换 505
11.6.2 三态并行-串行转换器 505
11.6.3 OSERDESE2原语 505
11.6.4 TMDS信号转换模块 508
11.6.5 HDMI并行编码数据转换的实现 508
11.7 系统整体设计结构 510
附录 a7-edp-1开发板原理图 512