本书立足于工程实践经验,首先介绍FPGA的原理、语法、设计技巧,然后详细介绍了7项常用技术的实现。每项技术从以下几方面介绍:相关技术介绍、FPGA方案框图设计、子模块设计、仿真和测试、项目开发过程中遇到的问题、定位和解决措施,其中插入了大量的状态机转换图和关键代码,方便读者学习。
本书立足于让读者真正能掌握FPGA的开发技巧,以中等难度的项目为例,详细介绍开发中的每个环节,读者读完后,可以亲自动手完成一个中等难度的项目,真正学会FPGA开发。
本书涉及的所有技术点都是笔者在项目设计中亲自完成的。从易到难介绍了7个开发项目,模块化形式的内容讲述:相关技术、FPGA方案设计、子模块设计、仿真和测试、项目开发过程中遇到的问题、定位和解决措施,便于读者学习和归纳。在编写过程中,插入了大量的状态机转换图、仿真结果和关键代码,方便读者学习,同时还加上了笔者在开发过程中遇到的实际问题及解决问题的手段、机理分析。
本书的读者群是FPGA初学者,或者对FPGA设计有一定经验,但对复杂的项目经常感到束手无策的开发人员,以及想进一步提高的朋友。
李宪强,就职于中科院,长期从事FPGA方面一线科研工作,积累了丰富的实践经验。
第1章 FPGA介绍
1.1 FPGA的优势
1.2 FPGA典型结构图
1.3 LUT原理
1.4 FPGA上电配置过程时序图
1.5 FPGA基本开发流程
第2章 Verilog语法介绍
2.1 VerilogHDL语言简介
2.1.1 什么是VerilogHDL
2.1.2 VerilogHLC的历史
2.2 VerilogHDL和VHDL语言比较
2.3 Verilog语法介绍
2.3.1 模块
2.3.2 常量
2.3.3 parameter与define的区别
2.3.4 reg和wire
2.3.5 操作符
2.3.6 assign和always语句
2.3.7 if和case语句
2.3.8 循环语句
2.3.9 模块实例化
2.3.10 预处理指令
2.3.11 系统任务
2.3.12 task和function语句的区别
2.3.13 文件操作
第3章 FPGA开发必要的技术积累
3.1 锁存器、触发器
3.2 时序的基本概念
3.2.1 建立和保持时间
3.2.2 同步系统中时序分析
3.3 异步时钟域和亚稳态
3.3.1 什么是亚稳态
3.3.2 亚稳态发生场合
3.3.3 亚稳态危害
3.3.4 怎么减少亚稳态的发生
3.3.5 案例:亚稳态导致通信异常
3.4 状态机的设计
3.5 复位信号
3.5.1 同步复位和异步复位比较
3.5.2 案例:和复位信号相关的项目
3.6 串并转换和并串转换
3.7 流水技术
3.7.1 流水技术原理
3.7.2 案例:NANDFLASH流水实现高速存储
3.8 乒乓操作
3.9 双向端口使用
3.9.1 数据总线的设计
3.9.2 程序设计
3.9.3 案例:MCU接口程序
3.10 Xilinx原语介绍
3.10.1 时钟组件
3.10.2 吉比特收发器组件
3.10.3 I/O端口组件
3.10.4 IBUFDS
3.10.5 IDELAY
3.10.6 OBUFDS
3.11 DCM原理
3.12 RAM核的使用
3.13 FPGA时序约束
3.13.1 FPGA约束介绍
3.13.2 案例:500MSPS的A/D转换器
3.14 生成IP核
3.14.1 生成IP核的方法
3.14.2 案例:生成IP核的具体操作过程
3.15 保持层次关系
3.16 ChipscopeICON和ILA
3.16.1 Chipscope介绍
3.16.2 案例:以DSP接口程序为例介绍使用流程
3.17 Verilog编码风格注意事项总结
3.18 FPGA学习步骤
3.19 FPGA工作方式
第4章 FIFO控制器设计
4.1 FIFO相关的概念
4.2 设计指标
4.3 同步FIFO设计
4.3.1 双端口RAM介绍
4.3.2 同步FIFO设计
4.4 异步FIFO设计
4.4.1 空/满标志的产生
4.4.2 亚稳态问题
4.4.3 格雷码
4.4.4 异步FIFO设计及结果
第5章 串口通信模块设计
5.1 串口通信概述
5.1.1 串口介绍
5.1.2 串口帧格式
5.2 设计指标
5.3 串口通信模块方案
5.3.1 原理框图
5.3.2 FPGA方案
5.4 串口通信各个模块设计
5.4.1 MCU配置模块设计
5.4.2 发送模块设计
5.4.3 接收模块设计
5.4.4 顶层模块
5.5 串口通信模块调试注意事项
第6章 数/模及模/数转换控制模块设计
6.1 相关技术介绍
6.1.1 数/模转换器(DAC)介绍
6.1.2 模/数转换器(ADC)介绍
6.1.3 数/模转换芯片AD5641介绍
6.1.4 模/数转换芯片ADS7230介绍
6.2 技术指标要求
6.3 D/A模块设计
6.4 AD模块设计
6.5 遇到的问题、排查及定位
第7章 HDLC总线控制器设计
7.1 HDLC协议介绍
7.2 CRC校验
7.3 设计技术指标
7.4 HDLC电路图
7.5 HDLC总线控制器模块划分
7.6 HDLC总线控制器各个模块设计
7.6.1 CRC模块设计
7.6.2 发送编码设计及结果
7.6.3 接收解码设计及结果
7.7 遇到的问题及解决办法
第8章 SDRAM控制器设计
8.1 SDRAM简介
8.2 SDRAM芯片介绍
8.3 SDRAM设计方案
8.3.1 刷新周期的问题
8.3.2 初始化模块
8.3.3 定时刷新请求信号产生模块
8.3.4 读/写请求产生模块
8.3.5 读/写状态机
第9章 NANDFLASH控制器设计
9.1 NANDFLASH介绍
9.1.1 NANDFLASH信号功能介绍
9.1.2 芯片存储阵列结构和地址寻址
9.1.3 NANDFLASH时序图介绍
9.2 设计技术指标
9.3 原理图介绍
9.4 NANDFLASH控制器方案
9.5 NANDFLASH各个模块设计
9.5.1 MCU接口模块
9.5.2 FLASH管理模块
9.5.3 NANDFLASH坏块表查找模块设计
9.5.4 NANDFLASH页查找模块设计
9.5.5 NANDFLASH读模块设计
9.5.6 NANDFLASH写模块设计
9.5.7 NANDFLASH块擦除模块设计
9.6 遇到的问题及解决办法
9.6.1 对FLASH的读/写不能完成
9.6.2 读/写不稳定
第10章 1553B总线控制器设计
10.1 1553B总线介绍
10.1.1 总线拓扑结构
10.1.2 编码方式
10.1.3 1553B数据格式
10.1.4 总线数据传输过程说明
10.2 设计技术指标
10.3 原理图介绍
10.4 收发器芯片介绍
10.5 1553B总线控制器方案
10.6 1553B总线控制器各个模块设计
10.6.1 曼彻斯特编码模块设计
10.6.2 曼彻斯特解码模块设计
10.6.3 协议处理模块设计
10.6.4 RT接收模块设计
10.6.5 RT发送模块设计
10.6.6 RT-RT模块设计
10.6.7 Broadcast模块设计
10.7 测试结果
10.8 遇到的问题及解决办法
参考文献
后记