第零章 前言

"当有人说'我想要一个编程语言,这个语言我只需要直接写我要干什么'的时候,你还是给他一个棒棒糖吧。" -Alan Perlis

本书将着重介绍高层次综合(HLS) 算法的使用并以此完成一些比较具体、细分的FPGA应用。我们的目的是让读者认识到用HLS创造并优化硬件设计的好处。当然,FPGA的并行编程肯定是有别于在多核处理器、GPU上实行的并行编程,但是一些最关键的概念是相似的,例如,设计者必须充分理解内存层级和带宽、空间局部性与时间局部性、并行结构和计算与存储之间的取舍与平衡。

本书将更多的作为一个实际应用的向导,为那些对于研发FPGA系统有兴趣的读者提供帮助。对于大学教育来说,这本书将更适用于高阶的本科课程或研究生课程,同时也对应用系统设计师和嵌入式程序员有所帮助。我们不会对C/C++方面的知识做过多的阐述,而会以提供很多的代码的方式作为示范。另外,读者需要对基本的计算机架构有所熟悉,例如流水线(pipeline),加速,阿姆达尔定律(Amdahl's Law)。以寄存器传输级(RTL)为基础FPGA设计知识并不是必需的,但会对理解本书有所帮助。

本书囊括了很多对教学很有帮助的内容。每个章节均有一些小问题留给读者,这些问题将有助于加深对于材料的理解。在加州大学圣地亚哥分校(UCSD)的CSE 237C这门课里也有很多用HLS开发的项目,如果有出于教育目的的需要,我们可以对提出申请的读者分享这些课程项目的文件。这些HLS项目主要是与数字信号分析相关,重点于无线交流系统的开发。每个单独的项目都或多或少与书中的某一章节有所关联。这些项目以赛灵思大学计划(Xilinx University Program)使用的FPGA开发板为基础而开发,设计基础参考 http://www.xilinx.com/support/university.html 。赛灵思也同时提供这些开发板的商业订单。同时我们鼓励读者在 http://xilinx.com 申请Vivado HLS的试用许可。

本书并不着重于HLS算法本身。HLS处理方面的具体内容已经有很多的资源供读者参考,包括计划,资源分配,捆绑[51, 29, 18, 26]的算法。 本书更多的将会是引导学生掌握各类算法怎样分明的协同工作,提供具体的HLS语言开发程序的使用案例,因此,其他的一些更注重于算法与概念本身的材料会对理解本书很有帮助。本书也不着重于FPGA的细分结构和RTL设计方法,但是同样这方面的材料可以作为很好的辅助材料。

本书将主要使用赛灵思的Vivado HLS来完成类C代码到RTL的转换,C语言下的示例是针对Vivado HLS语法而完成的。本书不仅将介绍Vivado HLS的具体使用,而且会介绍那些最基本的HLS概念,这些概念应当适用于所有开发工具。我们同时鼓励读者尝试其他工具以真正理解这些概念,而不仅仅是在我们使用的工具里"学会"如何一步步操作。

希望你能享受这本书,并祝一切好运。