FPGA学习小结

近半个月以来的收获

Posted by Florian on May 14, 2019

FPGA学习小结

之前在与H老师的一次交流中发现自己对FPGA的理解太浅,于是回归本源,在最近的半个多月时间里阅读了一些FPGA的书籍资料,在此做个小结。

我的知识背景

在之前的几门课程中都曾接触过FPGA,但主要工作都是在做一些实验性的内容,对Xilinx Vivado和Quartus都算比较熟悉,但对于FPGA的内部结构以及EDA工具所做的每一步(synthesis、implement、write bitstream)具体是做了什么不是很懂。

资料列表及简要评价

  1. 《FPGA设计指南-器件、工具和流程》 这是一本零几年出版的绝版书籍,是H老师推荐我阅读的一本讲解FPGA原理,设计方法的一本好书。这本书的优点是几乎不涉及实例,纯讲FPGA原理及设计方法,主线基本是以器件类型工具设计方法的发展流程来讲,所以这也就带来了一个缺点:内容稍微有些跟不上现在的发展趋势。这本书最大的特点就是脉络清晰,在很多地方都引人思考(可以看出作者水平之高,虽然有很多地方看不懂),缺点也不是没有,在很多地方稍显啰嗦,以及美国人的书总是给人一种“太过全面”的感觉,其实我想要看的只是其中某一部分的内容,但我却花了大量的时间通读全书。另外,翻译也得背锅。
  2. 《FPGA for DUMMIES》 这是我在IntelFPGA官网上下载的资料,篇幅很短,非常入门。具体讲了FPGA存在的意义,设计流程,学习FPGA的必要性以及一些FPGA的研究方向(比如异构计算)。但对于FPGA的工作原理讲得不多,其实在学数电课的适合看最合适。就不详说了。
  3. 《FPGA原理与结构》 这本书其实是偶然间在知乎上看到译者推荐的,在看完第1本美国人写的书以后觉得还是有些地方比较模糊,就买来这本书准备查漏补缺,当我看到序言部分其实就已经被惊艳到了,阅读了部分章节以后觉得这确实是一本好书。译者应该是对技术日语都很精通,翻译毫不生硬,并且应该自己加了很多辅助阅读的信息,非常棒。从内容上来说,这书确确实实击中了我的知识盲区,我在和H老师交流时发现自己不太懂的地方在这本书上看来都有讲述。其实我读过不少有关FPGA的书,大部分都是一笔带过FPGA的原理,然后堆砌实例来满足读者廉价的成就感,这种书遍地都是。而我真正想要看的书是对FPGA原理介绍较深入、稍微涉及一些设计流程细节的书籍,这书恰好满足了我所有的愿想。值得一提的是,我个人对日本人所写的技术书籍相当有好感,我还在学习程序设计竞赛的时候,当时看的一本叫做《挑战程序设计竞赛》的书给我留下了深刻的印象。那书和这书差不多,结构清晰,思路严密,图表看着很整齐舒服,并且没有一句废话(这一点在读过的书里还真的很少见)。我现在读过的日本人写的技术类书籍给我的感觉都是,篇幅不长c内容很多,很容易看懂。 所以我强烈推荐想要了解FPGA工作原理的同学阅读此书。

理解FPGA的一些关键点

首先我想说的是,我认为学习FPGA首先得把数字电路学好,其次需要进行一定的实验训练,最后带着问题去阅读参考资料,参考资料包括但不限于上述资料。

实验训练和参考资料可以换个位置,但这样可能会在阅读参考资料的同时有很多不明白的地方,而且其实蛮多人都只是懂怎么copy一下示例代码在开发板上跑起来,但不懂原理和结构。所以我说的这个顺序应该也是正常学习路线,只不过不能在实验训练过多的时候在想起来去弄懂原理结构,那时为时已晚。

那么现在我简单总结一下我在学习FPGA过程中认为比较关键的知识点,这些知识点都可以在数字电路课程,实验训练,阅读参考资料的过程中习得,所以在本篇文章中不展开讨论具体知识点,如有疑问可以在评论区留言。

  1. 数字电路中的关键点
    • 如何用CMOS实现各种组合逻辑电路
    • 理解decoder, encoder, mux, LUT, flip-flop的概念和功能
    • 如何用mux/LUT实现逻辑函数
    • 深刻理解时钟信号和状态机(控制)

    其实数电这门课说到底,也就是在讲这些

  2. 实验训练中的关键点
    • 了解电路从脑海中到板子上的整个过程
    • 熟悉开发环境
    • 记录自己的问题

    动手做事,就是发现问题的一个过程,在FPGA的学习中,避免纸上谈兵是很重要的

  3. 阅读资料的关键点
    • FPGA为什么可编程(重点是基于熔丝/反熔丝,基于闪存,基于SRAM的结构)
    • 可以大概了解一下FPGA发展史(吹逼专用)
    • “岛”形FPGA结构(逻辑块+连接块+开关块+IO块+布线通道)
    • 逻辑块的实现方式(MUX or LUT?)
    • 了解内嵌的一些单元(乘法器,加法器,甚至处理器核)
    • 综合,布局布线具体是在做什么?(怎么做(EDA工具的一些细节)?)
    • 了解HLS(可能是未来的趋势,但目前我也只会Verilog)
    • 了解FPGA的多个研究方向,拓宽眼界

    阅读资料,主要目的在于解决实验训练中不懂的问题以及拓宽眼界,说不定就发现了自己感兴趣的研究方向,激发起学习兴趣后深入的进行学习,这是后话

后续工作展望

经过最近这半个月的资料阅读及之前课程的积累,我姑且认为自己FPGA算是简单入了个门。从目前我理解的内容来看,FPGA的舞台是很大的,它现在不仅仅是学习电路设计的实验工具,也不仅仅是仿真验证的一个平台,它在众多领域已经开始崭露头角。

学习FPGA,光是入门是远远不够的,更多时候FPGA应该只是作为一个工具,好比说你学会了如何编译代码,你就能写出优美的代码了吗?所以说重心还是要继续放在电路设计的学习上,尤其是架构设计。现在接触的知识越高深,越能意识到系统这两个字的分量,要想学好系统,不仅仅是逐个击破那么简单的。

路漫漫其修远兮,吾将上下而求索。

接下来想要开始学习有关机器学习的内容了,但不做纯理论研究。

同时也会继续架构方面的学习。

感谢阅读。(这篇废话比较多,逃)