FPGA开发学习的几大误区

FPGA对于硬件工程师以及高校师生来说是非常重要的一项技能,其重要性甚至要超过PCB设计,不仅是因为在电子产品系统中(尤其是通信、音视频相关产品)可编程器件是非常重要的组成部分;IC设计也离不开HDL编程、通过FPGA设计、验证等;更重要的是“数字逻辑”的概念是每个硬件工程师必须具备的思维方式。
FPGA开发学习的几大误区.png

可现实呢?几乎所有高校毕业的电子类学生,除了少数参与过一些竞赛项目或做与FPGA相关的毕业设计的,几乎没有人讲得清楚什么是FPGA;即便是高校从事研发工作的硕士/博士同学们,也只是对自己正在用的型号、有限的功能有一定的掌握;企业的工程师?还好一些,毕竟在实战的项目中得到了体验,但这个比例是非常的小。
2.png

我国高校每年有至少100万的本科学生(除了电子、电气、自动化之外,还有计算机、物理、物联网等专业)要学习数字电路这门课程,70%以上的学校仍然在面包板上用分立的门电路来做数字电路课程实验;70%以上的学校仍然用8086/8088/8255/8251来做微机原理与接口技术/计算机系统结构的实验;EDA课程基本上也都是若干年前Altera或Xilinx通过大学计划提供的教学套具(很强大、很贵的设备),常见的模式是学生按照实验手册上的流程走一遍过场,编写几行代码,而至于这玩意是怎么工作的,实事求是地讲,多数负责教学的老师都未必知道。
3.png

同在高校如火如荼的“嵌入式系统”课程、人人都可以号称懂“嵌入式”相比,为什么FPGA成了这么高冷的一门技能呢?

我认为主要是在学习和应用FPGA的过程中存在以下几个误区:

1. FPGA很难学

这是学生以及工程师在谈到FPGA的时候第一反应,因为他们看到的都是上千块甚至几千块钱一个的板子,配一个几百块钱的编程器;板子上安装的都是几百个管脚、看起来非常牛b闪闪的器件,据数据手册上说支持着各种自己从来都没听说过的技术术语 - xx总线、xx接口、多少个CLB、挂着各种高速的DDR、USB、PCIe,据说还能跑什么软核、硬核,初学的菜鸟们脸立马涨的通红,我是不是太无知了?根本与他们拥有的知识结构对应不起来;软件?光下载个安装包就要10GB,安装需要半天时间,还经常蹦出来个错误信息,还是英文的;运行个案例试试?刚买的高性能的电脑也要跑十几分钟,出去上趟厕所回来,编译的进度条还停留在80%上。。。。哇,太强大了!学习中遇到问题请教老师,老师无奈地摇摇头:我也不懂,你问问你大师兄xxx吧,旁边大神级的师兄酷酷地走过来,修改几行代码,搞定,这一切都让你怀疑自己,怀疑你是不是学习FPGA的那块砖。其实我要说的是,学习FPGA比学会PCB设计都要容易的多 - 你已经学了数字电路,具备了数字逻辑的理论基础,比抽象的PCB库、原理图、网表、布局、布线要容易理解得多吧?编程语言,Verilog的语法太简单了,常用的都不到一页,比C语言不知道要简单几个量级;只要你学会了如何将要实现的功能从逻辑上描述清楚,再用HDL描述出来,基本就能让这个“万能芯片”给你表演一些很神奇的东西出来了。
我要买块高大上的开发板 - 当我们给初学者推荐小脚丫FPGA的时候,多数情况下都会招到他们的鄙视,你们这玩意能学FPGA么?也配叫FPGA开发板?就像一个摄影菜鸟总觉得卡片相机不是相机,一定要抱着一个能装配各种镜头的、价格必须上万元的单反才能学到摄影技术。基于对各种技能成长的观察,大概率事件 - “器材党”一般都是水平不行的,真正的高手基本都是在非常基础、浅陋的器材上成长起来的,因为只有最基础、浅陋的条件才能让他们聚焦在最核心的东西上,从而能够快速滴掌握真谛。

2.我需要很多教程才能学

在淘宝上观察一下你会发现,那些畅销的板卡并不是因为它设计的多么合理、适用或者价格便宜,而是在其产品描述页面罗列了一张长长的清单 - 赠送xxx个案例、xxx张光盘的视频教程等等。诚然这些参考学习资料对于初学者来讲有一定的帮助,尤其是心理上有更多的安全感,但我认为要真想学会一项技能,太多的参考并没有什么正面的帮助,尤其是一些游击队员提供的不规范的设计资料,反而让新手养成同样不规范的习惯。学习过程最重要的是自己发现问题、解决问题,自己会通过各种手段找到答案,而不是拿来别人已经做好的在上面修改。

3.我只学Xilinx、Altera的FPGA

这就像你想学开车,认为一定要用宝马、大奔才能学会开车一样,这种观念是非常错误的,是被某些势力严重误导了的。真正学习驾驶技能,你需要的是“大众”、“本田”,因为它们性价比高,比较适合学习用,当然对于不差钱的土豪来讲,他用玛莎拉蒂来学车也无可非议。重要的是我们普通的工程师要知道这个世界上除了Xilinx和Altera之外,还有Lattice、Microchip(原Actel的产品)提供更大众化的FPGA产品,他们的用量巨大而且价格便宜,在你初期的3、4年里,用这些公司的产品已经绰绰有余了,学会替你的老板省点钱,替你自己省点钱,也是做产品必须培养的优秀品质。

4.像C一样写Verilog

对于玩过单片机、嵌入式系统、软件编程的工程师来讲,他们把Verilog当成了C来写,这真的是暴殄天物,是对FPGA的“A”极大不敬。相对于MCU/MPU来讲,FPGA最值得傲娇的就是这个“A”,海量的门阵列,十万雄兵,你不能就让他们排着队干一件事情吧?学会并行处理、时序以及针对每个bit进行操作是学习FPGA的精髓。

5. 不关心资源配置

用高档开发板习惯了,就像富二代的公子哥,根本没有成本这一概念,只要能实现功能就可以了,我管它用了多少LUT,耗费了多少RAM呢?哥不Care!这是不行滴,因为在实际的项目中,你的老板不同意你这么做,即便是他不懂,看不到这些问题,那你的设计一定比别人花费更大的代价,付出更高的成本,也就意味着在市场上不会有竞争力而被淘汰。如果从一开始就没有养成重视资源配置,尽一切努力优化自己的逻辑达到最佳资源利用的好习惯的话,最终你就会像一个纨绔子弟一样败家、败项目。就像淘宝、逛街的魅力在于你能从花最少的钱买到最多的东西中获得莫名的快感一样,用FPGA的时候通过你自己的设计节省了多少n个寄存器、少用了m%的存储器,也是让人感到非常愉悦的体验,何不养成这种习惯,在快乐中成长呢?

限于篇幅就先说到这几点吧,日子还长,我们要交流的还很多,慢慢来吧。。。。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2019-05-03 08:57:09 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它