描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787512417595
《FPGA深度解析》是一本FPGA开发经验总结式的书籍,以实例讲解的方式详细介绍了FPGA的概念、使用场景及开发流程,对FPGA的芯片架构做了详细说明;同时,对FPGA的开发流程,包括可综合RTL代码的编写及验证、工具的综合及布局布线、静态时序分析等概念做了详细分析。在此基础上,还详细介绍了FPGA常用处理模块的设计,对重要的基础性设计模块,例如异步FIFO、高速SerDes接口以及高速LVDS的接收、抽取滤波器的设计等也进行了深入讲解。
《FPGA深度解析》的内容全面、实用,讲解通俗易懂,适合没有形成FPGA设计思想概念但是有一定FPGA开发基础的设计人员或者是对FPGA设计感兴趣的读者参考。
第1章 FPGA简介
1.1什么是FPGA
1.1.1FPGA简述
1.1.2FPGA与MCU芯片的区别
1.2FPGA的应用场景
1.3FPGA现状
1.4开发FPGA需要的HDL语言
1.5FPGA设计流程
1.6一个使用FPGA的经典实例
小结
第2章 FPGA结构与片上资源
2.1FPGA主要厂商
2.2FPGA的结构
2.3基于LUT的设计方法
2.4LE与LAB
2.5全局网络
2.6可配置I/O
2.7内部存储资源
2.8实例:FPGA是如何实现用户设计的
2.9其他资源
小结
第3章 可综合设计与仿真验证
3.1RTL
3.2可综合设计
3.2.1整体结构
3.2.2变量类型、时序逻辑与组合逻辑
3.2.3运算符和条件语句
3.2.4例化
3.2.5parameter与define
3.3仿真验证
3.3.1一个简单的Testbench验证平台实例
3.3.2带有比对功能和参考模型的验证模型
3.4与Verilog仿真器有关的一点知识
小结
第4章 综合、布局与布线
4.1工作流程
4.2综合以及优化
4.2.1综合优化的概念
4.2.2RTL代码综合优化思想
4.3布局与布线
小结
第5章 静态时序分析
5.1什么叫做静态时序分析
5.2时序分析模型
5.2.1时序分析基础模型
5.2.2芯片外部输入/输出时序分析模型
5.3时序分析中的各项参数
5.3.1概述
5.3.2时序分析公式的推导
5.4时序约束文件的编写
5.5实例:基于Timequest的时序约束和分析
5.5.1Timequest使用简介
5.5.2如何阅读时序报告
小结
第6章 功耗控制
6.1CMOS门电路简介
6.2FPGA功耗的构成
6.3时钟网络及其功耗
6.4门控时钟
6.5划分时钟区域
6.6RAM的时钟使能
6.7使用双沿触发器
6.8CMOS导通电流
6.9减少供电电压
6.10改变I/O的终端方式
6.11实例:FPGA低功耗设计
小结
第7章 跨时钟域传输
7.1实例:跨时钟域处理
7.2跨时钟域的亚稳态现象
7.3亚稳态的多径传输
7.4两级触发器同步器
7.5多径与多级寄存器同步链
7.6组合逻辑信号的同步化
7.7快时钟域信号的同步化
7.8多位信号的跨时钟域处理
7.9实际设计中规划跨时钟方案的重要性
小结
第8章 复位电路
8.1复位的用途
8.2无复位电路
8.3异步复位
8.4实例:异步复位测试
8.5同步复位
8.6异步复位与同步撤离
8.7复位网络
8.8多时钟域复位方案
小结
第9章 异步FIFO原理及使用
9.1实例:异步FIFO的应用
9.2同步FIFO与异步FIFO
9.3异步FIFO设计思想
9.4异步FIFO设计中的关键技术
9.4.1异步FIFO读/写地址采样
9.4.2FIFO的深度
9.5异步FIFO逻辑实现代码
9.5.1信号定义
9.5.2RTL代码
9.6异步FIFO的读/写时钟差别对格雷码的影响
9.7FIFO的应用注意事项
小结
第10章 高效SDRAM控制器的设计
10.1SDRAM简介
10.1.1SDRAM特点及其编址方式
10.1.2SDRAM原理
10.2SDRAM时序及操作特性
10.3实例:高效SDRAM控制器设计
10.3.1SDRAM控制器的设计思想
10.3.2SDRAM控制器内部模块设计
10.3.3SDRAM控制器与SDRAM之间的芯片接口时序问题
小结
第11章 高速SerDes接口设计
11.1高速SerDes接口的原理及其系统组成
11.1.1SerDes概述
11.1.2Cyclone IV GX高速收发器系统框架
11.1.3高速收发器时钟架构
11.2高速SerDes接口的电气特性
11.3动态可重配IP
11.4实例:高速SerDes接口逻辑设计
11.4.1设计需求
11.4.2设计具体实现
小结
第12章 常用数字信号处理的FPGA实现
12.1模拟信号与数字信号
12.2数字信号的定点表示方式
12.2.1有符号和无符号的表示方法
12.2.2定点化运算法则
12.3实例:FFT处理器在FPGA上的实现
12.3.1FFT基本原理
12.3.2FFT的信号流图
12.4FFT在FPGA中的实现
12.4.1FFT的定点化
12.4.2FFT的实现细节
12.5实例:多速率抽取/插值滤波器在FPGA上的实现
12.5.1多速率抽取滤波器的优化电路
12.5.2多速率抽取滤波器的实现
小结
第13章 高速LVDS信号的接收
13.1什么是LVDS信号
13.2实例:使用FPGA接收LVDS信号
13.3采用input delay约束保证源同步接收的正确性
13.3.1源同步输入时序分析
13.3.2使用input delay约束实现时序收敛
13.4使用iserdes及调整采样时钟方式来接收高速LVDS信号
13.4.1使用iserdes和idelay部件来接收高速LVDS信号的电路
13.4.2具体实现结构
小结
第14章 布局布线失败怎么办
14.1布局布线失败
14.2找到设计的hot spot
14.3解决布线拥塞问题
小结
参考文献
本书的由来:
从学生时代开始接触FPGA再到参加工作,笔者一直在与FPGA/ASIC的逻辑设计打交道。刚开始接触FPGA的时候,脑海里还一直受软件式编程语言的影响,没有形成对Verilog HDL硬件描述语言、硬件设计的本质理解。参加工作从事大型的逻辑设计后,才逐渐理解到逻辑设计的本质。这么多年来,笔者阅读过很多关于Verilog HDL逻辑设计的书籍或者资料,大多数侧重于阐述HDL语言的语法本身,而很少描述该语言硬件设计本质,于是萌生了一个自己整理的念头,这也是笔者写这本书的一个初衷。
本书的特点:
作为一名FPGA逻辑设计工程师,笔者认为能够对自己写出的代码综合后的电路有个想象总是件好事,因此,在本书中,特别是后面的设计例子,笔者并没有给出实际的代码。这其实隐含了对逻辑设计的一个看法,即在编写RTL代码前,一定要对自己设计的逻辑电路、数据处理流程、控制流程有一个清晰、直观的理解。并把其记录下来或者文档化,那么后续的代码编写是一件相当轻松的事情。这其实也是大公司提倡从需求、系统方案到概要设计、详细设计然后才是编码的流程的目的,即把事情想清楚再动手。这也是本书提倡的一种理念,也是笔者多年开发过程中受益的一个经验总结。
本书并不是一本大而全的FPGA入门书籍,确切说,本书是一本经验总结式书籍,但是这个经验总结并不是发散的,而是章节安排有严密的逻辑关系,从FPGA的使用场景、设计流程,再到重要基础部件,慢慢过渡到典型设计,因此也可以说是一个从架构到具体设计由浅入深的一个经验总结。
尽管对基于FPGA的逻辑设计、仿真验证并不像ASIC设计那样要求全面,但是在FPGA逻辑设计规模越来越大的今天,一个设计编译的时间有可能达到几个小时,这就决定了此时的FPGA逻辑设计不能像写一个单片机软件那样,一遇到Bug就重新修改某段代码、重新编译再烧写到芯片里看结果,此时就要求对设计做好充分的仿真验证,即程度地保证功能的正常验证通过,这样才能编译并下载到FPGA里,否则效率实在太低。
基于FPGA的逻辑设计实际上是在设计数字逻辑电路,既然是电路,那么就有一定的物理限制,因此FPGA工程师不能只局限于编写RTL代码,同时也要对设计的时序分析、优化有一定的认识,这也是笔者花较多篇幅介绍静态时序分析章节的原因。
本书还对FPGA设计的常用模块设计理念进行了详细的分析,比如说异步FIFO,这是一个非常重要的单元模块,如果对其原理不够了解,使用的时候就有可能出问题,因此本书对异步FIFO的原理以及使用注意事项做了深入阐述。此外,高速SerDes接口设计、抽取滤波器、FFT的设计等,都是工程师有可能遇到的。另外,高速LVDS信号的接收,特别是源同步的设计,需要一定的约束技巧或者是对I/O要有一定的理解,初学者容易出问题,因此这一章也是笔者着重阐述的一章。
主要内容:
本书是一本FPGA开发经验总结式的书籍,以实例讲解的方式详细介绍了FPGA的概念、使用场景及开发流程,对FPGA的芯片架构做了详细说明;同时,对FPGA的开发流程,包括可综合RTL代码的编写及验证、工具的综合及布局布线、静态时序分析等概念做了详细分析。在此基础上,还详细介绍了FPGA常用处理模块的设计,对重要的基础性设计模块,例如异步FIFO、高速SerDes接口以及高速LVDS的接收、抽取滤波器的设计等也进行了深入讲解。
本书的内容全面、实用,讲解通俗易懂,适合没有形成FPGA设计思想概念但是有一定开发基础的设计人员参考。
感谢北京航空航天大学出版社的支持,是他们的坚持才能让本书与读者见面。感谢在工作中给予笔者指导和启发的领导和同事,特别是中兴通讯的曾献君教授、系统架构师周海涛,以及理邦精密仪器的陈敏、刘旺锋以及逻辑设计组的成员。
FPGA(Field Programble Gate Array)是一种完成通用功能的可编程逻辑芯片,即可以对其进行编程实现某种逻辑处理功能。它集成了大量的原始逻辑资源(触发器、查找表LUT和布线),并且提供了可配置的I/O口及硬IP(Block RAM、PLL、DSP、Serdes等),依赖于工程师采用HDL(Hardware Description Language,硬件描述语言)语言进行编码,各逻辑并行工作来实现指定的功能。它是基于硬件描述的芯片。
通俗来说,FPGA就像一块面包板。还有一种可编程逻辑芯片CPLD(ComplexProgrammable Logic Device,复杂可编程逻辑器件),其与FPGA一样具有“面包板”的属性。但是,FPGA与CPLD又有区别:FPGA的逻辑规模比CPl。D大得多,拥有更丰富的触发器资源、DSP单元以及支持更加丰富的I/()数量与类型。简单地说,FPGA是一块规模极大、复杂度极高的“面包板”,而CPLD则是一块规模很小、复杂度低得多的“面包板”。
FPGA芯片上有许多门电路器件和少量的I/()、IP(专用电路),以及许多待连接的走线。没进行编码之前,这些电路只有本身的基本功能,并不具备系统级的功能。编码之后,这块面包板上门和门之间被连接起来,I/O、IP按照设计进行配置和连接,后形成一块连接了的、具有特定功能的电路板。就像一些与非门和触发器在面包板上按照累加器的功能进行连接,并用来点亮七段数码管一样,只不过很多基于FPGA设计的逻辑电路规模非常大,大到难以手工连接这块“面包板”,所以需要通过编写HDL代码从而借助IDE自动完成这些工作。
……






评论
还没有评论。