第1章 Vivado设计套件 1
1.1 单一的、共享的、可扩展的数据模型 2
1.2 标准化XDC约束文件——SDC 3
1.3 多维度解析布局器 4
1.4 IP封装器、集成器和目录 6
1.5 Vivado HLS把ESL带入主流 8
1.6 其他特性 10
1.6.1 快速的时序收敛 10
1.6.2 提高器件利用率 11
1.6.3 增量设计技术 11
1.6.4 Tcl特性 12
1.7 Vivado按键流程执行设计项目 13
1.7.1 KC705开发板实现计数器 14
1.7.2 在Nexys4开发板实现计数器 18
第2章 7系列FPGA架构和特性 21
2.1 7系列结构特点 21
2.1.1 采用统一的7系列架构 21
2.1.2 高性能和低功耗结合的工艺 23
2.2 扩展7系列的UltraScale架构 25
2.3 可配置逻辑模块CLB 27
2.3.1 Slice的结构和功能 28
2.3.2 SliceM配置为SRL 29
2.3.3 SliceM配置为分布式RAM 31
2.4 7系列专用模块:Block RAM/FIFO和DSP模块 34
2.4.1 Block RAM/FIFO 34
2.4.2 DSP模块 38
2.4.3 I/O模块 42
2.4.4 时钟资源 44
2.5 由RTL代码推论实验 49
2.5.1 计数器程序 49
2.5.2 实验结果 50
第3章 创建设计项目 53
3.1 wave-gen设计概述 53
3.2 启动Vivado 58
3.3 仿真设计 66
3.3.1 添加仿真需要的信号 67
3.3.2 运行仿真和分析仿真结果 68
3.4 利用时钟向导配置时钟子系统 69
3.5 产生IP集成器子系统设计 71
3.5.1 产生IP集成器模块设计 71
3.5.2 定制IP 72
3.5.3 完成子系统设计 74
3.5.4 产生IP输出产品 75
3.5.5 例示IP到设计中 76
第4章 RTL级分析和设计网表文件 78
4.1 网表文件 78
4.1.1 设计项目数据库 78
4.1.2 网表文件 79
4.1.3 推演的设计网表文件 79
4.1.4 综合的设计网表文件 81
4.1.5 实现的设计网表文件 82
4.2 RTL设计分析 83
4.2.1 RTL网表文件 84
4.2.2 RTL设计规则校验 84
4.2.3 浏览设计的层次 85
4.2.4 平面规划布图 85
4.2.5 时钟规划布图 86
4.3 网表文件的设计对象 86
4.3.1 通过get_*命令来寻找网表中的对象 87
4.3.2 设计层次 87
4.3.3 pin的层次与名称 87
4.3.4 层次展平化 88
4.3.5 Nets的层次分段 88
4.4 设计对象特性 88
4.4.1 查看对象的特性 89
4.4.2 Cell的特性 90
4.4.3 Port的特性 91
4.4.4 Pin的特性 91
4.4.5 用户自定义特性 92
4.4.6 使用特性过滤对象 92
4.5 对象连通性 93
4.5.1 层次结构下get_pins命令的使用 94
4.5.2 GUI的使用 94
4.5.3 图形化帮助界面 96
4.6 RTL分析实例 97
本章小结 102
第5章 设计综合和基本时序约束 103
5.1 设计综合 103
5.1.1 Vivado IDE的综合环境 104
5.1.2 Vivado IDE综合常用设置 104
5.1.3 Vivado IDE综合流程 106
5.1.4 Vivado支持SystemVerilog 107
5.1.5 Vivado工具的特点 107
5.2 基本的时序约束 108
5.2.1 静态时序通道 108
5.2.2 建立时间和保持时间校验 109
5.2.3 输入和输出的时序约束 110
5.2.4 编辑静态时序约束 113
5.2.5 约束查看器 115
5.3 综合报告 116
5.3.1 利用率分析报告 116
5.3.2 时序报告摘要 117
5.3.3 时钟网络分析(report_clock_network) 119
5.3.4 时钟关连分析(report_clock_interaction) 119
5.3.5 设计规则检查(report_drc) 120
5.3.6 噪声分析(report_ssn) 120
5.3.7 使用资源分析(report_utilization) 121
5.3.8 设计功耗分析(report_power) 122
5.3.9 功耗利用的细节 122
5.4 综合实例 123
5.4.1 运行综合设计 123
5.4.2 执行基本的网表分析 125
5.4.3 在时序约束管理器窗口校验存在的时序约束 127
本章小结 131
第6章 设计实现与静态时序分析 132
6.1 设计实现流程 132
6.1.1 网表优化(opt_design) 132
6.1.2 功率优化(power_opt_design) 134
6.1.3 布局设计(place_design) 134
6.1.4 物理优化(phys_opt_design) 135
6.1.5 布线设计(route_design) 135
6.2 设计实现报告 136
6.3 基础的静态时序分析 139
6.4 实现后的设计分析 141
6.4.1 在Device窗口观察时序通道 142
6.4.2 在原理图窗口中观察时序通道 143
6.4.3 FPGA编辑器 143
6.4.4 产生位流文件 145
6.5 设计实现实例 146
6.5.1 完成设计实现 146
6.5.2 资源利用率报告 147
6.5.3 生成基本时序报告 148
6.5.4 分析设计中关键时序通道 148
6.5.5 利用iMPACT编程KC705演示卡 152
本章小结 153
第7章 Tcl命令设计项目 154
7.1 Tcl的基本知识 154
7.1.1 变量 155
7.1.2 命令替换 155
7.1.3 数学表达式 156
7.1.4 反斜杠替换 156
7.2 基于项目的设计 156
7.2.1 设计项目目录和文件 156
7.2.2 项目运行管理器 158
7.2.3 管理运行 160
7.2.4 约束管理 161
7.2.5 基于项目设计流程实例 162
7.3 非项目的批作业流程 167
7.3.1 产生RTL设计的推敲过的网表文件 168
7.3.2 产生综合设计 168
7.3.3 随后的进程 169
7.3.4 约束管理 169
7.3.5 非项目批作业流程实例 170
7.4 脚本文件编写 175
第8章 同步设计技术 179
8.1 概述 179
8.1.1 同步设计 179
8.1.2 异步输入信号 180
8.1.3 亚稳态信号存在的危害 181
8.2 单比特同步电路 182
8.2.1 求解亚稳态 182
8.2.2 亚稳态的消释电路 182
8.2.3 单比特同步电路的约束条件 183
8.2.4 单比特同步电路的跨时钟域约束 184
8.2.5 复位桥 185
8.3 总线同步电路 186
8.3.1 总线一致性 186
8.3.2 低速总线同步电路 187
8.3.3 总线同步电路的约束 187
8.3.4 同步计数序列 188
8.3.5 时钟交互FIFO的结构 191
8.3.6 时钟交互FIFO的约束 191
8.4 时钟和同步器 193
8.4.1 时钟之间的关系 193
8.4.2 分析时钟交互 194
8.4.3 时钟交互分析报告 195
8.4.4 使用最大延迟分析时钟交互 196
8.5 复位实验 196
8.5.1 异步复位实验 196
8.5.2 无复位实验 200
8.5.3 同步复位实验 202
8.5.4 高扇出同步复位实验 204
本章小结 207
第9章 HDL编码技巧 208
9.1 概述 208
9.2 控制集Control Sets 210
9.2.1 FPGA中的寄存器资源 210
9.2.2 控制集Control Sets 212
9.3 控制信号设计要点 216
9.3.1 控制端口使用规则 216
9.3.2 控制信号的问题 216
9.3.3 低电平有效控制信号的问题 217
9.4 置位/复位信号的使用 218
9.4.1 复位的类型 218
9.4.2 全局复位与GSR 219
9.4.3 同步置位/复位信号优势 219
9.4.4 HDL编码中复位信号同步化 220
9.5 其他设计要点 221
9.5.1 I/O寄存器使用要点 221
9.5.2 Block RAM使用要点 222
9.5.3 时钟使能要点 222
9.5.4 DSP应用中的加法器树 222
9.5.5 综合选项要点 223
9.5.6 编码方式改善可靠性、性能、功耗 223
9.6 设计实例 224
本章小结 230
第10章 时序收敛 231
10.1 基线——Baselining 231
10.1.1 求解时序收敛 231
10.1.2 基线设计 232
10.1.3 设置时序报告找根源 233
10.1.4 综合/优化后的时序结果 234
10.1.5 布局布线后的时序结果 235
10.1.6 提取时序信息 236
10.2 解决常见的时序瓶颈 236
10.2.1 高扇出网线 236
10.2.2 长逻辑通道 237
10.3 最后里程的策略 239
10.3.1 时序达标的策略 239
10.3.2 综合的策略 240
10.3.3 物理优化 241
10.3.4 实现的策略 243
10.3.5 增量布局 244
10.3.6 关键电路预先布线 245
10.3.7 避免过渡约束 245
10.4 时序收敛实验 246
10.4.1 基线方法时序收敛流程 246
10.4.2 优化内部路径——基线 247
10.4.3 执行设计的基线实现 250
10.4.4 生成时序报告和分析路径 250
10.4.5 优化整个芯片 253
10.4.6 添加时序例外和精细调整设计 254
本章小结 254
第11章 硬件诊断 255
11.1 设计诊断概述 255
11.1.1 诊断方法 255
11.1.2 Vivado逻辑分析仪 256
11.1.3 Vivado逻辑诊断好处 256
11.2 Vivado逻辑诊断IP核 257
11.2.1 ILA核 258
11.2.2 VIO核 258
11.2.3 标志诊断 259
11.2.4 诊断核集线器 259
11.3 逻辑诊断探测流程 259
11.3.1 网表插入流程 260
11.3.2 HDL例示流程 262
11.4 硬件诊断实验 263
11.4.1 HDL例示法添加ILA核 263
11.4.2 系统内诊断uart_led设计 267
11.4.3 网表插入法添加诊断核 274
11.4.4 添加VIO诊断核 277
第12章 Vivado HLS 281
12.1 高级综合 281
12.1.1 高级综合的调度和装配 281
12.1.2 数据通道+控制器架构 282
12.1.3 理解Vivado HLS 285
12.2 高级综合的优化方法 291
12.3 Vivado HLS设计例子 292
12.3.1 HLS工具的流程 292
12.3.2 HLS生成IP核 298
第13章 嵌入式系统Zynq设计 305
13.1 Zynq概述 305
13.2 Zynq设计入门 306
13.2.1 Vivado工程创建 306
13.2.2 由Vivado创建Zynq嵌入式系统 308
13.2.3 SDK应用程序编写 313
13.3 ZYNQ嵌入式系统调试方法 320
13.3.1 Vivado硬件调试 320
13.3.2 使用SDK进行ZYNQ debug 323
13.4 Booting Linux on ZedBoard 327
13.4.1 创建FSBL.elf 327
13.4.2 从SD卡启动Linux 328
13.4.3 从QSPI启动Linux 330