图书前言

设计者学习FPGA开发,有时难免会面临一些选择。对于初学者来说,从来就面临着学习哪种硬件语言,采用哪家平台的问题。而实际应用中,不管使用哪种语言,设计采用哪家的器件,其相互之间都可以转换,彼此存在共通的东西。本书就是希望通过介绍一些通用电路的设计技巧,使读者能够掌握FPGA逻辑设计的基本指导原则以及代码优化方法。书中尽量通过实例介绍如何描述硬件电路,某些实例代码还提供了两种HDL语言的对比。

一、 本书的由来

一直在想,是否可以写这样一本参考书,不管大家学习哪种语言,使用哪家器件,都可以作为很好的参考。

在答复一些正在学习FPGA的同学或工程师的问题时,也常被人问及两个问题,一个是怎么学习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工程师的工具书。

五、 共享资料

六、 致谢

感谢清华大学出版社工作人员对本书的关心和支持,尤其是编辑的大力支持。

感谢罗江燕参与了有关PCB硬件设计方面的编写,并对文稿最终修订校对提供的帮助。 

王敏志

2015年5月