内容简介
第1章 绪论
第2章 寄存器传输语言(RTL)
第3章 可综合的Verilog——用于电路设计
3.1什么是Verilog
3.2 Verilog的发展历史
3.3 Verilog的结构
3.4硬件RTL代码的执行
3.5 Verilog模块分析
3.6 Verilog中的触发器
3.6.1带RST复位引脚的触发器
3.6.2没有复位引脚的触发器
3.7组合逻辑
3.7.1 always块语句
3.7.2 case和if-else语句
3.7 3赋值语句
3.8 Verilog操作符
3.8.1操作符描述
3.8.2操作符的执行顺序
3.8.3 Verilog中的注释
3.9可重用和模块化设计
3.9.1参数化设计
3.9.2 Verilog函数
3.9.3 Venlog中的generate结构
3.9.4 Verilog中的ifdef
3.9.5数组、多维数组
第4章 用于验证的Verilog语法
4.1 Verilog的测试平台
4.2 initial语句
4.3 Verilog系统任务
4.3.1 $finish/$stop
4.3.2 $display/$monitor
4.3.3 $time,$realtime
4.3.4 $random/$random(seed)
4.3.5 $save
4.3.6 $readmemh/$writememh
4.3.7 $fopen/$fclose
4.4任务
4.5存储器建模
4.6其他Verilog语法结构
4.6.1 while循环
4.6.2 for循环、repeat
4.6.3 force/release
4.6.4 fork/join
4.7一个简单的testbench
第5章 数字电路设计——初级篇
5.1组合逻辑门
5.1.1逻辑1和逻辑0
5.1.2真值表
5.1.3晶体管
5.1.4反相器
5.1.5与门
5.1.6或门
5.1.7与非门
5.1.8或非门
5.1.9 XOR(异或)、XNOR(异或非)
5.1.10缓冲门
5.1.11复用器
5.1.12通用逻辑门——NAND、 NOR
5.1.13复杂门电路
5.1.14噪声容限
5.1.15扇入和扇出
5.2德摩根定理
5.3通用D触发器
5.3.1 D触发器时序图
5.4建立和保持时间
5.4.1建立时间
5.4.2保持时间
5.4.3亚稳态
5.5单比特信号同步
5.5.1两个触发器构成的同步器
5.5.2信号同步规则
5.6关于时序
5.7事件/边沿检测
5.7.1同步上升沿检测
5.7.2同步下降沿检测
5.7.3同步上升/下降沿检测
5.7.4异步输入上升沿检测
5.8数值系统
5.8.1十进制数值系统
5.8.2二进制数
5.8.3十进制数到二进制数的转换
5.8.4十六进制数值系统
5.8.5十六进制数和二进制数的转换
5.9加法和减法
5.9.1行波进位加法器
5.9.2超前进位加法
5.9.3累加器
5.10乘和除
5.10.1乘以一个常数
5.10.2除以常数(2的整数次幂)
5.11计数器
5.11.1加法/减法计数器
5.11.2 LFSR(线性反馈移位寄存器)计数器
第6章 数字设计———基础模块
6.1 LFSR
6.1.1引言
6.1.2斐波那契 LFSR与伽罗瓦LFSR
6.1.3 LFSR反馈多项式
6.1.4 LFSR的用法
6.2扰码与解扰
6.2.1什么是扰码与解扰
6.2.2扰码的作用
6.2.3串行扰码器
6.2.4并行扰码器
6.2.5扰码电路设计要点
6.2.6 PCIe扰码电路
6.2.7 Verilog RTL-PCIe扰码器
6.3检错与纠错
6.3.1检错
6.3.2错误纠正
6.3.3纠错编码
6.3.4汉明码
6.3.5汉明码应用举例——DDR ECC
6.3.6 BCH编码
6.3.7里德-所罗门编码
6.3.8 LDPC编码
6.3.9卷积码
6.3.10卷积译码
6.3.11软判决与硬判决
6.4奇偶校验
6.4.1偶校验和奇校验
6.4.2奇偶校验位的生成
6.4.3奇偶校验的应用
6.5 CRC(循环冗余校验)
6.5.1 CRC介绍
6.5.2串行CRC计算
6.5.3并行CRC计算
6.5.4部分数据CRC计算
6.5.5常用CRC类型
6.6格雷编码/解码
6.6.1二进制码转换为格雷编码的通用电路
6.6.2格雷码转换为二进制码的通用电路
6.7译码器(7段数码显示实例)
6.8优先级编码
6.8.1常规编码器的Verilog代码
6.8.2优先级编码器的Verilog代码
6.9 8b/ 1 0b编码/解码
6.9.1 8b/ 1 0b编码方式
6.9.2多字节8b/ 1 0b编码
6.9.3 disparity选择8b/10b编码方案
6.10 64b/66b编码/解码
6.10.1 64b/66b编码机制
6.10.2 128b/ 130b编码机制
6.11 NRZ、NRZI编码
6.12移位寄存器与桶形移位器
6.12.1左移位与右移位
6.12.2左循环移位与右循环移位
6.12.3桶形移位器
6.13数据转换器
6.13.1由宽到窄数据转换
6.13.2由窄到宽数据转换
6.14同步技术
6.14.1使用FIFO进行的数据同步
6.14.2握手同步方式
6.14.3脉冲同步器
6.14.4相位、频率关系固定时的跨时钟域数据传输
6.14.5准同步时钟域
6.15计时(微秒、毫秒和秒)脉冲的产生
6.16波形整形电路
第7章 数字设计先进概念(第1部分)
7.1时钟
7.1.1频率和时钟周期
7.1.2不同的时钟机制
7.1.3同步时钟
7.1.4源同步时钟
7.1.5嵌入式时钟
7.1.6准同步时钟
7.1.7异步系统
7.1.8扩频时钟
7.1.9时钟抖动
7.2复位方法
7.2.1非同步复位(异步复位)
7.2.2复位同步电路
7.2.3同步复位
7.2.4异步复位和同步复位的选择
7.3吞吐率
7.3.1增加吞吐率的方法
7.3.2更高的频率
7.3.3更宽的数据通道
7.3.4流水线
7.3.5并行处理
7.3.6无序执行(乱序执行)
7.3.7高速缓存(cache)
7.3.8预读取
7.3.9多核
7.4时延
7.4.1降低时延的方法
7.5流控
7.5.1介绍
7.5.2数据转发:data valid和data ack
7.5.3基于信用的流控:PCIe
7.5.4 SATA流控机制
7.5.5吉比特以太网流控
7.5.6 TCP滑动窗流控机制
7.6流水线操作
7.6.1流水线介绍
7.6.2流水线的简单实例
7.6.3 RISC——流水线处理器
7.6.4流水线结构和并行操作
7.6.5流水线加法器
7.6.6并行加法器
7.6.7系统设计中的流水线
7.7 out-of-order执行(乱序执行)
7.7.1现代处理器:out-of-order执行
7.7.2 SATA NCQ : out-of-order执行
第8章 数字设计先进概念(第2部分)
8.1状态机
8.1.1引言
8.1.2状态机泡泡图
8.1.3状态机:推荐方式
8.1.4二进制编码的状态机
8.1.5独热码编码的状态机
8.1.6二进制编码和独热码比较
8.1.7米里型和摩尔型状态机
8.1.8子状态机
8.2 FIFO
8.2.1引言
8.2.2 FIFO操作
8.2.3同步FIFO
8.2.4同步FIFO
8.2.5异步FIFO的工作机制
8.2.6异步FIFO的实现
8.3 FIFO高级原理
8.3.1 FIFO的大小
8.3.2 FIFO的深度
8.3.3辅助数据或标签
8.3.4快照/回退操作
8.3.5直通交换和存储转发模式
8.3.6 FIFO指针复位
8.3.7不同的写入、读取数据宽度
8.3.8使用FIFO的缺点
8.3.9基于触发器或者SRAM的FIFO
8.4仲裁
8.4.1关于仲裁
8.4.2常规仲裁方案
8.4.3严格优先级轮询
8.4.4公平轮询
8.4.5公平轮询(仲裁w/o死周期)
8.4.6带权重的轮询(WRR)
8.4.7权重轮询(WRR):第二种方法
8.4.8两组轮询
8.5总线接口
8.5.1总线仲裁
8.5.2 split-transaction(分割处理)总线
8.5.3流水线式总线
8.6链表
8.7近期最少使用(LRU)算法
8.7.1 LRU的矩阵实现
8.7.2采用矩阵法实现LRU的Verilog代码
第9章 设计ASIC/SoC
9.1设计芯片——如何开展
9.2结构和微结构
9.2.1尽可能保持简单
9.2.2善于平衡
9.2.3处理好错误和异常
9.3数据路径
9.3.1数据流
9.3.2时钟
9.4控制单元
9.4.1关注边界条件
9.4.2注意细节
9.4.3多输入点
9.4.4正确理解规范
9.5其他考虑
9.5.1门数
9.5.2焊盘受限与内核受限
9.5.3时钟树和复位树
9.5.4 EEPROM、配置引脚
第10章设计经验
10.1文档
10.1.1可读性
10.1.2注释
10.1.3命名规则
10.2在编写第一行代码之前
10.2.1直到你脑海里有了蓝图才开始
10.2.2脑海中的模拟
10.3一些建议
10.3.1哪种风格——数据流或算法
10.3.2寄存器型输出
10.3.3使用状态机而不是松散的控制逻辑
10.3.4综合和仿真不匹配
10.3.5设计的模块化和参数化
10.3.6加法器、减法器的有效使用
10.4需要避免的情况
10.4.1不要形成组合逻辑环路
10.4.2避免意外生成锁存器
10.4.3不要采用基于延迟的设计
10.4.4不要对一个变量多次赋值
10.5初步完成RTL代码之后
10.5.1初步完成代码之后的回顾
10.5.2目测RTL代码
10.5.3对发现bug感到惊喜
10.6设计要面向未来使用需求
10.6.1易于实现的寄存器结构
10.6.2考虑将来需求
10.7高速设计
10.7.1使用独热码进行状态编码
10.7.2使用互斥的数据选择器而不是优先级编码器
10.7.3避免大量散乱的组合逻辑电路
10.7.4复制或克隆
10.7.5使用同步复位时要小心
10.7.6将后到的信号放在逻辑的前面
10.8 SoC设计经验
10.8.1使用双触发器同步电路
10.8.2将所有复位电路放在一起
第11章系统概念(第1部分)
11.1 PC系统结构
11.2存储器
11.2.1存储器层次结构
11.2.2 CPU使用高速缓存的方法
11.2.3 cache的架构
11.2.4 cache的组织方式
11.2.5虚拟存储器(Virtual Memory)
11.2.6动态随机访问存储器(DRAM)
11.2.7静态随机访问存储器(SRAM)
11.2.8内容可寻址存储器(CAM)
11.2.9 CAM的Verilog模型
11.2.10 ROM、PROM、EPROM和EEPROM
11.2.11闪存
11.3中断
11.3.1中断不同部分
11.3.2中断向量表
11.3.3 I/O设备产生的中断
11.3.4高级可编程中断控制器
11.3.5 INTx中断共享
11.3.6 MSI中断
11.3.7 MSI-X中断
11.3.8中断聚合
11.3.9中断产生的RTL示例
11.4 PIO(Programmed IO)模式的数据传送
11.5直接存储器访问
11.5.1什么是DMA
11.5.2第三方、第一方 DMA和RDMA
11.5.3分/集式DMA
11.5.4 DMA描述符
11.5.5环形描述符结构
11.5.6链表描述符结构
11.5.7 DMA控制器的设计
11.5.8 DMA控制器的Verilog RTL模型
第12章系统概念(第2部分)
12.1永久存储器——硬盘
12.1.1磁盘结构
12.1.2磁盘寻址
12.1.3硬盘控制器
12.1.4硬盘的类型:SATA硬盘和基于SAS的硬盘
12.1.5 RAID(独立磁盘冗余阵列)
12.2永久存储设备——固态盘
12.2.1闪存的组织
12.2.2闪存写入、擦除
12.2.3逻辑地址到物理地址的转换
12.2.4无用存储空间回收
12.2.5耗损均衡
12.2.6写放大及其缓解方法
12.2.7超量供给
12.2.8 SSD中的高速缓存
12.2.9 ECC和RAID
12.2.10闪存的一些重要指标
12.2.11 NVM总线
12.3 DDR存储器
12.3.1 DDR存储器命令
12.3.2 DDR的初始化和校准
12.3.3 DDR存储器术语
12.4软硬件协同
12.4.1设备驱动
12.4.2软件层
12.4.3 BIOS
12.4.4内核模式和用户模式
12.4.5控制/状态寄存器、RO、粘着位
第13章嵌入式系统
13.1 AMBA总线架构
13.1.1 AMBA模块图
13.1.2 AHB总线
13.1.3 AXI总线
13.2其他总线(OCP、Avalon、Wishbone和IBM Core Connect)
13.3非透明桥接
第14章ASIC/SoC的可测试性
14.1简介
14.1.1为什么测试很重要
14.1.2故障类型
14.2 ATPG
14.3扫描
14.3.1内部扫描
14.3.2边界扫描
14.3.3 IDDQ测试
14.4 SoC测试策略
14.4.1 SoC的内部结构
14.4.2可测性设计(DFT)
14.4.3 DFT设计准则
14.4.4测试层面和测试向量
第15章芯片开发流程与工具
15.1简介
15.1.1芯片设计的不同阶段
15.2前端设计过程所使用的工具
15.2.1代码分析工具
15.2.2仿真工具
15.3后端设计过程使用的工具
15.3.1综合工具
15.3.2静态定时分析及常用工具
15.3.3 SDC约束文件
15.3.4 Max Cap/Maxtrans检查
15.3.5门级仿真
15.4 tape-out和相关工具
15.4.1不同类型的tape-out
15.4.2等效性检查
15.4.3网表ECO
15.4.4 FIB操作
15.5在硅片调试
第16章功率节约技术
16.1简介
16.2功耗分析基础
16.3通过控制工作频率降低功耗
16.3.1降低频率、增大数据路径宽度
16.3.2动态频率调整
16.3.3零频率/门控时钟
16.4减少电容负载
16.5降低工作电压
16.5.1动态改变工作电压
16.5.2零操作电压
16.5.3电源阱与隔离
第17章功率管理
17.1功率管理的基础知识
17.2系统级功率管理与ACPI
17.3 CPU功率状态——C状态
17.4设备级功率管理与D状态
17.5系统、设备和链路间的关系
第18章串行总线技术
18.1串行总线结构
18.1.1串行总线的出现
18.1.2串行总线的优缺点
18.1.3串行总线结构
18.1.4串行总线时钟
18.1.5发送路径的微结构
18.1.6接收路径的微结构
18.2串行总线中的先进设计理念
18.2.1字节分割/链路聚合
18.2.2通道绑定与去偏移
18.2.3极性翻转
18.2.4线路翻转
18.2.5锁相环(PLL)
18.3串行总线的PMA层功能
18.3.1发送均衡
18.3.2接收均衡
18.3.3端接电阻
第19章串行协议(第1部分)
19.1 PCIe
19.1.1 PCIe功能特性
19.1.2 PCIe带宽
19.1.3 PCIe交换结构
19.1.4 PCIe配置空间寄存器
19.1.5 PCIe的交换机制
19.2 SATA
19.2.1引言
19.2.2 SATA架构
19.2.3 SATA的其他变种
19.3通用串行总线
19.3.1引言
19.3.2全速、高速和超高速USB
19.3.3 USB的显著功能特性
19.3.4 USB 3.0(超高速USB)
19.4雷电接口
19.4.1雷电接口介绍
19.4.2雷电接口架构
第20章串行协议(第2部分)
20.1以太网简介
20.2 OSI和以太网协议层次
20.3以太网帧格式
20.4 10 Mbps以太网
20.5快速以太网(100 Mbps)
20.6千兆位以太网( 1 Gbps)
20.7万兆位以太网( 10 Gbps)
20.8 40 G和100 G以太网
20.9以太网桥接器、交换机与路由器
附录A资源
附录B FPGA 101
附录C用于验证的测试平台(testbench)
附录D System Verilog断言(SVA)
缩略词