FPGA书籍免费分享
本书系统地介绍了Xilinx新一代集成开发环境Vivado 2018的设计方法、设计流程和具体实现。
全书共11章,内容包括Xilinx新一代UltraScale结构、Vivado集成设计环境导论、Vivado工程模式基本设计实现、Vivado非工程模式基本设计实现、创建和封装用户IP核流程、Vivado高级约束原理及实现、Vivado调试工具原理及实现、Vivado部分可重配置原理及实现、Vivado HLS原理详解、Vivado HLS实现过程详解、HDMI显示屏驱动原理和实现。
图1 Xilinx FPGA 权威书籍指南
参考了Xilinx新一代的Vivado 2018设计套件设计资料,理论与应用并重,将Xilinx新一代的设计理论贯穿在具体的设计实现中,目录如下:
目 录
第 1 章 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
第 2 章 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
第 3 章 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
第 4 章 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
第 5 章 创建和封装用户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
第 6 章 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
第 7 章 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
第 8 章 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
第 9 章 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
第 10 章 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
第 11 章 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
本书由至芯科技教研组从各大高校的授课内容中整理而来,是为初学者量身定制的FPGA入门教材,从基础的软件安装、工具使用、语法解释、设计方法、常用IP,到最后的设计技巧及大量的进阶实例,内容环环相扣,为初学者建立了一个比较清晰的学习路径。
图2 FPGA从入门到精通
“设计思路及方法”为本书的重点强调内容,本书没有收录过多烦琐的理论,一切从实战出发,按照一套相对高效的设计方法直接切入一个个小的实例。目录如下:
第1章 没有金刚钻,不揽瓷器活 1
1.1 Quartus II 19.1――易学易用的编译器 1
1.2 ModelSim――独具慧眼的仿真工具 8
1.3 级联调试实战演练 8
第2章 谆谆教诲莫相忘,字字珠玑记心头 30
2.1 赋值语句实战演练 30
2.1.1 非阻塞型过程赋值语句 30
2.1.2 阻塞型过程赋值语句 32
2.2 关系运算符实战演练 34
2.2.1 关系运算符的种类 34
2.2.2 关系运算符与算术运算符优先级 34
2.3 if-else与case语句实战演练 35
2.3.1 if-else条件分支语句 35
2.3.2 case分支控制语句 39
2.4 缩减运算符实战演练 41
2.5 移位运算符实战演练 44
2.6 位拼运算符实战演练 46
第3章 工欲善其事,必先利其器 49
3.1 计数器实战演练 49
3.1.1 设计原理 49
3.1.2 代码说明 50
3.1.3 仿真分析 51
3.2 呼吸灯实战演练 51
3.2.1 设计原理 51
3.2.2 系统框架 52
3.2.3 代码说明 53
3.2.4 仿真分析 55
第4章 磨刀不误砍柴工,层次设计立头功 57
4.1 层次化设计实战演练 57
4.1.1 项目需求 57
4.1.2 系统架构 58
4.1.3 模块设计 58
4.1.4 代码说明 59
4.1.5 仿真分析 62
4.1.6 验证分析 63
4.2 分频器设计实战演练 73
4.2.1 偶分频设计 73
4.2.2 奇分频设计 75
第5章 内涵丰富本领多,谁与IP核争锋 79
5.1 锁相环实战演练 79
5.1.1 项目需求 80
5.1.2 操作步骤 80
5.1.3 模块设计 84
5.1.4 代码说明 85
5.1.5 仿真分析 86
5.1.6 使用Locked信号 87
5.2 ROM实战演练 89
5.2.1 项目需求 90
5.2.2 操作步骤 90
5.2.3 模块设计 94
5.2.4 代码说明 95
5.2.5 仿真分析 97
5.3 RAM实战演练 98
5.3.1 项目需求 98
5.3.2 操作步骤 98
5.3.3 模块设计 101
5.3.4 代码说明 101
5.3.5 仿真分析 105
5.4 FIFO实战演练 106
5.4.1 项目需求 106
5.4.2 操作步骤 106
5.4.3 模块设计 109
5.4.4 代码说明 111
5.4.5 仿真分析 116
5.5 移位寄存器实战演练 117
5.5.1 项目需求 117
5.5.2 操作步骤 118
5.5.3 模块设计 120
5.5.4 代码说明 121
5.5.5 仿真分析 125
第6章 基础项目我在行,信手拈来显聪慧 126
6.1 边沿检测电路实战演练 126
6.1.1 电路原理分析 126
6.1.2 系统框架 127
6.1.3 代码说明 128
6.1.4 仿真分析 130
6.2 按键消抖实战演练 130
6.2.1 设计思路 131
6.2.2 系统框架 131
6.2.3 代码说明 132
6.2.4 仿真分析 135
6.3 二进制数转BCD实战演练 136
6.3.1 逐步移位法原理 136
6.3.2 设计任务 137
6.3.3 系统框架 137
6.3.4 代码说明 139
6.3.5 仿真分析 141
6.4 数码管实战演练 142
6.4.1 项目需求 142
6.4.2 单个数码管显示 144
6.4.3 6个数码管显示 147
6.5 综合项目实战演练 154
6.5.1 项目要求 154
6.5.2 各模块的功能说明 154
6.5.3 RTL视图 154
6.5.4 仿真分析 155
第7章 没有标准的方法,但见可行的技巧 156
7.1 异步复位同步释放实战演练 156
7.1.1 同步复位和异步复位 156
7.1.2 异步复位同步释放 159
7.2 流水线实战演练 166
7.2.1 流水线的基本概念 166
7.2.2 流水线的应用实例 167
7.3 状态机实战演练 173
7.3.1 状态机的基本概念 173
7.3.2 状态机的应用实例 175
第8章 进阶首选我当前,乘胜追击势必行 184
8.1 TLC549实战演练 184
8.1.1 设计原理 184
8.1.2 系统架构 186
8.1.3 模块功能 186
8.1.4 代码说明 187
8.1.5 仿真分析 195
8.2 TLC5620实战演练 195
8.2.1 设计原理 195
8.2.2 系统架构 199
8.2.3 模块功能 199
8.2.4 代码说明 200
8.2.5 仿真分析 207
8.3 VGA实战演练 207
8.3.1 设计原理 207
8.3.2 系统框架 211
8.3.3 代码说明 211
8.3.4 仿真分析 216
8.4 串口通信实战演练 216
8.4.1 设计原理 216
8.4.2 系统架构 218
8.4.3 代码说明 219
8.4.4 仿真分析 228
8.5 DDS实战演练 228
8.5.1 数据生成 228
8.5.2 代码说明 229
8.5.3 仿真分析 231
8.6 蜂鸣器实战演练 232
8.6.1 设计原理 232
8.6.2 数据生成 233
8.6.3 系统架构 235
8.6.4 代码说明 235
8.7 I2C实战演练 242
8.7.1 设计原理 242
8.7.2 系统架构 243
8.7.3 代码说明 243
8.7.4 仿真分析 256
在逻辑电路的具体设计中,强调硬件描述语言(HDL)的使用,因为基于HDL的方法在实际应用中是最有效的。本书详细介绍了IEEE标准的Verilog HDL语言,并且在例子中广泛使用。
本书第3版的结构进行了较大的改进,第1~6章覆盖一个学期内该课程所需讲述的所有内容,而第7~11章则介绍更先进的内容。
第1章概述了数字系统的设计流程,讨论了设计流程中的关键步骤,解释了如何运用CAD工具自动实现所要求的众多工作;同时介绍了数字信息的表示方式。
第2章介绍了逻辑电路的基本知识,展示了如何使用布尔代数表示逻辑电路;介绍了逻辑电路综合和优化的概念,展示了如何使用逻辑门实现简单电路。第一次向读者展现Verilog,一个可用于描述逻辑电路的硬件描述语言例子。
第3章重点讲述了算术运算电路,讨论了数字系统中数字的表示方式,并说明了这样的数字如何运用到逻辑电路中。另外,该章还阐述了如何使用Verilog详细描述所期望的功能,以及CAD工具如何提供开发所期望电路的机制。
第4章介绍了用作构建模块的组合电路,包括编码器、译码器及多路选择器。这些电路非常便于阐明众多借助Verilog构建的应用,给读者提供了一个揭示Verilog更多高级特性的机会。
第5章介绍了存储单元,讨论了采用触发器实现的规则结构,如移位寄存器和计数器,并给出了这些结构的Verilog描述。
第6章详细阐明了同步时序电路(有限状态机),解释了这些电路的行为,并介绍了用手工和自动两种方法进行实际设计开发的技术。
第7章讨论了系统设计中经常遇到的问题及其解决办法,介绍了一个较大规模的数字系统层次化设计的例子,并给出了完整的Verilog代码。
第8章介绍了逻辑功能优化实现的更加先进的技术,提供了优化算法;解释了如何与二元决策图一样使用一种立方体表示法指定逻辑功能。
图3 数字逻辑基础与Verilog设计(原书第3版)
第9章讨论了异步时序电路。虽然没有面面俱到地叙述,但清晰展示了时序电路的主要特性。尽管异步时序电路在实际中的应用并不是很广泛,但是它们提供了一个深刻理解数字电路操作的非常好的途径。该章还展示了可能存在于电路结构内部的传播延迟和冒险竞争。
第10章给出了设计者在设计、实现及测试数字电路过程中经历的一个完整的CAD流程。
第11章介绍了电路的测试。逻辑电路的设计者必须清楚意识到电路测试的必要性,至少应熟悉测试最基本的知识。
目录如下:
第1章引言1
1.1数字硬件1
1.2设计流程3
1.3计算机结构4
1.4本书中的逻辑电路设计5
1.5信息的数字化表示5
1.6理论与实践9
习题10
参考文献10
第2章逻辑电路导论11
2.1变量与函数11
2.2反相12
2.3真值表13
2.4逻辑门和网络14
2.5布尔代数17
2.6利用“与”门、“或”门和“非”门进行综合23
2.7“与非”和“或非”逻辑网络电路28
2.8设计实例31
2.9CAD工具介绍34
2.10Verilog简介37
2.11最简化和卡诺图41
2.12最小化策略46
2.13和之积形式的最简式49
2.14非完整定义函数(无关项)50
2.15多输出电路51
2.16小结53
2.17解决问题的实例53
习题58
参考文献61
第3章数的表示方法和算术运算电路62
3.1按位计数法(数的位置表示法)62
3.2无符号数的加法运算64
3.3有符号数67
3.4快速加法器75
3.5使用CAD工具设计算术运算电路79
3.6乘法88
3.7其他数的表示方式90
3.8解决问题的实例94
习题97
参考文献99
第4章组合电路模块100
4.1多路选择器100
4.2译码器105
4.3编码108
4.4代码转换器109
4.5算术比较电路109
4.6用Verilog设计组合逻辑电路110
4.7小结121
4.8解决问题的实例121
习题126
参考文献128
第5章触发器、寄存器和计数器129
5.1基本锁存器129
5.2门控SR锁存器131
5.3门控D锁存器132
5.4边沿触发的D触发器134
5.5T触发器139
5.6JK触发器139
5.7术语小结140
5.8寄存器140
5.9计数器142
5.10复位同步147
5.11其他类型的计数器149
5.12用CAD工具设计含存储元件的电路151
5.13用Verilog构建寄存器和计数器156
5.14设计举例160
5.15触发器电路的时序分析164
5.16小结167
5.17解决问题的实例167
习题171
参考文献174
第6章同步时序电路175
6.1基本设计步骤176
6.2状态分配问题183
6.3Mealy状态模型185
6.4采用CAD工具设计有限状态机188
6.5串行加法器实例193
6.6状态最小化197
6.7基于时序电路的计数器设计202
6.8仲裁电路的FSM207
6.9同步时序电路的分析209
6.10算法状态机流程图211
6.11时序电路的形式模型213
6.12小结214
6.13解决问题的实例214
习题219
参考文献220
第7章数字系统设计222
7.1总线结构222
7.2简单的处理器227
7.3位计数电路234
7.4移位和加乘法器238
7.5除法器242
7.6算术平均248
7.7排序操作251
7.8时钟同步和时序问题258
7.9小结260
习题261
参考文献262
第8章逻辑函数的优化实现264
8.1多级综合264
8.2多级电路分析271
8.3逻辑函数的其他表示方法273
8.4基于立方体表示法的优化技术279
8.5小结288
8.6解决问题的实例289
习题293
参考文献294
第9章异步时序电路296
9.1异步行为296
9.2异步电路分析298
9.3异步电路综合303
9.4状态化简309
9.5状态分配316
9.6冒险324
9.7一个完整的设计实例328
9.8小结331
9.9解决问题的实例332
习题335
参考答案337
第10章计算机辅助设计工具338
10.1综合338
10.2物理设计342
10.3小结345
参考文献345
第11章逻辑电路测试346
11.1故障模型346
11.2测试集的复杂度347
11.3路径敏化348
11.4树形结构电路350
11.5随机测试351
11.6时序电路的测试353
11.7内建自测试355
11.8印制电路板359
11.9小结361
习题362
参考文献363