第一篇 FPGA设计基础篇 2
第1章 FPGA开发基础知识 2
1.1 可编程逻辑器件基础 2
1.1.1 可编程逻辑器件概述 2
1.1.2 FPGA的发展历史 4
1.1.3 FPGA器件开发工具 4
1.2 FPGA器件的基础知识 5
1.2.1 FPGA芯片的工作原理 5
1.2.2 FPGA基本架构 7
1.3 FPGA基本开发流程及其工具 12
1.3.1 功能定义和器件选型 14
1.3.2 设计输入 14
1.3.3 功能仿真 14
1.3.4 综合优化 14
1.3.5 综合后仿真 15
1.3.6 实现与布局布线 15
1.3.7 时序仿真 15
1.3.8 芯片编程与调试 15
1.4 FPGA技术的优势及发展趋势 17
1.4.1 FPGA技术的开发优势 17
1.4.2 FPGA发展趋势 18
1.5 本章总结 19
第2章 基于Verilog HDL的设计流程 20
2.1 Verilog HDL的基本知识 20
2.1.1 硬件描述语言Verilog HDL的历史 20
2.1.2 Verilog HDL与其他硬件描述语言的比较 21
2.1.3 Verilog HDL的主要功能 21
2.1.4 Verilog HDL的设计流程简介 22
2.2 Verilog的基本语法 24
2.2.1 模块结构、数据类型、变量和基本运算符号 24
2.2.2 功能描述语句 30
2.2.3 系统任务和预处理语句 33
2.3 Verilog的高阶语法 39
2.3.1 设计模型的不同抽象级别 39
2.3.2 简单组合逻辑模块 44
2.2.3 简单时序逻辑模块 47
2.3.4 状态机的原理、结构和设计 49
2.4 本章总结 51
第3章 FPGA器件选择 52
3.1 如何选择合适的器件 52
3.1.1 FPGA目标平台的选择和开发工具的支持 52
3.1.2 器件的硬件资源 53
3.1.3 电气接口标准 54
3.1.4 器件的速度等级 54
3.1.5 器件的温度等级 55
3.1.6 器件的封装 55
3.1.7 器件的价格 55
3.2 Xilinx芯片 55
3.2.1 Spartan-2系列 55
3.2.2 Spartan-2E系列 56
3.2.3 Spartan-3系列 57
3.2.4 Spartan-3E系列 58
3.2.5 Spartan-3A系列 59
3.2.6 Spartan-3A DSP系列 60
3.2.7 Spartan-3AN系列 61
3.2.8 Vitrex系列 61
3.3 Xilinx PROM芯片介绍 65
3.4 Altera芯片 66
3.4.1 Cyclone系列 66
3.4.2 Cyclone Ⅱ系列 68
3.4.3 Stratix系列 70
3.4.4 Stratix GX系列 72
3.4.5 Stratix Ⅱ系列 74
3.5 Actel芯片 76
3.5.1 ProASIC3系列 76
3.5.2 ProASIC3L系列 78
3.5.3 Fusion系列 79
3.5.4 IGLOO系列 81
3.5.5 IGLOO+系列 83
3.5.6 nano系列 84
3.6 Lattice芯片 87
3.6.1 LatticeECP4系列 87
3.6.2 LatticeECP3系列 89
3.6.3 LatticeECP2系列 90
3.6.4 LatticeSC(System Chip)系列 91
3.6.5 MachXO2系列 93
3.6.6 MachXO系列 94
3.6.7 LatticeXP2系列 95
3.7 Atmel芯片 96
3.8 本章总结 97
第4章 ISE设计指南 98
4.1 ISE套件概述 98
4.2 ISE菜单操作 99
4.2.1 ISE用户界面 99
4.2.2 File菜单 100
4.2.3 Edit菜单 100
4.2.4 View菜单 101
4.2.5 Project菜单 101
4.2.6 Source菜单 102
4.2.7 Process菜单 102
4.2.8 Windows菜单 103
4.3 ISE工程建立与设计输入 103
4.3.1 新建工程 103
4.3.2 HDL输入 105
4.3.3 原理图输入 107
4.3.4 状态机输入 109
4.4 ISE的IP核设计 117
4.4.1 IP核简介 118
4.4.2 IP核的应用 118
4.5 ISE用户约束文件 122
4.5.1 约束文件的简述 122
4.5.2 UCF文件的语法 123
4.5.3 引脚和区域约束语法 123
4.5.4 时序约束语法 124
4.6 ISE设计综合和行为仿真 126
4.6.1 ISE综合 126
4.6.2 ISE行为仿真 130
4.7 ISE设计实现和时序仿真 134
4.7.1 引脚约束 134
4.7.2 ISE设计实现 136
4.8 ISE设计下载 140
4.9 ISE与第三方软件 142
4.9.1 ModelSim软件 142
4.9.2 Synplify Pro软件 143
4.10 ISE高级组件 144
4.10.1 在线逻辑分析仪Chipscope 144
4.10.2 平面布局规划器PlanAhead 145
4.10.3 时序分析器Timing Analyzer 146
4.10.4 底层编辑器FPGA Editor 147
4.10.5 布局规划器Floorplanner 148
4.11本章总结 148
第5章 FPGA开发实例 149
5.1 直接数字式频率合成器 149
5.1.1 DDS基本原理 149
5.1.2 DDS算法的FPGA实现 151
5.2 FIR滤波器 154
5.2.1 数字滤波器的分类 155
5.2.2 设计指标及描述 155
5.2.3 FIR滤波器的FPGA实现 156
5.3 QPSK调制器 160
5.3.1 QPSK基本原理 161
5.3.2 QPSK调制系统 162
5.3.3 QPSK调制解调器的FPGA实现 163
5.4 序列检测器 168
5.5 简化的RISC_CPU设计 173
5.6 简单卷积器的设计 189
5.7 利用SRAM设计一个FIFO 201
5.8 本章总结 207
第二篇 数字系统的建模与仿真 211
第6章 MATLAB概论 211
6.1 MATLAB R2012a简介 211
6.1.1 MATLAB R2012a的新特点 211
6.1.2 MATLAB主要组成部分 212
6.1.3 MATLAB对硬件和软件的要求 213
6.1.4 安装步骤 213
6.1.5 MATLAB R2012a的其他操作 220
6.2 MATLAB的开发环境 221
6.2.1 主菜单和工具栏 221
6.2.2 作界面的各个窗口 222
6.2.3 MATLAB R2012a通用命令 224
6.2.4 MATLAB 7.0帮助系统 225
6.3 M文件编辑器 228
6.3.1 M文件的创建及界面 228
6.3.2 M文件的运行和调试 228
6.3.3 M文件的参数设置 229
6.4 本章总结 231
第7章 信道编译码仿真中MATLAB的相关基础知识 232
7.1 矩阵运算基础 232
7.1.1 矩阵的创建 232
7.1.2 矩阵信息的查询与获取 235
7.1.3 矩阵变换 238
7.1.4 矩阵和数组的数学运算 246
7.1.5 矩阵函数和矩阵元素的数学函数 252
7.2 MATLAB的程序设计基础 257
7.2.1 变量 257
7.2.2 程序流程控制 258
7.2.3 程序的调试 262
7.2.4 程序的优化 263
7.3 MATLAB的数据可视化 264
7.3.1 二维绘图 265
7.3.2 图形处理 268
7.4 Simulink基础 272
7.4.1 Simulink初识 272
7.4.2 Simulink建模 275
7.4.3 Simulink仿真实例——典型的数字通信系统 284
7.5 本章总结 286
第8章 通信信道建模与仿真 288
8.1 有线信道建模与仿真 288
8.1.1 光纤通信 288
8.1.2 光放大器噪声模型 289
8.2 无线信道建模与仿真 290
8.2.1 莱斯和瑞利衰落信道模型 291
8.2.2 莱斯和瑞利衰落信道模型的MATLAB实现 293
8.2.3 Jakes衰落信道模型 296
8.2.4 多径非相关瑞利衰落信道仿真模型 298
8.2.5 COST207信道模型 301
8.2.6 MATLAB中的无线信道仿真函数 308
8.3 本章总结 310
第9章 LDPC码 311
9.1 线性分组码 311
9.1.1 校验矩阵 312
9.1.2 生成矩阵 312
9.1.3 系统编码 313
9.2 LDPC码的表示 313
9.2.1 LDPC码的矩阵表示 313
9.2.2 LDPC码的Tanner图表示 314
9.2.3 度数分布 315
9.3 LDPC码的构造 315
9.3.1 校验矩阵的随机构造 315
9.3.2 校验矩阵的结构化构造 316
9.3.3 实用型的构造方法 318
9.3.4 IEEE 802.1 6e标准LDPC码的构造 319
9.4 二进制LDPC码的编码方法 321
9.4.1 基于高斯消去的编码 321
9.4.2 基于近似下三角矩阵的编码 322
9.4.3 IEEE 802.1 6e标准LDPC码的快速编码 322
9.5 二进制LDPC码的译码方法 324
9.5.1 概率BP算法 324
9.5.2 LLR BP算法 326
9.5.3 UMP BP_Based算法 328
9.5.4 其他改进算法 328
9.6 本章总结 329
第10章 LDPC码的MATLAB仿真实现 330
10.1 Gallager构造的LDPC码的MATLAB仿真实现 330
10.2 Block-LDPC码的构造和编码算法仿真实现 331
10.2.1 Block-LDPC码的构造 331
10.2.2 Block-LDPC码基于近似下三角矩阵的编码算法 338
10.3 IEEE 802.1 6e标准的LDPC码的MATLAB仿真实现 339
10.3.1 IEEE 802.1 6e标准的LDPC码的构造 339
10.3.2 IEEE 802.1 6e标准LDPC码的编码算法 341
10.4 LDPC码译码算法仿真实现 343
10.4.1 LLR BP算法仿真实现 343
10.4.2 UMP BP-Based算法仿真 346
10.5 本章总结 347
第11章 LDPC码在无线通信信道下的仿真实例 348
11.1 AWGN信道中的LDPC码的性能分析 348
11.1.1 Block-LDPC码的仿真 349
11.1.2 IEEE 802.1 6e标准LDPC码的仿真 355
11.2 LDPC码在瑞利和莱斯衰落信道中的性能分析 359
11.2.1 Block-LDPC码在莱斯信道中的性能分析 359
11.2.2 Block-LDPC码在瑞利信道中的性能分析 360
11.2.3 莱斯和瑞利信道的比较 361
11.3 IEEE 802.1 6e标准LDPC码在瑞利信道和赖斯信道中的性能分析 362
11.3.1 IEEE 802.1 6e标准LDPC码在莱斯信道中的性能分析 362
11.3.2 IEEE 802.1 6e标准LDPC码在瑞利信道中的性能分析 363
11.4 两种LDPC码在Jakes衰落信道模型下的性能分析 363
11.5 多径非相关瑞利衰落信道下的性能分析 367
11.6 本章总结 368
第三篇 通信系统中的FPGA实现 372
第12章 简单信道编译码的FPGA实现 372
12.1 信道编码的作用 372
12.2 线性分组码 373
12.3 线性分组码的FPGA实现 375
12.4 RS码 378
12.4.1 RS码的原理 378
12.4.2 编码器分类 380
12.4.3 码型的选择 382
12.5 RS码的FPGA实现 382
12.5.1 加法器 382
12.5.2 乘法器 383
12.5.3 编码电路的实现 385
12.5.4 顶层文件 386
12.5.5 编码控制模块 387
12.5.6 系数乘法模块 388
12.5.7 编码结果 391
12.6 CRC校验码 392
12.7 CRC码的FPGA实现 394
12.7.1 顶层模块 395
12.7.2 编码控制模块 395
12.7.3 并行计算等式模块 397
12.7.4 ModelSim仿真结果 398
12.8 卷积码 400
12.9 卷积码的FPGA实现 403
12.10 Viterbi译码 405
12.10.1 Viterbi译码原理 406
12.10.2 Viterbi算法的基本原理 407
12.11 Viterbi译码的FPGA实现 408
12.11.1 顶层模块 409
12.11.2 控制模块 410
12.11.3 计算幸存路径模块 412
12.12本章总结 420
第13章 Turbo码编译码的FPGA实现 421
13.1 Turbo码中的交织器 421
13.2 规则交织器 422
13.2.1 分组交织器 422
13.2.2 分组螺旋交织器 422
13.3 伪随机交织器 422
13.3.1 S随机交织器 422
13.3.2 模k交织器 423
13.4 交织器的FPGA实现 423
13.4.1 交织器程序源码 424
13.4.2 双口RAM的IP核模块 426
13.4.3 ModelSim仿真结果 427
13.5 Turbo码编码器的算法 428
13.5.1 Turbo码编码器结构 428
13.5.2 分量编码器 430
13.5.3 删余矩阵 431
13.6 Turbo码编码的FPGA设计 432
13.6.1 顶层模块 432
13.6.2 交织器实现 434
13.6.3 ModelSim仿真结果 436
13.7 分量编码器的FPGA实现 437
13.7.1 分量编码器顶层模块 437
13.7.2 并串转换实现 438
13.7.3 卷积码编码器实现 440
13.7.4 串并转换模块实现 443
13.7.5 删余器实现 445
13.7.6 控制模块 446
13.8 Turbo码译码器的结构 450
13.8.1 软判决译码和硬判决译码 450
13.8.2 Turbo码译码器结构 451
13.8.3 Turbo码译码算法 452
13.9 Turbo码译码器的FPGA实现 455
13.9.1 欧氏距离的计算 455
13.9.2 路径度量的计算 457
13.9.3 幸存路径的计算 458
13.9.4 软输出信息的计算 459
13.9.5 外信息的计算 462
13.9.6 迭代译码以及欧氏距离的更新 462
13.9.7 顶层程序 463
13.9.8 最后硬判决的解交织器 468
13.10本章总结 475
第14章 LDPC编译码的FPGA实现 476
14.1 IEEE 802.1 6e标准LDPC码的构造 476
14.1.1 QC-LDPC码的概念 476
14.1.2 校验矩阵的构造 477
14.2 LDPC编码器的设计 479
14.2.1 传统的编码算法 479
14.2.2 基于RU算法的编码器结构 479
14.2.3 矩阵乘法器模块 481
14.2.4 前向置换模块 485
14.2.5 模块的端口定义和ip核调用 486
14.2.6 单位循环矩阵的存储 488
14.3 LDPC译码器的设计 488
14.3.1 软判决译码算法LLR BP 489
14.3.2 最小和算法(MS) 490
14.4 LDPC码译码器的FPGA实现 492
14.4.1 LDPC码基于最小和(MS)算法的译码器结构 492
14.4.2 MS_LDPC顶层模块 493
14.4.3 Control控制单元模块 495
14.4.4 VNP变量节点处理单元 497
14.4.5 CNP校验节点处理单元 499
14.4.6 Mess_mem中间信息存储器 505
14.4.7 Src_mem初始数据寄存器 505
14.4.8 inter_rom交织存储器 506
14.4.9 modelsim结果图 507
14.5 本章总结 507