请选择 进入手机版 | 继续访问电脑版
[X]关闭
20

初识FPGA第一次亲密接触

摘要: 1.1 FPGA技术背景笔者也是在偶然的机缘下接触到FPGA的,当初只有感性的认识就是FPGA速度快,而笔者是一个初出茅庐的电子技术爱好者,觉得越快越好,就去学习FPGA了,学习了FPGA才知道FPGA真不简单。一晃8年多时间过 ...

1.1 FPGA技术背景

笔者也是在偶然的机缘下接触到FPGA的,当初只有感性的认识就是FPGA速度快,而笔者是一个初出茅庐的电子技术爱好者,觉得越快越好,就去学习FPGA了,学习了FPGA才知道FPGA真不简单。一晃8年多时间过去了,在摩尔定律下,FPGA也是从逻辑资源上不断刷新新的记录,笔者用过的FPGA从XILINX家族的spartan2e、spartan3e、spartan6到artix7、kintex7、zynq7000再到ultrascale、MPSOC。这些年,见证了XILINX公司的从FPGA领域和Altera平分天下,到目前一家独大,感概当初运气好,当初选择了XILINX的FPGA方案。但是国际形式风云变幻,从2018年开始的中美贸易战开始,美国政府逐步禁售FPGA芯片给华为、海康威视等国内FPGA使用的大客户,逐步也让笔者感到了作为一个FPGA技术爱好者和从业者的渺小,也认识到了作为半导体技术的明珠之一”FPGA”技术,国内的FPGA差距与国外差距巨大。

在目前的情况下,不管是硬件成熟度、软件成熟度、生态完善,国内FPGA厂家都是无法比拟的,在这种情况下我们仍然有必要学习国外先进FPGA技术。这也是对于就业和职业最好的选择。当然笔者也在准备推广国产化的FPGA技术方案,相信在不久的将来,也许是5-10年后,国产的FPGA和配套的EDA软件也能达到目前国外FPGA巨头的水平。

1.2搞清楚是否有必要学习FPGA

对于很多初次接触FPGA的读者来说,FPGA是陌生而神秘,对于学习了一段时间的读者来说,感觉FPGA强大,无所不能,而自己的技术能力却一无所能。这是很多初学者必须面对的困难,也是必须要搞清楚的问题:

1)、FPGA是什么东西?

2)、FPGA的优缺点是什么?

3)、FPGA的应用领域是什么?

4)、我是否有必要学习FPGA?

5)、学习FPGA的困难是什么?

6)、有什么方法与捷径?

带着这些笔者提出来的疑问,或许也是你们正在阅读这篇文章的疑问,笔者以自己从业多年的认识来解答这些问题你。

1.2.1 FPGA是什么东西

         早在FPGA出现前,还有CPLD,通常CPLD就是逻辑门电路芯片,而随着技术发展,新的工艺的出现,才出现了FPGA技术。FPGA虽然在功能上也是实现了逻辑门,但是实现的方式和CPLD却大不一样。由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流FPGA都采用了基于SRAM工艺的查找表结构。LUT本质上就是一个RAM。它把数据事先写入RAM后, 每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。

       所以可以把FPGA就是通过程序可以实现不同的逻辑功能的芯片,而且这种方式不同于CPU的指令调度方式。下一个问题中,我们讨论FPGACPU的对比。

1.2.2 FPGA的优缺点

         FPGA有很多优点,比如并行处理能力强,速度快,由于FPGA硬件是可编程的特点,在一些ASIC芯片还没出现的领域或者行业,FPGA具有通过编程快速达到方案预期的好处,也可以在一些不知道去研发专用ASIC电路的领域,或者最佳的成本优势。比如通信、安防、医疗、工业、军事、航天领域,FPGA都是这些行业的明星,而且高端的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小时的工作时间,没多少次编译就要下班了,所以加班是经常的事情。

1.2.3 FPGA的应用领域

         FPGA广泛应用于通信、安防、医疗、工业、军事、航天领域。这些领域,当然不是全部要使用FPGA,而是一些方面不会有现成的ASIC芯片供应,说白了就是量不够大,但是对成本又不是非常敏感的行业。没错,基本上用FPGA的公司都是很有钱的公司,如果你是FPGA从业者,你的就业面基本上就是去一些大型的通信公司,或者研究所。比如华为的通信设备,很多都需要用到FPGA做通信使用,海康威视的设备很多需要用FPGA做图像加速处理、阿里云的云服务器也有用FPGA加速的,工业领域的通信、运动控制、工业摄像头等非常大量的使用FPGA,军事领域的导弹,雷达等,也都是需要用到FPGA去采集高速的AD信号,并且做并行加速,通常来说,美国的芯片是禁售给军工企业的。

         目前新兴的领域比如加速运算,FPGA方案和GPU方案也是各有千秋,而且从长远看,笔者也是更看好FPGA的技术,因为FPGA的并行算法能力,可以突破摩尔定律的影响。GPU不可能无限制提高主频的,但是FPGA可以通过增加逻辑门的数量,提高并行处理的速度,从而获得更高的性能。并且在一些专业的加速算法,深度算法领域,FPGA具备更好的功耗,更低的功耗就意味着更低的使用成本。

 1.2.4 是否有必要学习FPGA

         前面分析的内容,已经初步告诉你是否要学习FPGA了。除了以上的分析,还有一定的机缘。如果机缘让你遇到FPGA,请好好把握,FPGA是非常有趣的事物,需要学习的知识非常多,并且具备很大的挑战。如果对于一个学生,已经掌握了单片机,你可以选择一条往ARM方向,LINUX方向的发展路径,也可以选择一条往FPGA的通信、并行加速发展方向;但是不管如何,都需要你有专业背景,也就是把你专业领域的东西,通过这些先进的技术可以发挥作用。如果你是一个工程师,如果你们的公司要求你掌握FPGA,你就的去学习FPGA,如果你是工程师,你已经厌倦了ARM或者LINUX的枯燥,你更喜欢FPGA的并行处理能力,对FPGA的并行加速方案非常痴迷,你可以选择学习FPGA。如果你犹豫不绝,毅力不够鉴定,还是不知道自己学习FPGA的目的,那就不要学习FPGA.

1.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真是有点玩不起的。

1.2.6 方法与捷径

         方法与捷径是就是如何花费更少的时间达到最佳的结果。

         1)、如果你学习过C或者其他嵌入式编程的最佳了,有点基础总比没有基础的小白好

         2)、FPGA编程语言选择verilog好了,虽然VHDL也是FPGA的编程语言,你能看懂VHDL就可以了,因为现在学习verilog编程语言的人多,数据也多,参考资料就多了。

         3)、选择一款国内开发板,国内的开发板产业已经相对完善,适合初学者使用,配套的中文教程容易阅读,配套的例子一般也容易上手。但是国内的开发板还存在,资料的更新比不上国外的,一些新的技术没有在教程中体现,当你完成基础的学习后,还是最好去学习国外的资料,一些FPGA最新的技术国内开发板厂家需要一定延迟才会更新,如果你总是满足于开发包板学到的内容,你得技术肯定不是最先进的,肯定也不是领先的。

         4)、多加QQ群,多和别人交流,活跃的气氛有利于带动一些技术大牛和你分享他们的技术经验

        

1.3总结

虽然我们米联客的主要盈利手段还是售卖FPGA开发板,但是我们的教程尽量不出现广告,还是纯粹探讨技术,笔者以一个FPGA爱好者,开发者的角度给大家分享自己的经验和米联客团队掌握的FPGA技术,希望能给读者在未来的FPGA从业之路起到积极的帮助,也希望大家可以更多和米联客团队分享自己的学习经验。我们米联客团队的成长离不开广大读者的参与,我们的技术分享也离不开广FPGA开发者的分享。

1

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (1 人)

发表评论

最新评论

引用 猪猪 2021-3-11 10:22
不错,感谢
引用 沉思 2021-1-21 21:27
谢谢分享!
引用 LouisLIU刘浩 2020-11-4 08:35
学习了,资料很好,谢谢!
引用 gentlebreeze5 2020-9-10 13:43
不断学习中。。。
引用 veghm 2020-8-24 22:54
很中肯了
引用 lxy 2020-8-19 14:44
正在努力学习~
引用 I'mpossible 2020-4-1 16:27
很中肯了
引用 I'mpossible 2020-4-1 16:18
太难了,ZYNQC语言Verlog都得会
引用 LIGHTMAN490 2020-3-22 00:10
没深入了解FPGA,直接上手了ZYNQ,走了一段痛苦摸索的日子。
引用 我本清山都水郎 2020-2-24 14:44
把学习的点点滴滴记录下来,指不定能出本书呢。
引用 角斗士 2020-1-29 14:59
FPGA应该学习学习,未来的希望。
引用 yalsim 2020-1-21 00:16
写得很好,FPGA搞得越久,感觉需要学习的东西就越多
引用 葫芦 2020-1-9 11:04
感谢分享
引用 旺大侠 2020-1-2 14:40
马上本科毕业,英语不怎么好,有点点劝退我了hhh,实习公司要我学这个
引用 乔木 2019-12-26 15:50
好好好
引用 yangsqiaos 2019-12-25 21:14
搞射频的,来学ZYNQ
引用 听3409 2019-12-5 15:35
如果能像学32那样就好了
引用 听3409 2019-12-5 15:34
可以!
引用 拼4694 2019-12-2 17:31
感谢分享
引用 拆穿 2019-11-24 23:29
写的挺好的,现在是硬件,对FPGA挺感兴趣的

查看全部评论(20)

本文作者
2019-11-20 22:21
  • 7
    粉丝
  • 9726
    阅读
  • 20
    回复

关注米联客

扫描关注,了解最新资讯

联系人:汤经理
电话:0519-80699907
EMAIL:270682667@qq.com
地址:常州溧阳市天目云谷3号楼北楼201B
相关分类
热门评论
排行榜