1 FPGA 技术背景
笔者也是在偶然的机缘下接触到 FPGA,当初只有感性的认识就是 FPGA 速度快,而笔者是一个初出茅庐的电子技术爱好者,觉得越快越好,就去学习 FPGA 了,学习了 FPGA 才知道 FPGA 真不简单。
一晃 8 年多时间过去了,在摩尔定律下,FPGA 也是从逻辑资源上不断刷新记录,笔者用过的 FPGA 从 XILINX家族的 spartan2e、spartan3e、spartan6 到 artix7、kintex7、zynq7000 再到 ultrascale、ultrascale+ MPSOC。这些年,见证了 XILINX 公司的从 FPGA 领域和 Altera 平分天下,到目前一家独大,感概当初运气好,当初选择了 XILINX的 FPGA 方案。但是国际形式风云变幻,从 2018 年开始的中美贸易战开始,美国政府逐步禁售 FPGA 芯片给华为、海康威视等国内 FPGA 使用的大客户,逐步也让笔者感到了作为一个 FPGA 技术爱好者和从业者的渺小,也认识到了作为半导体技术的明珠之一”FPGA”技术,国内的 FPGA 差距与国外差距巨大。差距不仅仅体现在半导体工艺,还有巨大的专利壁垒。
目前 Xilinx(赛灵思)、Altera(阿尔特拉)、Lattice(莱迪思)、Microsemi(美高森美)等几家,其中,Xilinx 与Altera 占有近 90% 的市场份额,专利达到 6000 余项之多。
在目前的情况下,不管是硬件成熟度、软件成熟度、生态完善,国内 FPGA 厂家都是无法比拟的,在这种情况下我们仍然有必要学习国外先进 FPGA 技术。这也是对于就业和职业最好的选择。当然笔者也在准备推广国产化的FPGA 技术方案,相信在不久的将来,也许是 5-10 年后,国产的 FPGA 和配套的 EDA 软件也能达到目前国外 FPGA巨头的水平。
2 搞清楚是否有必要学习 FPGA
对于很多初次接触 FPGA 的读者来说,FPGA 是陌生而神秘,对于学习了一段时间的读者来说,感觉 FPGA 强大,无所不能,而自己的技术能力却一无所能。这是很多初学者必须面对的困难,也是必须要搞清楚的问题:
1)、FPGA 是什么?
2)、FPGA 的优缺点是什么?
3)、FPGA 的应用领域是什么?
4)、我是否有必要学习 FPGA?
5)、学习 FPGA 的困难是什么?
6)、有什么方法与捷径?
带着这些笔者提出来的疑问,或许也是你们正在阅读这篇文章的疑问,笔者以自己从业多年的认识来为你们解答这些问题。
2.1FPGA 是什么东西
早在 FPGA 出现前,还有 CPLD,通常 CPLD 就是逻辑门电路芯片,而随着技术发展,新的工艺的出现,才出现了 FPGA 技术。FPGA 虽然在功能上也是实现了逻辑门,但是实现的方式和 CPLD 却大不一样。由于 FPGA 需要被反复烧写,它实现组合逻辑的基本结构不可能像 ASIC 那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流 FPGA 都采用了基于 SRAM 工艺的查找表结构。
LUT 本质上就是一个 RAM。它把数据事先写入 RAM 后, 每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。FPGA 不仅内部的逻辑功能可以通过软件编写,FPGA 的 IO 功能也可以根据硬件电路需求重新分配定义。对于硬件电路板设计工程师,只要掌握了 FPGA 的硬件特性,可以在不需要和软件工程师进行复杂的沟通前提下就可以完成对硬件的设计。然后软件工程师,通过软件定义 FPGA 的外设功能引脚。所以可以把 FPGA 就是通过程序可以实现不同的逻辑功能的芯片,而且这种方式不同于 CPU 的指令调度方式。下一个问题中,我们讨论 FPGA 和 CPU 的对比。
2.2FPGA 的优缺点
FPGA 有很多优点,比如并行处理能力强,速度快,由于 FPGA 硬件是可编程的特点,在一些 ASIC 芯片还没出现的领域或者行业,FPGA 具有通过编程快速达到方案预期的好处,也可以在一些不知道去研发专用 ASIC 电路的领域,或者最佳的成本优势。比如通信、安防、医疗、工业、军事、航天领域,FPGA 都是这些行业的明星,而且高端的 FPGA 技术几乎被国外技术垄断。另外和 PC 以及 GPU 相比,FPGA 的综合功耗更低。
FPGA 的缺点:
1)、从成本角度,FPGA 不适合一些量非常大的领域使用,量非常大的领域一般有专用的 ASIC 芯片供应。所以如果量大,建议读者先去考虑是否有专用的 ASIC 芯片可以解决方案。
2)、从开发难度来说,FPGA 需要很强的专业背景,以及基础的底层通信协议的编写能力,使用 FPGA 没有库函数给你调用的,所以基本上一切的接口都要自己去写,如果一些标准的 IP 或者公司自己的 IP,也要掌握接口的时序调用。
3) debug 困难,FPGA 的有一套自己的 debug 方式,可以通过 RTL 的仿真,初步验证自己的代码逻辑是否正确,然后通过板级验证,证明在指定的 FPGA 芯片上看是否运行正确。而且有一些潜在的 bug 可能无法发现,需要大量的测试和验证。所以选择成熟的 FPGA 芯片以及成熟的 EDA 开发软件非常重要,否则入坑了,不容易出来。
4) 编译时间特别长,这是非常不幸的,即便是用目前最好的电脑,用的也是目前最好的 EDA 开发工具,依然非常慢,对于一个中等规模的项目开发,FPGA 的编译时间可能在 20~30 分钟左右,一天 8 小时的工作时间,没多少次编译就要下班了,所以加班是经常的事情。
2.3 FPGA 的应用领域
FPGA 广泛应用于通信、安防、医疗、工业、军事、航天领域。这些领域,当然不是全部要使用 FPGA,而是一些方面不会有现成的 ASIC 芯片供应,说白了就是量不够大,但是对成本又不是非常敏感的行业。没错,基本上用 FPGA 的公司都是很有钱的公司,如果你是 FPGA 从业者,你的就业面基本上就是去一些大型的通信公司,或者研究所。比如华为的通信设备,很多都需要用到 FPGA 做通信使用,海康威视的设备很多需要用 FPGA 做图像加速处理、阿里云的云服务器也有用 FPGA 加速的,工业领域的通信、运动控制、工业摄像头等非常大量的使用 FPGA,军事领域的导弹,雷达等,也都是需要用到 FPGA 去采集高速的 AD 信号,并且做并行加速,通常来说,美国的芯片是禁售给军工企业的。
目前新兴的领域比如加速运算,FPGA 方案和 GPU 方案也是各有千秋,而且从长远看,笔者也是更看好 FPGA的技术,因为 FPGA 的并行算法能力,可以突破摩尔定律的影响。GPU 不可能无限制提高主频的,但是 FPGA 可以通过增加逻辑门的数量,提高并行处理的速度,从而获得更高的性能。并且在一些专业的加速算法,深度算法领域,FPGA 具备更好的功耗,更低的功耗就意味着更低的使用成本。
2.4 是否有必要学习 FPGA
前面分析的内容,已经初步告诉你是否要学习 FPGA 了。除了以上的分析,还有一定的机缘。如果机缘让你遇到 FPGA,请好好把握,FPGA 是非常有趣的事物,需要学习的知识非常多,并且具备很大的挑战。如果对于一个学生,已经掌握了单片机,你可以选择一条往 ARM 方向,LINUX 方向的发展路径,也可以选择一条往 FPGA 的通信、并行加速发展方向;但是不管如何,都需要你有专业背景,也就是把你专业领域的东西,通过这些先进的技术可以发挥作用。如果你是一个工程师,如果你们的公司要求你掌握 FPGA,你就的去学习 FPGA,如果你是工程师,你已经厌倦了 ARM 或者 LINUX 的枯燥,你更喜欢 FPGA 的并行处理能力,对 FPGA 的并行加速方案非常痴迷,你可以选择学习 FPGA。如果你犹豫不绝,毅力不够鉴定,还是不知道自己学习 FPGA 的目的,那就不要学习 FPGA.
2.5 学习 FPGA 的困难
每个领域对于不会的人来说,都是难的,但是对于高手来说都是不难的。所以这个难是相对的,是相对于初学者的。
1)、你所认识的身边学习 FPGA 的人少,FPGA 的圈子小,所以你要由做独行侠的心里准备。
2)、软件安装和使用超级复杂,一各软件都要 20G 以上,这还不算安装一堆软件,别人搞 STM32 的安装一个200 多 M 的 MDK 就可以了。
3)、学习成本高,学习成本不仅仅包括硬件的投入,低端的硬件,学习的内容有限,打基础没问题,真要去公司露几手,是不行的,FPGA 做的都是一些高尖端的领域,必须由几手绝活才可以吹牛。另外就是时间投入,由于很多需要基础学习,比如一个 I2C,一个 UART 通信都要靠自己敲入每行代码,这是多痛苦 事情,别人搞 STM32的以一条库函数就搞定了,你作为一个初学者,可能一个 I2C 或者一个 UART 写了 1 周,2 周都没写稳定。
4)、大量的接口协议需要学习,比如 AXI4 总线,光通信、PCIE 通信、接口协议不是证明你 FPGA 技术是否多高的,但是没有接口协议,你的自己写的控制代码,或者算法,无法借用别人已经做好的功能模块。
5)、需要会时序分析,自己每写的一行代码都要精确知道,在某一个时刻发生了什么,别人 STM32 库函数调用那要计算花费了多少时间,具体哪一个时刻执行了什么呢?你可能因为一个时序的代码没有精准控制,导致你花费了几天调试才找到问题。
6)、需要会看英文手册,而且会大量的无效信息中提取有用的信息,搞 FPGA 由中文的教程那是你的福音,更多时候需要肯英文文档,关键很多时候还没理解透彻
7)、全能通,你需要会 C/C++,你需要比 STM32 学者更强,需要掌握 microblaze SOC 使用,现在出现的 ZYNQ以及 MPSOC,你还需要会 ARM 会 LINUX 底层驱动的开发,调试上位机
8)、硬件分析能力,有些硬件工程师设计的硬件有问题,你还要帮忙分析测试硬件问题
9)、初学者写的代码问题很大,FPGA 编译时间很长,你会经常需要加班
10)、有一台非常强大的电脑,配置当下最好的 CPU,单核主频越高越好,内存越大越好,所以对于手头紧张的学生来说,还是要节省开销,配个好点电脑的,尽量不要因为硬件的问题浪费宝贵的时间。遥想笔者上学期间的穷苦潦倒,FPGA 真是有点玩不起的。可以参考以下参数配置。
2.6 方法与捷径
方法与捷径是就是如何花费更少的时间达到最佳的结果。
1)、如果你学习过 C 或者其他嵌入式编程的最佳了,有点基础总比没有基础的小白好
2)、FPGA 编程语言选择 verilog 好了,虽然 VHDL 也是 FPGA 的编程语言,你能看懂 VHDL 就可以了,因为现在学习 verilog 编程语言的人多,数据也多,参考资料就多了。
3)、选择一款国内开发板,国内的开发板产业已经相对完善,适合初学者使用,配套的中文教程容易阅读,配套的例子一般也容易上手。但是国内的开发板还存在以下问题:,资料的更新比不上国外的,一些新的技术没有在教程中体现,当你完成基础的学习后,还是最好去学习国外的资料,一些 FPGA 最新的技术国内开发板厂家需要一定延迟才会更新,如果你总是满足于开发包板学到的内容,你得技术肯定不是最先进的,肯定也不是领先的。
4)、多加 QQ 群,多和别人交流,活跃的气氛有利于带动一些技术大牛和你分享他们的技术经验。
3 总结
虽然我们米联客的主要盈利手段还是售卖 FPGA 开发板,但是我们的教程尽量不出现广告,还是纯粹探讨技术,笔者以一个 FPGA 爱好者,开发者的角度给大家分享自己的经验和米联客团队掌握的 FPGA 技术,希望能给读者在未来的 FPGA 从业之路起到积极的帮助,也希望大家可以更多和米联客团队分享自己的学习经验。我们米联客团队的成长离不开广大读者的参与,我们的技术分享也离不开广大 FPGA 开发者的分享
|