第1章 概述 1
1.1 数字电路基础及发展演变 1
1.2 CPLD/FPGA的介绍 2
1.3 设计语言及其方法的介绍 3
1.4 硬件语言与软件语言的区别 4
1.5 设计与验证流程 5
1.6 CPLD/FPGA的前景与展望 6
1.7 本章小结 9
1.8 思考与练习 9
第2章 CPLD/FPGA硬件结构 10
2.1 PLD的分类 10
2.2 乘积项结构的基本原理 12
2.3 查找表结构的基本原理 14
2.4 传统CPLD的基本结构 14
2.5 传统FPGA的基本结构 18
2.6 最新CPLD的基本结构 21
2.7 最新FPGA的基本结构 25
2.8 CPLD与FPGA的选择 27
2.9 CPLD/FPGA的配置 27
2.10 本章小结 28
2.11 思考与练习 30
第3章 Verilog HDL语法基础 31
3.1 Verilog HDL的特点 31
3.2 Verilog HDL的描述方式 32
3.3 模块和端口 32
3.4 注释 34
3.5 常量、变量与逻辑值 34
3.6 操作符 35
3.7 操作数 38
3.8 参数指令 38
3.9 编译指令 38
3.10 系统任务和系统函数 39
3.11 实例1:串并转换程序设计 41
3.12 本章小结 43
3.13 思考与练习 43
第4章 Verilog的描述与参数化设计 45
4.1 数据流描述 45
4.1.1 数据流 46
4.1.2 连续赋值语句 46
4.1.3 延时 48
4.2 行为级描述 48
4.2.1 initial赋值语句 48
4.2.2 always赋值语句 49
4.2.3 时序控制 51
4.2.4 语句块 54
4.2.5 过程赋值语句 55
4.2.6 过程性连续赋值语句 60
4.3 结构化描述 60
4.3.1 实例化门 61
4.3.2 实例化其他模块 61
4.4 高级编程语句 63
4.4.1 if...else语句 63
4.4.2 case、casex、casez语句 65
4.4.3 for语句 69
4.4.4 while语句 69
4.4.5 forever语句 71
4.4.6 repeat语句 71
4.5 参数化设计 72
4.6 混合描述 75
4.7 实例2:I2C Slave控制器的设计 77
4.7.1 I2C总线简介 77
4.7.2 I2C Slave可综合代码设计 77
4.8 本章小结 87
4.9 思考与练习 87
第5章 有限状态机设计 89
5.1 有限状态机的基本概念 89
5.1.1 Moore型状态机 90
5.1.2 Mealy型状态机 90
5.1.3 状态机的描述 90
5.2 状态机描述的基本语法 91
5.3 状态编码 93
5.3.1 二进制码(Binary码) 93
5.3.2 格雷码(Gray码) 93
5.3.3 独热码(one-hot码) 94
5.3.4 二—十进制码(BCD码) 95
5.4 状态初始化 96
5.5 Full Case与Parallel Case 97
5.6 状态机的描述 100
5.6.1 一段式状态机 100
5.6.2 两段式状态机 103
5.6.3 三段式状态机 105
5.6.4 小结 108
5.7 实例3:PCI Slave接口设计 109
5.7.1 PCI协议简介 109
5.7.2 PCI Slave可综合代码设计 112
5.8 本章小结 119
5.9 思考与练习 119
第6章 约束与延时分析 120
6.1 约束的目的 120
6.2 引脚约束及电气标准设定 121
6.2.1 引脚约束文件 121
6.2.2 代码注释约束 122
6.3 时序约束的基本概念 124
6.3.1 路径 125
6.3.2 时序约束参数 128
6.4 时序约束的本质 130
6.5 静态延时分析 131
6.6 统计静态延时分析 132
6.7 动态延时分析 133
6.8 实例4:建立时间和保持时间违例分析 133
6.9 时序违例及解决方式 134
6.10 实例5:四角测试中的时序分析 135
6.11 实例6:LPC Slave接口设计 136
6.11.1 LPC协议简介 136
6.11.2 LPC Slave可综合性代码设计 139
6.11.3 LPC协议约束设置 144
6.12 本章小结 144
6.13 思考与练习 144
第7章 RTL设计原则及技巧 146
7.1 RTL设计的主要原则 146
7.1.1 硬件原则 146
7.1.2 面积与速度原则 147
7.1.3 系统原则 147
7.1.4 同步原则 148
7.2 RTL设计的主要技巧 148
7.2.1 乒乓操作 148
7.2.2 流水线操作 149
7.2.3 资源共享操作 150
7.2.4 逻辑复用操作 153
7.2.5 串并转换操作 153
7.2.6 异步时钟域数据同步化操作 153
7.2.7 复位操作 154
7.3 组合逻辑设计 157
7.3.1 锁存器 157
7.3.2 组合逻辑反馈环路 161
7.3.3 脉冲产生电路 162
7.4 时序逻辑设计 162
7.4.1 门控时钟 162
7.4.2 异步计数器 162
7.4.3 次级时钟的产生 163
7.4.4 亚稳态 163
7.4.5 实例7:Tco引起的亚稳态分析 163
7.5 代码风格 165
7.6 实例8:信号消抖时的亚稳态及解决方案 165
7.6.1 信号消抖基本介绍 165
7.6.2 基于CPLD/FPGA的信号消抖设计 168
7.7 本章小结 170
7.8 思考与练习 170
第8章 仿真与Testbench设计 171
8.1 仿真概述 171
8.1.1 周期驱动 171
8.1.2 事件驱动 172
8.1.3 混合语言仿真 172
8.2 仿真器的选择 173
8.3 Modelsim简介与仿真 173
8.3.1 Modelsim简介 173
8.3.2 功能仿真 174
8.3.3 时序仿真 180
8.4 Testbench设计 182
8.4.1 时钟 182
8.4.2 值序列 184
8.4.3 复位 186
8.4.4 任务 187
8.4.5 函数 188
8.4.6 事件 188
8.4.7 并行激励 189
8.4.8 系统任务和系统函数 189
8.5 Testbench结构化 189
8.6 实例9:基于Modelsim的I2C SlaveTestbench设计 191
8.7 实例10:基于Modelsim的LPC Slave接口仿真设计 195
8.8 实例11:基于Modelsim的信号消抖程序仿真设计 201
8.9 本章小结 203
8.10 思考与练习 203
第9章 CPLD/FPGA的验证方法学 204
9.1 验证与仿真 204
9.2 验证与测试 205
9.3 验证的期望 205
9.4 验证的语言 206
9.4.1 e语言 207
9.4.2 SystemVerilog 207
9.4.3 SystemC 207
9.4.4 验证语言的分类 208
9.5 断言 208
9.6 验证的分类 208
9.6.1 形式验证 209
9.6.2 功能验证 210
9.7 代码覆盖 211
9.8 验证工具 212
9.9 验证计划 212
9.10 DFT 213
9.11 版本控制 214
9.12 实例12:基于FSM的SVA断言验证设计 214
9.12.1 SVA简介 214
9.12.2 基于FSM的SVA断言设计 215
9.13 本章小结 221
9.14 思考与练习 221
第10章 CPLD/FPGA的高级应用 222
10.1 基于DSP的FPG设计 222
10.1.1 DSP的发展及解决方案 224
10.1.2 基于DSP的FPGA设计 225
10.1.3 实例13:基于DDS的正弦波信号发生器的设计 229
10.2 基于嵌入式处理器的FPGA设计 232
10.2.1 硬核、固核与软核 233
10.2.2 基于嵌入式处理器的FPGA设计流程 234
10.2.3 基于嵌入式处理器的FPGA设计应用 235
10.3 典型的SOPC运用:Nios Ⅱ简介及应用 237
10.3.1 Nios Ⅱ简介 237
10.3.2 实例14:基于Nios Ⅱ软核处理器PWM控制器设计 242
10.4 基于HardCopy技术的FPGA设计 248
10.4.1 HardCopy简介 248
10.4.2 基于HardCopy技术的FPGA设计流程 249
10.5 嵌入式逻辑分析仪 250
10.6 本章小结 252
10.7 思考与练习 252
第11章 CPLD/FPGA系统设计 254
11.1 常用电平标准及其接口设计 254
11.1.1 常用电平标准 254
11.1.2 接口设计 256
11.1.3 接口设计的抗干扰措施 256
11.1.4 OC/OD门 257
11.1.5 三态门 257
11.2 信号完整性概述 258
11.2.1 信号完整性的基本原则 259
11.2.2 传输线的基本理论 259
11.2.3 反射与阻抗匹配 261
11.2.4 串扰 263
11.2.5 EMI 264
11.2.6 芯片封装 264
11.2.7 信号完整性的工具 265
11.3 高速设计与SERDES 265
11.3.1 高速设计的基本原则和注意事项 265
11.3.2 SerDes 266
11.4 电源完整性概述 268
11.4.1 电源噪声 268
11.4.2 PCB PDS设计技巧与挑战 268
11.4.3 电源完整性的基本原则和注意事项 278
11.4.4 实例15:采用Altera PDN工具的电源耦合电容设计 279
11.5 功耗与热设计 284
11.5.1 功耗设计 284
11.5.2 热设计 286
11.6 PCB设计与CPLD/FPGA系统设计 288
11.7 实例16:基于μC/OS-Ⅱ的FPGA系统设计 292
11.7.1 μC/OS-Ⅱ简介 292
11.7.2 系统设计要求简介 292
11.7.3 设计思路及步骤 292
11.8 本章小结 305
11.9 思考与练习 305
参考文献 307