绪论 1
第一章 可编程ASIC器件 8
1.1 PLD器件 8
1.1.1 PROM结构 8
1.1.2 FPLA结构 9
1.1.3 PAL和GAL结构 9
1.2 CPLD 10
1.2.1 CPLD结构 10
1.2.2 典型CPLD器件 12
1.3 FPGA 16
1.3.1 FPGA的结构 16
1.3.2 SRAM查找表类型 18
1.3.3 反熔丝多路开关类型 22
1.4 可编程ASIC的基本资源 24
1.4.1 功能单元 25
1.4.2 输入/输出接口 27
1.4.3 布线资源 31
1.4.4 片内RAM 35
1.4.5 系统级芯片的特点 37
1.4.6 系统级芯片的发展趋势 40
1.5 边界扫描技术 41
1.6 可编程ASIC的编程元件 44
1.6.1 熔丝型开关 44
1.6.2 反熔丝开关 45
1.6.3 浮栅编程技术 47
1.6.4 静态存储器(SRAM) 51
1.7 CPLD和FPGA的比较和选用 55
1.7.1 结构比较 55
1.7.2 逻辑块之间的互连结构不同 55
1.7.3 性能的选用 56
2.1 概述 58
第二章 硬件设计描述语言VHDL 58
2.1.1 VHDL的主要优点 59
2.1.2 采用VHDL设计综合的过程 60
2.2 VHDL程序基本结构 60
2.2.1 VHDL语言设计的基本单元 61
2.2.2 结构体的子结构描述 66
2.2.3 包集合、库及配置 72
2.3 VHDL语言的数据类型 77
2.3.1 VHDL语言的对象及其分类 77
2.3.2 VHDL语言的数据类型 80
2.4 VHDL语言的运算操作符 86
2.4.1 逻辑运算符(6种) 86
2.4.2 算术运算符 87
2.4.3 关系运算符 87
2.4.4 并置运算符 87
2.5.1 顺序描述语句 88
2.5 VHDL最基本的描述方法 88
2.5.2 并行(并发)描述语句(Concurrent Statements) 99
2.5.3 其他语句和有关规定的说明 103
2.6 预定义属性(ATTRIBUTE)描述 103
2.6.1 数值类型性 104
2.6.2 函数类属性 105
2.6.3 信号类属性 106
2.7 VHDL语言结构体的描述风格 107
2.7.1 结构体的行为描述方式。 108
2.7.2 结构体的数据流描述方式 112
2.7.3 结构体的结构描述方式 116
第三章 可编程ASIC的设计 121
3.1 数字系统综合概述 121
3.1.1 抽象的级别 121
3.1.2 综合的定义 123
3.1.3 系统级综合 124
3.1.4 寄存器转移级综合 125
3.1.5 逻辑级综合 134
3.2 综合技术基础 137
3.2.1 基本符号 137
3.2.2 图形 138
3.2.3 组合最优化(Combinatorial Optimization) 141
3.2.4 布尔代数及应用 143
3.2.5 布尔网络 147
3.2.6 可处理和不可处理问题 150
3.3 可编程ASIC的逻辑综合 154
3.3.1 逻辑综合概述 154
3.3.2 两级逻辑最小化 157
3.3.3 基于查找表结构的多级逻辑优化 162
3.3.4 立方体归并(cube-paching) 167
3.3.5 工艺映射 168
3.3.6 基于MUX结构的多级逻辑优化 170
3.4.1 二进制编码 173
3.4 状态机设计 173
3.4.2 一个有效的编码 174
3.5 FPGA的布局和布线 178
3.5.1 布局 179
3.5.2 布线 183
3.5.3 布通率和布线资源 188
3.5.4 网线延时 189
3.6 Xilinx的设计流程 192
3.6.1 设计输入 193
3.6.2 设计实现 194
3.6.3 设计验证 195
3.6.4 Xilinx FPGA详细的设计流程 196
3.6.5 Xilinx CPLD详细设计流程 197
第四章 CPLD-XC9500系列 198
4.1 结构描述 198
4.1.1 功能块(FB) 198
4.1.2 宏单元 199
4.1.3 乘积项分配器 201
4.1.4 FastCONNECT开关矩阵 203
4.1.5 I/O块(IOB) 203
4.1.6 持续性 205
4.1.7 设计保密性 205
4.1.8 低功率模式 207
4.1.9 加电特性 207
4.2 XC9500时序模型 208
4.2.1 时序模型 208
4.2.2 基本时序模型的参数 210
4.3 系统内编程 212
4.3.1 JTAG边界扫描接口 213
4.3.2 产生边界扫描链 217
4.3.3 ISP编程 219
4.3.4 系统级设计问题 220
4.4.2 XC9500布线资源 222
4.4 引腿锁定能力 222
4.4.1 出腿预分配 222
4.4.3 数据通道的估算 223
4.4.4 控制通道估算 223
4.4.5 出腿预分配 224
4.5 设计优化 224
4.5.1 优化密度 224
4.5.2 优化时序 225
4.5.3 优化原理图设计 226
4.5.4 优化ABEL设计 226
4.5.5 优化VHDL设计 228
第五章 可编程门阵列 229
5.1 概述 229
5.2 XC4000E/Spartan系列结构 230
5.2.1 基本积木块 230
5.2.2 可配置逻辑功能块(CLB) 231
5.2.3 输入/输出功能块(IOB) 245
5.2.4 三态缓冲器 252
5.2.5 沿边宽译码器 254
5.2.6 片内振荡器 255
5.2.7 可编程互连 255
5.2.8 功率分布 269
5.3 Virtex/SpartanⅡ系列结构 269
5.3.1 特点 269
5.3.2 结构描述 270
5.4 边界扫描电路 280
5.4.1 XC4000/XC5000边界扫描特性概述 280
5.4.2 与IEEE标准的偏差 280
5.4.3 边界扫描硬件描述 281
5.4.4 利用边界扫描电路 285
5.4.5 Virtex的边界扫描 289
5.5 配置 290
5.5.2 配置模式 291
5.5.1 专用引腿 291
5.5.3 设置CCLK频率 294
5.5.4 数据流格式 294
5.5.5 配置和读回的CRC校验 296
5.5.6 配置顺序 297
5.5.7 配置时序 303
5.5.8 可编程配置RAM 311
第六章 面向仿真和综合的VHDL设计描述 314
6.1 面向仿真的VHDL设计描述 314
6.2 面向综合的VHDL设计描述 317
6.2.1 逻辑综合 317
6.2.2 面向综合的VHDL设计描述的特点 318
6.3 组合逻辑电路设计 320
6.3.1 用并行语句中的布尔方程来描述组合逻辑 321
6.3.2 用顺序语句描述组合逻辑 323
6.3.3 利用进程描述组合逻辑 325
6.3.4 其他组合逻辑设计举例 326
6.4 时序电路设计 333
6.4.1 时序电路VHDL程序的一般形式 333
6.4.2 时钟信号的特征及特殊问题 335
6.4.3 时序电路设计举例 338
6.5 有限状态机的设计 344
6.5.1 在FPGA中设计有限状态机 344
6.5.2 有限状态机的描述 346
6.5.3 状态机综合例子 352
6.6 同步设计 355
6.6.1 保证系统的时钟信号不产生相位偏移 356
6.6.2 准稳态的产生和消除 357
6.6.3 毛刺的产生和消除 358
6.6.4 利用预定标技术来提高计数器性能 360
6.6.5 所设计电路的工作速度和性能估计 360
6.6.6 设计中要注意的一些问题 362
6.7 在约束条件下的设计综合 363
6.7.1 物理布局和实现的约束 364
6.7.2 通用时序约束 365
6.7.3 周期和偏移约束 366
6.7.4 专门时序约束 367
6.7.5 约束优先级 371
6.7.6 约束推荐 371
6.7.7 映射约束 371
6.7.8 其他约束 372
6.8 面向CPLD/FPGA的逻辑综合及优化设计 372
6.8.1 设计实现与逻辑综合的区分 373
6.8.2 约束条件 373
6.8.3 面向CPLD器件的实现 374
6.8.4 面向FPGA器件的实现 376
6.8.5 优化设计 380
6.9.1 VHDL软件包 382
6.9 系统级综合 382
6.9.2 VHDL函数 384
6.9.3 VHDL过程 384
第七章 设计实现 392
7.1 基于原理图设计方法 393
7.1.1 启动原理图编辑器 393
7.1.2 产生基于原理图的宏单元 395
7.1.3 创建CNT60原理图 397
7.1.4 创建一个LogiBLOX模块 403
7.1.5 创建状态机模块 405
7.1.6 创建一个基于HDL模块 409
7.1.7 规定器件输入/输出 413
7.1.8 分配引腿位置 415
7.1.9 使用4K内部振荡器 417
7.1.11 硬件校验——启动和读回(可选择) 418
7.1.10 使用全局缓冲器 418
7.1.12 完成原理图 419
7.2 基于硬件描述语言的设计方法 420
7.2.1 启动项目管理器 422
7.2.2 设计描述 423
7.2.3 项目管理器 423
7.2.4 创建一个基于HDL的模块 426
7.2.5 综合设计 434
7.2.6 Express Constraints Editor(仅对应Foundation Express) 435
7.2.7 使用Express Constraints Editor(仅对应Foundation Express) 436
7.2.8 观察综合结果(仅对应Foundation Express) 438
7.3 功能仿真 439
7.3.1 启动逻辑仿真器(Logic Simulator) 439
7.3.2 指定激励源 442
7.3.3 运行仿真 445
7.3.4 保存仿真结果 446
7.4.1 启动设计实现 447
7.4 设计实现 447
7.4.2 其他实现工具 452
7.5 时序仿真 452
7.5.1 启动时序仿真 452
7.5.2 用稿本文件激励 453
7.6 硬件验证 461
7.7 乘法器设计例子 463
第八章 Xilinx FPGA/CPLD实验系统与VHDL设计实验 466
8.1 Xilinx FPGA/CPLD实验系统简介 466
8.1.1 XS40实验板原理 467
8.1.2 XS40扩展板原理 469
8.1.3 实验系统的调试 472
8.2 VHDL数字逻辑电路设计试验 472
8.2.1 实验一:3-8译码器 473
8.2.2 实验二:双向计数器 474
8.2.3 实验三:8位序列检测器 475
8.2.4 实验四:8×3位的RAM结构的FIFO 479
8.2.5 实验五:LED和DIP开关的接口设计 482
8.2.6 实验六:VGA接口设计 485
8.2.7 实验七:PS/2键盘接口设计 491
8.2.8 实验八:8位并行加法器设计 493
8.2.9 实验九:8位乘法器 495
8.2.10 实验十:正负脉宽数控调制信号发生器设计 500
8.2.11 实验十一:模可变16位加法计数器 502
8.2.12 实验十二:“梁祝”乐曲演奏电路设计 503
8.2.13 实验十三:数字频率计设计 508
8.2.14 实验十四:秒表设计 512
8.2.15 实验十五:A/D采样控制器设计 513
8.2.16 实验十六:D/A接口电路与波形发生器设计 517
8.2.17 实验十七:单片机与FPGA/CPLD接口逻辑设计 519
附录一:清华大学ASIC实验板原理图 523
附录二:清华大学ASIC实验板PCB图 524
参考文献 525