第1章 数字逻辑基础 1
1.1 数字逻辑的发展史 1
1.2 开关系统 4
1.2.1 0和1的概念 5
1.2.2 开关系统的优势 5
1.2.3 晶体管作为开关 6
1.2.4 半导体物理器件 7
1.2.5 半导体逻辑电路 9
1.2.6 逻辑电路符号描述 12
1.3 半导体数字集成电路 16
1.3.1 集成电路的发展 16
1.3.2 集成电路构成 16
1.3.3 集成电路版图 17
1.4 基本逻辑门电路分析 19
1.4.1 基本逻辑门电路的描述 19
1.4.2 逻辑门电路的传输特性 23
1.4.3 基本逻辑门集成电路 28
1.4.4 不同工艺逻辑门的连接 29
1.5 逻辑代数理论 31
1.5.1 逻辑代数中运算关系 31
1.5.2 逻辑函数表达式 33
1.6 逻辑表达式的化简 36
1.6.1 使用运算律化简逻辑表达式 37
1.6.2 使用卡诺图化简逻辑表达式 40
1.6.3 不完全指定逻辑功能的化简 43
1.6.4 输入变量的卡诺图表示 45
1.7 毛刺产生及消除 51
1.8 数字码制表示和转换 53
1.8.1 数字码制表示 53
1.8.2 数字码制转换 55
1.9 组合逻辑电路 56
1.9.1 编码器 57
1.9.2 译码器 58
1.9.3 码转换器 61
1.9.4 数据选择器 63
1.9.5 数据比较器 64
1.9.6 加法器 66
1.9.7 减法器 69
1.9.8 加法器/减法器 72
1.9.9 乘法器 74
1.10 时序逻辑电路 75
1.10.1 时序逻辑电路类型 76
1.10.2 时序逻辑电路特点 76
1.10.3 基本SR锁存器 78
1.10.4 同步SR锁存器 78
1.10.5 D锁存器 79
1.10.6 D触发器 80
1.10.7 其他触发器 82
1.10.8 普通寄存器 86
1.10.9 移位寄存器 86
1.10.10 存储器 87
1.11 有限自动状态机 87
1.11.1 有限自动状态机原理 88
1.11.2 状态图表示及实现 89
1.11.3 三位计数器 91
第2章 可编程逻辑器件工艺和结构 94
2.1 可编程逻辑器件发展历史 94
2.2 可编程逻辑器件工艺 95
2.3 可编程逻辑器件结构 97
2.3.1 PROM原理及结构 97
2.3.2 PAL原理及结构 97
2.3.3 PLA原理及结构 99
2.3.4 CPLD原理及结构 99
2.3.5 FPGA原理及结构 102
2.3.6 CPLD和FPGA比较 114
2.4 Xilinx可编程逻辑器件 115
2.4.1 Xilinx CPLD芯片介绍 115
2.4.2 Xilinx FPGA芯片介绍 115
2.4.3 Xilinx PROM芯片介绍 117
第3章 Xilinx ISE设计流程 120
3.1 ISE设计套件介绍 120
3.2 创建新的设计工程 121
3.3 ISE开发平台主界面及功能 123
3.3.1 Design(设计)面板 123
3.3.2 Console(控制台)面板 125
3.3.3 Workspace 126
3.4 创建并添加新源文件 126
3.5 添加设计代码 129
3.5.1 Verilog HDL设计代码的添加 129
3.5.2 VHDL设计代码的添加 130
3.6 设计综合 130
3.6.1 Xilinx综合工具功能 131
3.6.2 设计综合 131
3.7 设计行为仿真 134
3.7.1 为Verilog HDL设计添加测试向量 134
3.7.2 为VHDL设计添加测试向量 137
3.7.3 运行行为仿真 138
3.8 添加引脚约束文件 140
3.9 设计实现 144
3.9.1 运行设计实现工具 144
3.9.2 查看布局布线结果 145
3.10 布局布线后仿真 148
3.11 产生比特流文件 149
3.12 下载比特流文件到FPGA 149
3.13 生成存储器配置文件并烧写存储器 152
3.13.1 生成BPI存储器配置文件 152
3.13.2 编程BPI文件到BPI存储器 155
第4章 VHDL语言规范 157
4.1 VHDL程序结构和配置 157
4.1.1 VHDL程序结构框架 157
4.1.2 VHDL实体 158
4.1.3 VHDL结构体 161
4.1.4 配置声明 163
4.2 VHDL语言描述风格 166
4.2.1 行为描述 166
4.2.2 数据流描述 166
4.2.3 结构化描述 167
4.3 VHDL语言要素 168
4.3.1 字符集 168
4.3.2 语言要素、分隔符和分界符 170
4.3.3 标识符 170
4.3.4 抽象文字 171
4.3.5 字符文字 172
4.3.6 字符串文字 172
4.3.7 比特字符串文字 172
4.3.8 注释 173
4.3.9 保留字 173
4.3.10 允许替换的字符 174
4.4 VHDL设计资源共享 174
4.4.1 库的声明和调用 174
4.4.2 子程序和函数声明 176
4.4.3 函数体和子程序体 178
4.4.4 子程序和函数重载 179
4.4.5 解析函数 181
4.4.6 包声明 182
4.4.7 包体 183
4.5 VHDL类型 184
4.5.1 标量类型 184
4.5.2 复合类型 187
4.5.3 访问类型 189
4.5.4 文件类型 189
4.5.5 保护类型 192
4.6 VHDL声明 194
4.6.1 类型声明 194
4.6.2 子类型声明 194
4.6.3 对象 195
4.6.4 属性声明 201
4.6.5 元件声明 202
4.6.6 组模板声明 202
4.6.7 组声明 202
4.7 VHDL说明 203
4.7.1 属性说明 204
4.7.2 配置说明 205
4.7.3 断开说明 207
4.8 VHDL名字 207
4.8.1 简单名字 208
4.8.2 选择名字 208
4.8.3 索引名字 209
4.8.4 切片名字 209
4.8.5 属性名字 209
4.9 VHDL表达式 212
4.9.1 VHDL操作符 212
4.9.2 VHDL操作数 215
4.10 VHDL顺序描述语句 221
4.10.1 wait语句 221
4.10.2 断言和报告语句 223
4.10.3 信号分配语句 225
4.10.4 变量分配语句 226
4.10.5 子程序调用语句 227
4.10.6 if语句 228
4.10.7 case语句 228
4.10.8 loop语句 230
4.10.9 next语句 232
4.10.10 exit语句 232
4.10.11 return语句 233
4.10.12 null语句 233
4.11 VHDL并发描述语句 234
4.11.1 块语句 234
4.11.2 进程描述语句 236
4.11.3 并行过程调用语句 237
4.11.4 并行断言语句 238
4.11.5 并行信号分配语句 239
4.11.6 元件例化语句 240
4.11.7 生成语句 241
第5章 Verilog HDL语言规范 244
5.1 Verilog HDL语言发展 244
5.2 Verilog HDL程序结构 245
5.2.1 模块声明 246
5.2.2 模块端口定义 246
5.2.3 逻辑功能定义 247
5.3 Verilog HDL描述方式 249
5.3.1 行为级描述方式 249
5.3.2 数据流描述方式 250
5.3.3 结构级描述方式 251
5.3.4 开关级描述方式 252
5.4 Verilog HDL语言要素 253
5.4.1 注释 253
5.4.2 间隔符 253
5.4.3 标识符 254
5.4.4 关键字 254
5.4.5 系统任务和函数 254
5.4.6 编译器命令 255
5.4.7 运算符 255
5.4.8 数字 255
5.4.9 字符串 257
5.4.10 属性 259
5.5 Verilog HDL数据类型 260
5.5.1 值的集合 260
5.5.2 网络和变量 260
5.5.3 向量 261
5.5.4 强度 262
5.5.5 隐含声明 262
5.5.6 网络类型 263
5.5.7 寄存器类型 266
5.5.8 整数、实数、时间和实时时间 267
5.5.9 数组 268
5.5.10 参数 268
5.5.11 Verilog HDL名字空间 270
5.6 Verilog HDL表达式 271
5.6.1 操作符 271
5.6.2 操作数 280
5.6.3 延迟表达式 283
5.6.4 表达式的位宽 283
5.6.5 有符号表达式 285
5.6.6 分配和截断 285
5.7 Verilog HDL分配 286
5.7.1 连续分配 287
5.7.2 过程分配 289
5.8 Verilog HDL门级和开关级描述 290
5.8.1 门和开关声明 290
5.8.2 逻辑门 293
5.8.3 输出门 294
5.8.4 三态门 294
5.8.5 MOS开关 296
5.8.6 双向传输开关 297
5.8.7 CMOS开关 297
5.8.8 pull门 298
5.8.9 逻辑强度建模 298
5.8.10 组合信号的强度和值 299
5.8.11 通过非电阻器件的强度降低 306
5.8.12 通过电阻器件的强度降低 306
5.8.13 网络类型强度 307
5.8.14 门和网络延迟 307
5.9 Verilog HDL用户自定义原语 310
5.9.1 UDP定义 310
5.9.2 组合电路UDP 311
5.9.3 电平触发的时序UDP 312
5.9.4 边沿触发的时序电路UDP 313
5.9.5 初始化状态寄存器 313
5.9.6 UDP例化 314
5.9.7 边沿触发和电平触发的混合行为 315
5.10 Verilog HDL行为描述语句 315
5.10.1 过程语句 315
5.10.2 过程连续分配 320
5.10.3 条件语句 322
5.10.4 case语句 323
5.10.5 循环语句 325
5.10.6 过程时序控制 327
5.10.7 语句块 331
5.10.8 结构化的过程 333
5.11 Verilog HDL任务和函数 334
5.11.1 任务和函数的区别 334
5.11.2 任务和任务使能 335
5.11.3 禁止命名的块和任务 337
5.11.4 函数和函数调用 339
5.12 Verilog HDL层次化结构 342
5.12.1 模块和模块例化 342
5.12.2 覆盖模块参数值 342
5.12.3 端口 346
5.12.4 生成结构 351
5.12.5 层次化的名字 359
5.12.6 向上名字引用 360
5.12.7 范围规则 361
5.13 Verilog HDL设计配置 362
5.13.1 配置格式 363
5.13.2 库 364
5.13.3 配置例子 365
5.13.4 显示库绑定信息 366
5.13.5 库映射例子 366
5.14 Verilog HDL指定块 367
5.14.1 模块路径声明 368
5.14.2 为路径分配延迟 372
5.14.3 混合模块路径延迟和分布式延迟 375
5.14.4 驱动连线逻辑 375
5.14.5 脉冲过滤行为的控制 376
5.15 Verilog HDL时序检查 381
5.15.1 使用稳定窗口检查时序 381
5.15.2 用于时钟和控制信号的时序检查 383
5.15.3 边沿控制标识符 387
5.15.4 提示符:用户定义对时序冲突的响应 387
5.15.5 使能有条件事件的时序检查 392
5.15.6 向量信号的时序检查 392
5.15.7 负时序检查 392
5.16 Verilog HDL SDF逆向注解 394
5.16.1 映射SDF结构到Verilog 394
5.16.2 多个注解 399
5.16.3 多个SDF文件 400
5.16.4 脉冲限制注解 400
5.16.5 SDF到Verilog延迟值映射 401
5.17 Verilog HDL系统任务和函数 401
5.17.1 显示任务 401
5.17.2 文件输入-输出系统任务和函数 407
5.17.3 时间标度系统任务 414
5.17.4 仿真控制任务 416
5.17.5 可编程逻辑阵列建模系统任务 416
5.17.6 随机分析任务 420
5.17.7 仿真时间系统函数 422
5.17.8 转换函数 423
5.17.9 概率分布函数 423
5.17.10 命令行输入 424
5.17.11 数学函数 427
5.18 Verilog HDL的VCD文件 428
5.18.1 四态VCD文件的创建 428
5.18.2 四态VCD文件的格式 431
5.18.3 扩展VCD文件的创建 435
5.18.4 扩展VCD文件的格式 437
5.19 Verilog HDL编译器指令 441
5.19.1 ‘celldefine和‘endcelldefine 441
5.19.2 ‘default nettype 441
5.19.3 ‘define和‘undef 441
5.19.4 ‘ifdef、‘else、‘elsif、‘endif、‘ifndef 443
5.19.5 ‘include 445
5.19.6 ‘resetall 445
5.19.7 ‘line 445
5.19.8 ‘timescale 446
5.19.9 ‘unconnected_drive和‘nounconnected_drive 447
5.19.1 0 ‘pragma 447
5.19.1 1 ‘begin_keywords和‘end_keyword 447
5.20 Verilog HDL编程语言接口PLI 448
5.20.1 Verilog HDL PLI发展过程 448
5.20.2 Verilog HDL PLI提供的功能 448
5.20.3 Verilog HDL PLI原理 449
5.20.4 Verilog HDL VPI工作原理 451
第6章 基本数字逻辑单元HDL描述 454
6.1 组合逻辑电路的HDL描述 454
6.1.1 逻辑门的HDL描述 454
6.1.2 编码器HDL描述 455
6.1.3 译码器HDL描述 456
6.1.4 数据选择器HDL描述 458
6.1.5 数字比较器HDL描述 461
6.1.6 总线缓冲器HDL描述 461
6.2 数据运算操作HDL描述 463
6.2.1 加法操作HDL描述 463
6.2.2 减法操作HDL描述 464
6.2.3 乘法操作HDL描述 465
6.2.4 除法操作HDL描述 465
6.2.5 算术逻辑单元HDL描述 466
6.3 时序逻辑电路HDL描述 469
6.3.1 触发器和锁存器的HDL描述 470
6.3.2 计数器HDL描述 474
6.3.3 移位寄存器HDL描述 478
6.3.4 脉冲宽度调制PWM HDL描述 486
6.4 存储器HDL描述 489
6.4.1 ROM HDL描述 489
6.4.2 RAM HDL描述 491
6.5 有限自动状态机HDL描述 492
6.5.1 FSM设计原理 493
6.5.2 FSM的分类及描述 494
第7章 基于HDL数字系统实现 507
7.1 设计所用外设的原理 507
7.1.1 LED灯 507
7.1.2 开关 508
7.1.3 七段数码管 508
7.1.4 VGA显示器 510
7.1.5 通用异步接收发送器 513
7.2 系统设计原理 515
7.3 建立新的设计工程 517
7.4 基于VHDL的系统设计实现 517
7.4.1 设计分频时钟模块2 517
7.4.2 设计和仿真计数器模块 519
7.4.3 设计顶层模块 520
7.4.4 设计分频时钟模块1 525
7.4.5 设计七段数码管模块 527
7.4.6 设计分频时钟模块3 532
7.4.7 设计通用异步收发器模块 533
7.4.8 设计分频时钟模块4 537
7.4.9 设计VGA控制器模块 539
7.5 基于Verilog HDL的系统设计实现 544
7.5.1 设计分频时钟模块2 544
7.5.2 设计和仿真计数器模块 545
7.5.3 设计顶层模块 547
7.5.4 设计分频时钟模块1 551
7.5.5 设计七段数码管模块 553
7.5.6 设计分频时钟模块3 557
7.5.7 设计通用异步收发器模块 558
7.5.8 设计分频时钟模块4 562
7.5.9 设计VGA控制器模块 564
第8章 数字系统高级设计技术 570
8.1 HDL高级设计技巧 570
8.1.1 逻辑复制和复用技术 571
8.1.2 并行和流水线技术 572
8.1.3 同步和异步单元处理技术 574
8.1.4 逻辑处理技术 578
8.2 IP核设计技术 579
8.2.1 IP核分类 579
8.2.2 IP核优化 580
8.2.3 IP核生成 581
8.3 可编程逻辑器件调试 581
8.3.1 多路复用技术的应用 581
8.3.2 虚拟逻辑分析工具 582
8.3.3 ChipScope Pro调试工具概述 582
第9章 基于IP核数字系统实现 585
9.1 建立新的设计工程 585
9.2 添加和配置时钟IP核 585
9.3 添加和配置计数器IP核 587
9.4 生成顶层设计文件 588
9.5 生成时钟资源模块例化模板 588
9.5.1 生成VHDL时钟资源例化模板 588
9.5.2 生成Verilog HDL时钟资源例化模板 589
9.6 生成计数器模块例化模板 590
9.6.1 生成VHDL计数器例化模板 590
9.6.2 生成Verilog HDL计数器例化模板 590
9.7 创建HDL时钟分频模块 591
9.8 完成顶层设计文件 593
9.9 添加顶层引脚约束文件 595
第10章 数模混合系统设计 596
10.1 模数转换器原理 596
10.1.1 模数转换器的参数 596
10.1.2 模数转换器的类型 597
10.2 数模转换器原理 599
10.2.1 数模转换器的参数 599
10.2.2 数模转换器的类型 600
10.3 基于并行ADC的数字电压表的设计 601
10.3.1 数字电压表的功能和结构 601
10.3.2 模块设计 601
10.3.3 设计实现 603
10.4 基于串行ADC的数字电压表的设计 610
10.4.1 系统设计原理 611
10.4.2 设计实现 612
10.5 基于DAC的信号发生器的设计 617
10.5.1 函数信号发生器设计原理 617
10.5.2 设计实现 618
第11章 软核处理器PicoBlaze原理及应用 624
11.1 片上可编程系统概论 624
11.1.1 片上MCU和专用MCU的比较 624
11.1.2 片上MCU和片上逻辑的比较 625
11.2 PicoBlaze处理器原理及结构分析 625
11.2.1 PicoBlaze处理器特点 626
11.2.2 PicoBlaze处理器应用框架 626
11.2.3 PicoBlaze处理器内部结构 628
11.3 PicoBlaze处理器指令集 630
11.3.1 PicoBlaze指令集 630
11.3.2 控制程序转移指令 630
11.3.3 中断指令 632
11.3.4 逻辑操作指令 633
11.3.5 算术运算指令 635
11.3.6 循环转移指令 638
11.3.7 输入和输出指令 639
11.4 PicoBlaze处理器汇编程序 641
11.4.1 KCPSM3汇编器原理及操作 641
11.4.2 KCPSM3编程语法 645
11.4.3 KCPSM3中断处理 647
11.4.4 KCPSM3中CALL/RETURN栈 651
11.4.5 KCPSM3共享程序空间 651
11.4.6 KCPSM3输入/输出端口设计 652
附录 Verilog HDL(IEEE 1364—2005)关键字列表 656
参考文献 657