第1章 从春天走来 1
1.1 撒下一把种子 1
1.2 繁芜苏醒 2
1.3 鹤立鸡群 5
1.4 丰满 6
第2章 看透你的心 10
2.1 灵活,并不是善变——SRAM 10
2.1.1 动静RAM之间 10
2.1.2 SRAM是如何构成FPGA的 11
2.1.3 往细处讲讲查找表 12
2.1.4 关于LUT现状的讨论 13
2.1.5 灵活归一码,也有缺点 14
2.2 想回到过去,难也——反熔丝 15
2.2.1 何为熔丝,何为反熔丝 15
2.2.2 回不去,得从编程机理说起 15
2.2.3 以小见大——最小单元MUX 16
2.2.4 回不去的痛 17
2.3 灵魂,一块住进去——FLASH 18
2.3.1 FLASH,灵魂的驻扎地 18
2.3.2 一小步一个大家族 18
2.3.3 挺好的了,只是时候未到 18
第3章 走进生活,生生不息 20
3.1 你存在,眼睛的世界 20
3.1.1 概述 20
3.1.2 视频编解码 20
3.1.3 目标识别 21
3.1.4 图像处理支持资源 21
3.2 你,使我们走近 24
3.2.1 有线通信 24
3.2.2 无线通信 25
3.2.3 通信领域支持资源 26
3.3 你,承载着“0”和“1”的世界 29
3.3.1 概述 29
3.3.2 数字处理系统模型 29
3.3.3 五花八门的方式 30
3.3.4 其实挺有优势 31
3.3.5 DSP支持资源 32
3.4 你,可以像大脑一样思考 33
3.4.1 概述 33
3.4.2 创新挑战和机遇 34
3.4.3 嵌入式支持资源 35
3.5 可以考虑这些解决方案 36
第4章 像绘画一样设计系统 38
4.1 抽出系统设计模型 38
4.2 最美不过过程 39
4.2.1 系统分析 39
4.2.2 方案设计 39
4.2.3 top-down 40
4.2.4 硬件化 40
4.2.5 平台选择 41
第5章 开发流程走一遍 42
5.1 设计输入 43
5.1.1 设计输入方式 43
5.1.2 输入方式使用探讨 45
5.2 综合 46
5.2.1 编译 47
5.2.2 映射 47
5.3 布局布线 48
5.3.1 布局 48
5.3.2 布线 49
5.4 约束 49
5.4.1 综合约束 49
5.4.2 位置约束 50
5.4.3 时序约束 50
5.5 开发仿真 51
5.5.1 测试平台 51
5.5.2 RTL级仿真 52
5.5.3 静态仿真 52
5.5.4 时序仿真 53
5.6 静态时序分析 54
5.7 在线调试 54
5.8 配置及固化 55
5.8.1 FPGA配置过程 55
5.8.2 举例——Altera FPGA配置全过程 55
5.8.3 配置模式 56
5.8.4 模式选择 58
5.9 开发工具总结 59
第6章 Verilog HDL or VHDL? 61
6.1 Verilog HDL本结构 61
6.1.1 端口列表定义 62
6.1.2 I/O说明 63
6.1.3 内部信号声明 64
6.1.4 模块功能的定义 64
6.2 VHDL本结构 65
6.2.1 程序包说明 65
6.2.2 实体说明 66
6.2.3 结构体说明 66
6.3 民主的Verilog 67
6.4 Verilog升级System Verilog 67
第7章 拿下常量数据类型 69
7.1 我该如何表达整数 69
7.1.1 Verilog中整数长啥样 69
7.1.2 负数 70
7.1.3 X和Z之间的事 70
7.1.4 变与不变的参量型 72
7.1.5 我和整数的约定 73
7.2 实数常量是几许人物 74
7.3 字符串是怎么回事 75
第8章 拿下变量数据类型 76
8.1 多变的变量 76
8.1.1 网络(net)连接类型 76
8.1.2 寄存器(Register)类型 85
8.2 wire和reg才是精干 86
8.2.1 wire型 86
8.2.2 reg型 87
8.3 不要以为reg就是触发器 88
8.4 memory其实也是reg 89
8.4.1 该怎么声明memory型变量 89
8.4.2 该怎么对memory型变量赋值 89
8.5 inout该怎么定义类型 91
第9章 拿下运算符 92
9.1 林林总总的运算符 92
9.1.1 逻辑运算符 92
9.1.2 按位运算符 94
9.1.3 缩减运算符 96
9.1.4 关系运算符 96
9.1.5 等式运算符 97
9.1.6 移位运算符 99
9.1.7 位拼接运算符 100
9.1.8 三目运算符 101
9.2 给它们排个序吧 102
9.3 赋值语句 102
9.3.1 阻塞赋值 103
9.3.2 非阻塞赋值 104
9.3.3 塞还是不塞 105
第10章 不再纠结if和case 107
10.1 if不同形态 107
10.2 case不同形态 109
10.3 if和case之间的转换 111
10.4 if和case,谁更好 112
10.5 不完全的if和case 115
10.6 关于case的约束 117
第11章 循环语句 120
11.1 只能仿真的循环 120
11.1.1 repeat是个定数 120
11.1.2 forever能永远吗 122
11.1.3 有限的while 125
11.2 特立独行的for 126
11.2.1 for的基本形态 126
11.2.2 可以综合的for 127
第12章 块语句以及过程块 130
12.1 说说begin_end 130
12.2 说说fork_join 132
12.3 说说assign 133
12.4 说说always 133
第13章 抽象级别的描述 136
13.1 不同抽象级别概述 136
13.2 结构级描述 137
13.2.1 门级结构描述及其说明语法 137
13.2.2 用门级结构描述二选一选择器 140
13.3 行为级描述 141
13.3.1 行为级与RTL级区别 141
13.3.2 RTL级描述二选一选择器 142
第14章 层次化建设及模块例化 145
14.1 层次化建模概念 145
14.2 模块例化 146
14.3 四位脉动进位计数器 147
第15章 建设测试磨坊 149
15.1 编写Testbench目的 149
15.2 基本的Testbench结构 149
15.3 产生激励的一些描写方式 150
15.3.1 产生时钟的几种方式 150
15.3.2 产生复位信号的几种形式 151
15.4 关于测试的建议 152
第16章 仿真工具基本使用 153
16.1 ModelSim简介 153
16.2 ModelSim HDL仿真优势 153
16.3 ModelSim基本使用 154
16.3.1 ModelSim使用流程 155
16.3.2 简单2-4编码器RLT仿真实例 155
16.4 高级命令方式仿真 167
16.4.1 常用一些命令 167
16.4.2 其他命令学习方法 169
16.4.3 do文件的编写与使用 170
16.5 ModelSim私藏技巧 173
16.5.1 利用ModelSim模板建立Testbench 173
16.5.2 Wave查看技巧 175
16.5.3 仿真代码的修改 178
第17章 组合逻辑专题 179
17.1 组合逻辑描述方法 179
17.1.1 assign语句实现组合逻辑 179
17.1.2 always块实现组合逻辑 180
17.2 常用组合电路 183
17.2.1 多路器 183
17.2.2 加法器 185
17.2.3 译码器 186
17.2.4 编码器 188
第18章 时序逻辑专题 191
18.1 时序逻辑描述方法 191
18.2 再来两个例子 194
18.2.1 分频电路 194
18.2.2 沿提取电路 197
第19章 函数与任务专题 199
19.1 task 199
19.1.1 task特点及描述 199
19.1.2 task举例说明 200
19.2 function 201
19.2.1 function特点及描述 201
19.2.2 function举例说明 202
19.3 task和function不混淆 203
19.4 系统任务与函数 204
19.4.1 标准输出任务 204
19.4.2 文件管理任务 206
19.4.3 仿真控制任务 209
19.4.4 时间函数 209
19.4.5 其他 210
第20章 编译预处理与可综合性 211
20.1 编译预处理概念 211
20.2 常用编译预处理 211
20.2.1 ?define、?undef 211
20.2.2 ?include 213
20.2.3 ?timescale 215
20.2.4 ?ifdef、?elsif、?else、?endif 219
20.3 不再烦恼可综合性 221
第21章 状态机专题 223
21.1 状态机的概念 223
21.2 状态机的分类 224
21.2.1 Moore状态机 224
21.2.2 Mealy状态机 225
21.3 状态机实现步骤现场 225
21.3.1 三要素的提取 225
21.3.2 状态转移图 226
21.3.3 状态编码 227
21.3.4 状态机的描述 228
21.4 不同状态机描述方式 228
21.4.1 一气呵成的一段式 228
21.4.2 一看即懂的二段式 231
21.4.3 高效率的三段式 233
21.5 safe状态机 237
第22章 开发工具秘籍 238
22.1 QuartusⅡ简介 238
22.2 工程实例介绍 241
22.3 准备 242
22.4 新建工程 243
22.5 设计输入 248
22.6 分析综合 265
22.7 布局布线 269
22.8 下载与固化 273
22.8.1 生成配置和固化文件 273
22.8.2 准备工作 274
22.8.3 下载 274
22.8.4 固化 275
22.9 总结 277
第23章 联合仿真和调试 278
23.1 ModelSim与Quartus Ⅱ联合使用 278
23.1.1 联合准备工作 278
23.1.2 Altera仿真库的介绍 279
23.1.3 利用ModelSim做前仿真 280
23.1.4 利用ModelSim做静态仿真 285
23.1.5 利用ModelSim做时序仿真 290
23.2 在线调试与SignalTap Ⅱ的使用 292
23.2.1 创建STP文件 292
23.2.2 设置采集时钟 292
23.2.3 在STP文件中分配信号 295
23.2.4 指定采样点数及触发位置 296
23.2.5 逻辑分析仪触发控制 297
23.2.6 编译嵌入SignalTap Ⅱ逻辑分析仪的设计 300
23.2.7 SignalTap Ⅱ分析器件编程 301
23.2.8 查看SignalTap Ⅱ采样数据 301
23.2.9 数据保存 302
第24章 IP核,拿来主义 304
24.1 IP核的概念 304
24.2 RAM核使用 304
24.3 FIFO使用 308
24.4 PLL核使用 312
第25章 用FPGA来搞搞音乐 317
25.1 演奏原理 317
25.2 音调的控制 317
25.3 音长的控制 319
25.4 《天空之城》 320
第26章 You Got It! 325
26.1 显示设备H1602B 325
26.1.1 H1602B端口与电路连接 325
26.1.2 H1602B的字符集和指令集 326
26.2 显示实现 328
参考文献 336