第1章 可编程逻辑器件设计流程导论 1
1.1 设计流程概述 1
1.2 设计输入和综合 3
1.2.1 层次化设计 4
1.2.2 原理图输入 4
1.2.3 HDL输入和综合 5
1.3 设计实现 6
1.4 设计验证 8
1.4.1 仿真 9
1.4.2 静态时序分析 12
1.4.3 电路验证 13
1.5 FPGA设计技巧概论 13
第2章 可编程逻辑器件设计方法 16
2.1 可编程逻辑器件基础 16
2.1.1 可编程逻辑器件概述 16
2.1.2 可编程逻辑器件的发展历史 17
2.2 PLD芯片制造工艺 18
2.3 PLD芯片结构 19
2.3.1 CPLD原理及结构 19
2.3.2 FPGA原理及结构 20
2.3.3 CPLD和FPGA比较 24
2.3.4 PLD选择原则 25
2.4 Xilinx公司芯片简介 26
2.4.1 Xilinx CPLD芯片介绍 26
2.4.2 Xilinx FPGA芯片介绍 29
2.4.3 Xilinx PROM芯片介绍 38
第3章 VHDL高级设计技术 40
3.1 层次化设计 40
3.1.1 层次化设计的优缺点 40
3.1.2 在分层设计中使用综合工具 41
3.2 数据类型选择 42
3.2.1 使用Std_logic(IEEE1164) 42
3.2.2 声明端口 42
3.2.3 端口声明中的数组 43
3.3 混合语言设计 44
3.4 if和case语句比较 45
3.4.1 if语句设计描述 45
3.4.2 case语句设计描述 46
3.4.3 避免出现锁存器 46
3.5 逻辑结构设计 49
3.6 逻辑复制和复用技术 49
3.6.1 逻辑复制技术 49
3.6.2 逻辑复用(共享)技术 50
3.7 控制信号 51
3.7.1 全局置位/复位(GSR) 52
3.7.2 使用时钟使能引脚代替门控时钟 53
3.8 寄存器、锁存器、移位寄存器和RAMs的初始状态 54
3.9 有限自动状态机设计 55
3.9.1 有限状态机原理 55
3.9.2 有限状态机分类 55
3.9.3 有限状态机设计 58
3.10 例化元件和FPGA原语 61
3.10.1 例化FPGA原语 61
3.10.2 例化核生成器模块 61
3.11 属性和约束 62
3.12 全局时钟缓冲 64
3.13 高级时钟管理 66
3.14 专用的全局置位/复位资源 70
3.15 隐含编码 70
3.16 输入和输出的实现 71
3.17 IOB寄存器和锁存器 72
3.18 实现操作符及产生模块 77
3.18.1 DSP48中运算符实现和模型生成(Virtex-4和Virtex-5器件) 77
3.18.2 在乘法器中操作符实现和模型生成 78
3.18.3 计数器中操作符实现和模型生成 79
3.18.4 比较器中操作符实现和模型生成 80
3.18.5 编码器和解码器中操作符实现和模型生成 80
3.19 存储器实现 80
3.19.1 块RAM实现 81
3.19.2 例化块SelectRAM的编码实例 81
3.19.3 推断块SelectRAM 83
3.19.4 Virtex-4和Virtex-5中的块SelectRAM 83
3.19.5 实现分布式SeleetRAM 85
3.19.6 实现ROMs 87
3.19.7 实现FIFOs 89
3.20 实现移位寄存器 89
3.20.1 通用移位寄存器 89
3.20.2 实现线性反馈移位寄存器(LFSRs) 90
3.21 实现多路复用器 91
3.22 并行和流水线技术 92
3.22.1 并行设计技术 92
3.22.2 流水线设计技术 93
3.23 同步和异步单元处理技术 94
3.23.1 同步单元处理技术 94
3.23.2 异步单元处理技术 97
第4章 IP核设计技术 99
4.1 IP核分类 99
4.2 IP核优化 100
4.3 IP核生成 101
4.4 IP核应用 101
4.4.1 数字时钟模块使用 101
4.4.2 块RAM存储器使用 103
第5章 基于HDL的设计输入 107
5.1 软件环境 107
5.2 综合工具介绍 109
5.3 工程建立 109
5.4 设计描述 111
5.5 添加设计和检查 112
5.6 创建基于HDL的模块 113
5.7 IP核产生和例化 114
5.7.1 IP核的生成 115
5.7.2 IP核的例化 116
第6章 基于原理图的设计输入 118
6.1 工程建立 118
6.2 设计描述 119
6.3 创建原理图模块 120
6.3.1 原理图编辑器操作 120
6.3.2 定义模块符号 121
6.3.3 创建模块符号 124
6.4 创建状态图模块 124
6.4.1 添加状态 125
6.4.2 添加迁移 126
6.4.3 添加行为 127
6.4.4 添加复位条件 127
6.4.5 设计输出和添加 127
6.5 设计完成 128
第7章 设计综合和行为仿真 129
7.1 设计综合 129
7.1.1 行为综合描述 129
7.1.2 基于XST的综合概述 130
7.1.3 综合属性的设置 130
7.1.4 约束及设计综合的实现 139
7.1.5 RTL符号的查看 139
7.2 行为仿真的实现 140
7.2.1 生成测试向量 140
7.2.2 基于Modelsim行为仿真实现 143
7.2.3 基于ISE行为仿真实现 147
第8章 设计实现和时序仿真 150
8.1 实现过程概述及约束 150
8.1.1 实现过程概述 150
8.1.2 建立约束文件 150
8.2 实现属性参数设置 151
8.2.1 实现属性设置步骤 151
8.2.2 翻译属性选项 152
8.2.3 映射属性选项 153
8.2.4 布局布线属性 158
8.2.5 映射后静态时序报告属性 161
8.2.6 布局布线后静态时序报告属性 161
8.2.7 仿真模型属性 163
8.2.8 Xplorer属性 165
8.3 创建分区 166
8.4 创建时序约束 167
8.5 设计翻译 167
8.6 设计约束 168
8.6.1 设计约束概述 168
8.6.2 时序约束 169
8.6.3 引脚和面积约束 174
8.7 设计映射及时序分析 178
8.7.1 设计映射 178
8.7.2 使用时序分析评估块延迟 180
8.8 布局布线及验证 181
8.8.1 布局布线流程 181
8.8.2 布局布线的实现 182
8.8.3 布局布线验证 183
8.8.4 布局后时序评估 184
8.8.5 改变分区HDL 185
8.9 功耗分析 186
8.9.1 启动功耗分析器 186
8.9.2 XPower的操作流程 187
8.9.3 简易的功耗分析方法 189
8.10 时序仿真实现 192
8.10.1 时序仿真概述 192
8.10.2 使用ModelSim进行时序仿真 193
8.10.3 使用ISE仿真器进行时序仿真 197
第9章 设计下载 200
9.1 可编程逻辑器件配置接口 200
9.1.1 主串行模式 201
9.1.2 主SPI模式 202
9.1.3 主BPI模式 204
9.1.4 主并行模式 205
9.1.5 从并行模式 205
9.1.6 从串行模式 205
9.1.7 JTAG配置模式 206
9.2 配置属性 208
9.2.1 通用选项 208
9.2.2 配置选项 209
9.2.3 启动选项 211
9.2.4 回读选项 212
9.3 创建配置数据 213
9.3.1 配置属性设置 213
9.3.2 创建PROM文件 214
9.4 下载实现 216
9.4.1 下载环境 216
9.4.2 下载实现 216
9.4.3 JTAG诊断 221
9.4.4 建立SVF文件 222
第10章 ChipScope Pro调试工具 225
10.1 ChipScope Pro调试工具概述 225
10.2 ChipScope Pro核描述 227
10.2.1 ICON核 227
10.2.2 ILA核 227
10.2.3 VIO核 230
10.2.4 ATC2核 230
10.2.5 IBERT核 231
10.3 ChipScope Pro核插入器使用 232
10.3.1 ISE中插入器使用 232
10.3.2 ChipScope Pro核插入器特性 233
10.3.3 片内逻辑分析仪的使用 248
第11章 PlanAhead工具及应用 274
11.1 PlanAhead工具概述 274
11.2 I/O引脚分配 275
11.2.1 创建PinAhead工程 275
11.2.2 输入和分析I/O端口列表 277
11.2.3 创建和配置I/O端口 278
11.2.4 创建I/O端口接口 279
11.2.5 布局I/O端口 279
11.2.6 运行DRC和WASSO分析 283
11.2.7 输出I/O配置 285
11.3 导入网表的设计 286
11.3.1 创建新工程 286
11.3.2 查看芯片资源和时钟域 289
11.3.3 查看逻辑网表的层次 291
11.3.4 使用新网表和约束更新工程 292
11.4 设计分析和研究 297
11.4.1 显示设计统计信息 297
11.4.2 运行DRC 298
11.4.3 运行WASSO分析 299
11.4.4 查看逻辑层次 300
11.4.5 研究原理图内的逻辑 301
11.4.6 修改设计时序约束 303
11.4.7 导入和分析ISE实现结果 305
11.4.8 导入和分析Tree时序结果 306
11.5 分割设计 308
11.5.1 分割和布局顶层设计 308
11.5.2 调整视图选项 310
11.5.3 拆分和布局较低级物理块 311
11.5.4 察看设计时钟域 313
11.5.5 显示绑定网络的内容 313
11.5.6 调整物理块的布局和大小 313
11.6 实现设计 314
11.6.1 运行ExploreAhead来配置和启动运行 314
11.6.2 检查ExploreAhead结果 316
11.6.3 同时启动多个布局规划 317
11.6.4 输出布局规划用于实现 317
11.7 平面布局调整 318
11.7.1 分析ISE结果来调整平面布局 318
11.7.2 使用连接显示来识别到布局规划的逻辑 320
11.7.3 锁住关键逻辑 322
11.7.4 为减少阻塞创建额外的物理块 324
11.7.5 查看改善布局规划的结果 330