第1章 数字电路基础 1
1.1 模拟电路与数字电路 1
1.2 二进制相关知识 3
1.2.1 二进制和其他进制 3
1.2.2 进制间的相互转换 4
1.2.3 二进制的四则运算 5
1.3 二进制在电路中的表达 6
1.3.1 有限字长和补码 6
1.3.2 负数、有符号数和无符号数 6
1.4 门电路和基本逻辑运算 10
1.4.1 非门、与门和或门 11
1.4.2 与非门和或非门 12
1.4.3 异或门和同或门 12
1.4.4 三种表达形式的转换 13
1.4.5 基本门的电路实现 14
1.4.6 三态输出和漏极开路输出 15
1.4.7 波形图 17
1.4.8 门电路的一些非典型应用 18
1.5 逻辑代数 22
1.5.1 基本定律 22
1.5.2 表达式的代数化简法 23
1.5.3 卡诺图化简法 23
1.6 基本组合逻辑 24
1.6.1 编码器和译码器 24
1.6.2 未定义的输入状态 26
1.6.3 数据选择器 27
1.6.4 延迟和竞争冒险 27
1.6.5 加法器 28
1.6.6 乘法器 31
1.6.7 数值比较器 32
1.7 锁存器 32
1.7.1 SR锁存器 32
1.7.2 D锁存器 33
1.8 触发器 34
1.8.1 D触发器、时钟和使能 34
1.8.2 D触发器的异步和同步复位 36
1.8.3 D触发器的建立时间、保持时间和传输延迟 37
1.8.4 其他触发器 38
1.9 时序逻辑 40
1.9.1 移位寄存器和串-并互换 40
1.9.2 延迟链 42
1.9.3 分频器 43
1.9.4 计数器 44
1.9.5 同步时序逻辑 46
1.9.6 累加器 48
1.10 存储器 49
1.10.1 存储器容量和类型 49
1.10.2 SRAM 50
1.10.3 双端口SRAM 54
1.10.4 同步SRAM 54
1.11 小数 55
1.11.1 定点小数及其范围和误差 55
1.11.2 定点小数的运算 56
1.11.3 浮点小数 58
第2章 Verilog HDL和SystemVerilog 60
2.1 硬件描述语言简介 60
2.2 设计方法和流程 62
2.3 标识符和关键字 63
2.4 值、数和字面量 63
2.4.1 整型常数 64
2.4.2 浮点常数 65
2.4.3 时间常数和字符串常数 65
2.5 线网 66
2.6 变量 67
2.7 参数和常量 68
2.8 类型和位宽转换 70
2.9 操作符和表达式 71
2.9.1 位选取操作符 74
2.9.2 位拼接和流运算符 74
2.9.3 按位逻辑运算符 76
2.9.4 缩减运算符 76
2.9.5 移位 77
2.9.6 自增赋值和自减赋值 77
2.9.7 条件判断相关运算符 78
2.9.8 条件运算符 79
2.9.9 let语句 79
2.10 结构和联合 80
2.11 数组 82
2.12 赋值、过程和块 83
2.12.1 赋值的延迟 84
2.12.2 赋值的强度 85
2.12.3 流程控制语句 86
2.12.4 always过程 88
2.12.5 阻塞和非阻塞赋值 91
2.13 模块 93
2.14 接口 97
2.15 生成块 100
2.16 任务和函数 101
2.17 包 102
2.18 系统任务和函数 103
2.18.1 显示相关 104
2.18.2 文件相关 105
2.18.3 存储器相关 106
2.18.4 仿真相关 107
2.18.5 错误和信息 107
2.18.6 类型转换和数学函数 107
2.19 编译指令 108
第3章 ModeISim和仿真 111
3.1 仿真和测试的相关概念 111
3.2 测试代码编写 112
3.2.1 时钟的产生 112
3.2.2 复位的产生 114
3.2.3 一般输入的产生 115
3.3 ModeISim软件仿真流程 118
3.3.1 主界面简介 118
3.3.2 创建工程 119
3.3.3 向工程中添加文件 121
3.3.4 开始仿真 122
3.3.5 带有信号和波形的例子 124
3.4 波形和格式 127
第4章 Verilog基本应用 130
4.1 代码风格 130
4.2 常用组合逻辑单元的描述 132
4.2.1 编码器和译码器 132
4.2.2 数据选择器 133
4.3 常用时序逻辑单元的描述 133
4.3.1 移位寄存器 133
4.3.2 延迟链 134
4.3.3 计数器 134
4.3.4 累加器 136
4.4 时钟域和使能 137
4.5 跨时钟域问题 138
4.5.1 域外慢速跳沿 138
4.5.2 域间状态传递 140
4.5.3 域间事件传递 142
4.5.4 域间数据传递 144
4.6 存储器及其初始化 144
4.6.1 各种模式的存储器描述 145
4.6.2 存储器的初始化 148
4.7 用存储器实现延迟链 151
4.8 单时钟FIFO 152
4.9 双时钟FIFO 156
4.10 用户按键和数码LED 157
4.10.1 用户按键处理 157
4.10.2 数码LED 159
4.11 PWM和死区 161
4.11.1 单端PWM 161
4.11.2 差分PWM 162
4.11.3 死区 165
4.12 正交增量编码器接口 166
4.13 有限状态机 170
4.13.1 秒表例子 171
4.13.2 数字示波器触发采样例子 175
第5章 IO规范与外部总线 182
5.1 单端信号和地 182
5.2 传输线与端接 184
5.3 差分信号 185
5.4 高速串行接口 188
5.5 UART 189
5.5.1 UART规范介绍 189
5.5.2 发送器的设计 190
5.5.3 接收器的设计 193
5.5.4 UART收发仿真 195
5.6 SPI 197
5.6.1 SPI规范介绍 197
5.6.2 通用SPI主机设计 199
5.6.3 通用SPI从机设计 202
5.6.4 通用SPI主从机仿真 205
5.7 I2C 207
5.7.1 I2C规范介绍 207
5.7.2 通用I2C主机设计 211
5.7.3 通用I2C从机设计 219
5.7.4 通用I2C主从机仿真 224
5.8 I2S 227
5.8.1 I2S接口介绍 227
5.8.2 I2S收发器设计和仿真 229
第6章 片上系统的内部互连 232
6.1 简单存储器映射接口 232
6.1.1 从接口 233
6.1.2 与主机互连 238
6.1.3 主接口与仿真 241
6.2 流水线与流式数据 245
6.3 等待、延迟和握手 248
6.3.1 等待和延迟 248
6.3.2 握手 248
6.4 AXI4-Lite接口 250
6.4.1 AXI4-Lite接口介绍 250
6.4.2 从机范例 252
6.4.3 主机范例 255
6.4.4 主从机仿真 256
6.5 AXI4接口 257
6.6 AXI4-Stream接口 263
6.6.1 AXI4-Stream接口介绍 263
6.6.2 范例和仿真 263
第7章 数字信号处理应用 268
7.1 基础知识简介 268
7.1.1 信号、系统和传输函数 268
7.1.2 基本元件的传输函数 270
7.1.3 采样率和采样定律 270
7.1.4 离散量化信号的信噪比 272
7.2 数值计算 273
7.2.1 乘法 273
7.2.2 除法 275
7.2.3 平方根 277
7.2.4 定点小数 279
7.3 数字频率合成 281
7.3.1 DDS 282
7.3.2 坐标旋转机 285
7.4 FIR滤波器 290
7.5 IIR滤波器 293
7.6 采样率变换 297
7.6.1 升采样 297
7.6.2 降采样 298
7.6.3 插零和抽取器 299
7.6.4 CIC滤波器 300
7.6.5 采样率变换范例 304
7.7 快速傅里叶变换 308
7.7.1 多周期实现 311
7.7.2 流水线实现 319
7.8 PID控制器 324
第8章 数字通信应用 329
8.1 线性反馈移位寄存器 329
8.2 循环冗余校验 331
8.3 基带编解码 333
8.4 基带通道的范例和仿真 336
8.5 混频和相干解调 339
8.6 AM和ASK 340
8.6.1 调制 340
8.6.2 解调 341
8.6.3 调制解调仿真 344
8.7 PM和PSK 346
8.7.1 调制 346
8.7.2 解调 348
8.7.3 调制解调仿真 349
8.8 FM和FSK 351
8.8.1 调制 351
8.8.2 解调 353
8.8.3 调制解调仿真 354
8.9 QPSK和QAM 356
8.9.1 QAM调制 357
8.9.2 QAM解调 360
8.9.3 位同步和判决 361
8.9.4 调制解调仿真 363
8.10 载波同步和数字锁相环 366
8.10.1 数字锁相环恢复载波 367
8.10.2 QAM载波恢复仿真 369
附录A SystemVerilog关键字 373
附录B 全书模块依赖关系 377