编辑推荐
(1)抛开不必要的理论解释,结合官方设计技巧及笔者自身设计经历,深度讲述真实FPGA设计方法。
(2)《FPGA设计实战演练(高级技巧篇)》多从纯粹逻辑设计的角度入手,尽量减少开发工具的介绍,大量介绍通用电路的设计开发技巧。
(3)逻辑设计是FPGA设计的核心,所以《FPGA设计实战演练(高级技巧篇)》的重点就是介绍逻辑设计的方法和技巧。不但会介绍应用软件工具对设计优化,更会介绍代码级的优化方法,而且会重点为读者推介后者。时钟及多时钟域处理在现在的FPGA设计中极为常见,书中详细介绍了如何管理这些时钟,且重点讨论了跨越时钟域的数据处理。
内容简介
现代FPGA的结构越来越复杂,多时钟域的设计现在已是常态。对于功能电路来说,复位结构都必不可少。在同步逻辑设计中如何很好地处理异步复位,甚至在多时钟域之间传递(异步)复位信号也是逻辑工程师经常面临的挑战。本书除专门介绍了上述电路的设计方法外,还介绍了状态机的设计。在介绍这些通用电路结构的基础上,还介绍了代码优化以及如何对设计进行综合与布局布线优化方面的相关内容。《FPGA设计实战演练(高级技巧篇)》可供通信工程、电子工程、计算机、微电子等专业并有一定FPGA开发基础的在校大学生、研究生参考,也可作为硬件工程师、FPGA工程师的工具书。
目录
第1章 从PCB开始研究FPGA设计问题
1.1 基于FPGA的高速电路板设计
1.1.1 PCB材料选择
1.1.2 PCB上的传输线走线
1.1.3 阻抗计算
1.1.4 降低串扰和维持信号完整性的布线方法
1.2 FPGA的电源供电
1.2.1 供电要求
1.2.2 PCB设计的电源和地叠层分布
1.3 退耦电容
1.3.1 为何需要退耦电容
1.3.2 计算电容值
1.3.3 电容的摆放
1.4 小结
第2章 如何处理逻辑设计中的时钟域
2.1 PLL对时钟域的管理
2.2 单比特信号跨时钟域的同步处理
2.2.1 亚稳态及其危害
2.2.2 处理亚稳态的经典办法——双触发
2.2.3 使用三级触发器对亚稳态进行同步处理
2.2.4 如何同步快速信号到慢速时钟域
2.3 多比特信号跨时钟域同步处理
2.3.1 多比特信号融合
2.3.2 多周期路径规划
2.4 使用FIFO结构处理多比特跨时钟域信号
2.5 多时钟域设计分区划分
2.5.1 在时钟边界划分分区
2.5.2 多时钟域分区划分后的静态时序分析
2.5.3 对多周期规划逻辑设计进行分区划分
2.6 设计中的门控时钟行波时钟的处理
2.6.1 衍生时钟处理指导原则一
2.6.2 衍生时钟处理指导原则二
2.6.3 衍生时钟处理指导原则三
2.6.4 衍生时钟处理的其他方法
2.7 小结
第3章 正确分析衍生时钟
3.1 实例演示门控时钟分析处理
3.1.1 时钟反相生成的时钟
3.1.2 时钟经过缓冲后生成的时钟
3.1.3 经过使能处理后的时钟
3.1.4 时钟多路选择器输出的时钟
3.1.5 经外部反馈回来的时钟
3.2 实例演示衍生时钟的分析和处理
3.2.1 触发器切换生成的时钟
3.2.2 由行波计数器生成的时钟
3.2.3 由同步计数器生成的时钟
3.2.4 由PLL生成的时钟
3.3 小结
第4章 复位电路的实现及其时序分析处理
4.1 同步复位设计处理
4.2 异步复位设计处理
4.3 异步复位同步化(异步复位同步释放设计处理)
4.4 Recovery和Removal分析
4.4.1 什么是Recovery和Removal分析
4.4.2 什么是Recovery和Removal故障
4.4.3 为何总是建议使用异步复位
4.4.4 分析并解决Recovery故障
4.5 小结
第5章 如何写好状态机
5.1 状态机的特定及常见问题
5.2 如何选择状态机的编码方式
5.3 合理选择及使用单进程或多进程来设计状态机
5.3.1 多进程状态机
5.3.2 单进程状态机
5.3.3 状态机的比较
5.4 设计综合工具能够识别的状态机
5.4.1 采用Verilog编写
5.4.2 采用VHDL编写
5.5 小结
第6章 如何在书写代码时进行速度优化
6.1 逻辑设计中速度的概念
6.2 时序收敛的早期考虑
6.3 代码编写过程中时刻考虑时序优化
6.3.1 编写时序收敛代码的总体规则
6.3.2 通过减少关键路径上的组合逻辑单元数来优化时序
6.3.3 适当进行逻辑复制以优化设计速度
6.3.4 在组合逻辑中插入寄存器优化时序
6.3.5 通过寄存器平衡优化时序
6.3.6 使用并行结构优化时序
6.3.7 通过消除代码中的优先级优化速度
6.4 小结
第7章 如何在书写代码时进行面积优化
7.1 优化设计面积——操作符平衡
7.2 优化设计面积——打破设计流水
7.3 优化设计面积——资源共享
7.3.1 在互斥操作中共享操作符
7.3.2 共享表达式
7.3.3 共享逻辑功能模块
7.4 复位对设计面积的影响
7.5 从器件角度理解如何节省资源
7.5.1 利用厂家原语进行面积优化
7.5.2 巧用触发器的控制端口
7.5.3 多路选择器优化
7.6 小结
第8章 代码优化设计实例分析
8.1 对设计时序进行优化的实例分析
8.1.1 时序优化实例一:同步电路时序分析
8.1.2 时序优化实例二:异步电路及时序例外分析
8.1.3 时序优化实例三:利用PLL对设计进行时序优化
8.2 修改代码优化面积具体实例分析
8.3 小结
第9章 如何编写可综合代码
9.1 普通if和case语句可综合代码书写规则
9.1.1 基本的if语句
9.1.2 简单的case语句
9.2 如何调整if和case语句中关键信号的路径
9.2.1 简单、多个并行if语句的情况
9.2.2 单个if语句的情况
9.2.3 if语句嵌套case语句的情况
9.2.4 case语句嵌套if语句的情况
9.3 提高设计性能的代码技巧
9.3.1 通过复制数据路径提高设计性能
9.3.2 如何更好地处理if条件语句中的算术操作
9.4 代码可综合常用指导原则
9.4.1 避免创建不必要的锁存器
9.4.2 进程中的敏感列表一定要完备
9.4.3 for循环的使用以及避免组合逻辑回环
9.4.4 阻塞和非阻塞赋值
9.4.5 可综合代码设计对时钟和复位的要求
9.5 小结
第10章 综合以及布局布线优化
10.1 综合级速度与面积优化设置
10.2 使用设计助手和优化顾问
10.3 对设计执行早期时序估算
10.4 综合网表优化
10.5 物理综合
10.5.1 物理综合概述
10.5.2 针对性能的物理综合优化选项
10.5.3 针对布局布线的物理综合优化选项
10.6 了解并理解布局布线工具及其对设计的优化
10.6.1 可以帮助布局布线的一些综合建议
10.6.2 时序约束及其优化
10.6.3 优化I/O时序
10.6.4 优化设计面积
10.7 了解逻辑单元所见即所得结构
10.7.1 逻辑单元结构
10.7.2 布线延时与布线距离以及布线规则的关系
10.7.3 综合网表建议
10.7.4 综合及优化
10.8 小结
第11章 预先布图规划
11.1 增量编译
11.1.1 增量编译简介
11.1.2 使用增量编译的设计流程
11.2 为何要对设计进行分区和布图规划
11.3 对设计进行分区划分
11.3.1 设计分区划分宏观考虑因素
11.3.2 设计分区划分指导原则
11.3.3 如何对第三方设计进行分区划分
11.3.4 检查设计分区的质量
11.3.5 从底层导入设计时如何导入SDC约束
11.4 对设计进行预先布图规划的危害
11.5 布图规划
11.5.1 布图规划简介
11.5.2 布图规划布局指导原则
11.5.3 实际应用实例推荐的设计流程
11.6 小结
参考文献
前言/序言
设计者学习FPGA开发,有时难免会面临一些选择。对于初学者来说,从来就面临着学习哪种硬件语言,采用哪家平台的问题。而实际应用中,不管使用哪种语言,设计采用哪家的器件,其相互之间都可以转换,彼此存在共通的东西。本书就是希望通过介绍一些通用电路的设计技巧,使读者能够掌握FPGA逻辑设计的基本指导原则以及代码优化方法。书中尽量通过实例介绍如何描述硬件电路,某些实例代码还提供了两种HDL语言的对比。
一、 本书的由来
一直在想,是否可以写这样一本参考书,不管大家学习哪种语言,使用哪家器件,都可以作为很好的参考。
在答复一些正在学习FPGA的同学或工程师的问题时,也常被人问及两个问题,一个是怎么学习FPGA的设计开发?另一个是如何学好FPGA的设计开发?前一个问题是FPGA开发如何入门的问题; 而后一个则是FPGA开发如何进阶的问题。本书主要讨论第二个问题。
在收到了清华大学出版社编辑的约稿邮件并与之讨论了本人的上述想法后,编写一本面对高级FPGA开发工程师的参考书的想法便顺理成章地开始实施了。
二、 本书特点
现在有很多有关FPGA开发方面的书籍,其中大部分都不错,但比较遗憾的是,很多书都过多地介绍了开发工具或软件。本书希望多从纯粹逻辑设计的角度入手,尽量减少开发工具的介绍,大量介绍通用电路的设计开发技巧。
根据笔者多年的工作体会,感觉FPGA工程师还是应该掌握一些电路设计方面的知识,故本书开篇即从FPGA硬件电路设计开始。FPGA工程师在对设计进行系统联调时,如果对电路设计不了解,很可能会妨碍逻辑设计中故障的排除。
逻辑设计是FPGA设计的核心,所以本书的重点就是介绍逻辑设计的方法和技巧。本书不但会介绍应用软件工具对设计优化,更会介绍代码级的优化方法,而且会重点为读者推介后者。现代逻辑设计的复杂程度已经超乎我们的想象,但是一些基本的设计原则并未改变,所以掌握一些通用电路的设计方法和技巧就显得极为重要。时钟及多时钟域处理在现在的FPGA设计中极为常见,书中详细介绍了如何管理这些时钟,且重点讨论了跨越时钟域的数据处理。
我们知道,现在的设计工具随着FPGA规模的变大,已变得越来越复杂,功能也越来越强。软件可以帮助设计者获得更佳的设计性能。在本书中笔者提出,设计者不要过于依赖软件的帮助,应该更加直接地将电路描述出来,执行更直接的优化,而不是让软件来决定到底执行何种优化。所以,我们需要根据一些特有的逻辑设计原则将电路设计得更简单、更直接、更易优化以及可重用。这些设计原则中有很多已在笔者个人的设计经历中屡试不爽,还有一些是本人通过查阅各种参考手册提炼而来,我想也一定能够对读者有所帮助。
三、 本书主要内容
本书主要内容是根据笔者的经历并从众多开发文档中提炼出的许多FPGA开发的高级技巧和优化方法。全书共分为11章,先从具体逻辑电路出发,再过渡到通用的设计技巧。
第1章从基于FPGA的PCB设计开始介绍FPGA的设计开发,其中专门介绍了有关FPGA的高速电路设计。
第2章专门介绍了FPGA内部的时钟域管理,特别是多时钟域设计。
第3章介绍了FPGA内部衍生时钟处理,并通过实例介绍了如何对这类时钟进行正确的分析和处理。
第4章介绍了复位电路的设计,尤其是异步复位同步释放电路及复位级联的处理,同时介绍了如何对复位电路进行时序分析。
第5章介绍了如何写好状态机。
第6章介绍了如何对设计进行代码级的速度优化。
第7章介绍了如何对设计进行代码级的面积优化。
第8章通过几个实例介绍了如何对设计进行优化。
第9章介绍了编写可综合代码的方法及指导原则。
第10章在对设计进行代码级优化的基础上,介绍了如何使用软件中的设置及工具对设计进行综合及布局布线优化。
第11章介绍了预先布图规划及对设计进行布图规划的指导原则。
四、 本书读者对象
本书可供通信工程、电子工程、计算机、微电子等专业并有一定FPGA开发基础的在校大学生、研究生参考,也可作为硬件工程师、FPGA工程师的工具书。
五、 共享资料
为了方便读者与作者之间进行沟通,特建立了一个书友QQ群。读者可以在群里与作者进行零距离沟通,读者与读者之间也可以相互交流、互助。更为重要的是,书中一些实例工程共享在QQ群共享空间,方便读者下载。此外,读者也可以访问作者的博客,了解最新的动态。
六、 致谢
感谢清华大学出版社工作人员对本书的关心和支持,尤其是编辑的大力支持。
感谢罗江燕参与了有关PCB硬件设计方面的编写,并对文稿最终修订校对提供的帮助。
最后,感谢您选择了本书。如果您对本书有什么批评和建议或者对书中的内容有任何困惑请和我联系。
FPGA设计实战演练(高级技巧篇) 下载 mobi epub pdf txt 电子书 格式