古语云:知己知彼,百战不殆。那么既然选择了FPGA之路,欲练此功,必先……

必先了解清楚,FPGA的特点,FPGA善于/不善于解决什么类型问题,以及FPGA应用的方向,FPGA学习的要素等等。

一、FPGA的特点

理论上,通用MCU/CPU和数字ASIC能够做的事,FPGA都能做,甚至可以利用FPGA内部资源实现一个CPU,也即是通常所说“软核”。但这几个既然能够共存,实际上都有各自适合和不适合的领域。CPU/MCU为通用任务设计,能够胜任大量常规的控制、计算任务,但是对一些特殊的任务,比如高速信号处理、大规模并行计算却是无能为力,这也是为什么机器学习基本要靠GPU或者FPGA。ASIC为特定应用设计,性能和功耗都非FPGA能及,但是功能固定,流片费用极高,通常用于非常大批量的场合。和CPU大哥相比,FPGA的特点是,可以利用并行实现更高速的计算和更大的吞吐量,也可以利用其灵活性作为CPU的协处理单元或扩展接口。和二哥ASIC相比,FPGA的优点主要是其灵活性极高,重复编程,在批量不够大或需重复修改的场合较ASIC更为优势。

当然FPGA也有其相应的缺点以及不适合的工作。和MCU比价格相对高,和ASIC相比速度和功耗都望尘莫及(ASIC作为专用电路比通用电路更加高效)。另外FPGA不适合 1-大量顺序控制,2-大量存储要求的场合,这类工作通用MCU更为擅长也更经济。

二、FPGA应用领域

一些传统行业,比如电力、能源、医疗,有不少FPGA的需求,这主要是得益于FPGA灵活的特点。这些领域的设备通常 1-设备大,价格高昂(成本相对不敏感),2- 批量无法巨大(不适合定制ASIC),3-设备更新升级较快。这几个特点决定了需要FPGA来实现粘合、接口扩展、通讯实现的需求,也会包括一些较高速的数据采集处理的应用。当然反过来说,这些通常不是重型应用,通常是作为CPU或DSP的扩展和辅助,用到的FPGA基本是中低端型号。

另一个FPGA广泛应用的领域是ASIC的验证。由于行业不同了解不深,仅从外行人的初步了解来看,这个领域 1-用到FPGA通常是逻辑量非常大的型号,2-因为不会产品化只是作为设计验证工具,批量不会大。

相对上述两个行业领域,无线通信行业中FPGA的使用相对更为广泛。这主要因为FPGA的并行架构能够满足其高速信号处理的需求。

仅仅从这些传统领域来看,FPGA的市场大小远不如CPU和ASIC这两位大哥,但目前高速发展的一些新兴领域给了FPGA新的机会,比如工业以太网、机器视觉、机器学习的兴起和实用化。一个典型的方向是机器视觉,图像和视频的底层处理本身需要及其庞大的重复性运算,如使用CPU会大大受制于内存读取瓶颈的限制。而这恰恰是FPGA作为硬件计算本身擅长的工作。相信随着越来越多需要高速信号处理、并行计算的新兴技术领域的日渐步入实用化阶段,FPGA会有更大的用武之地。

三、FPGA学习路线

前面这些算是对FPGA本身的介绍,下面这些就是FPGA学习路线方面的干货了。趁机会对目前我所了解的内容作个总结,也作为今后在FPGA之路上前进的路标参照。

FPGA的学习基础是语言和各种工具的掌握,另外还需要最FPGA的架构和资源有必要的认识。亚稳态、跨时钟域问题个人感觉是验证一个人是否入门FPGA的试金石,也是能够开发FPGA的一个必要前提。其它的比如硬件思想、速度-面积互换这些需要不断在实际中运用体会。

但做这么久FPGA,我的观点是FPGA的难点,全在FPGA之外。使用FPGA本身不难,难的是能够用FPGA做什么事。比如做通讯接口扩展要求对常用的并行/串行通讯时序有深入理解,做高速信号采集则要求对ADC、硬件、信号完整性这些方面都有认识,做图像处理、机器视觉这些更是要求对这些专业领域有比较深的建树 ----可见,FPGA学习本部仅仅是学习FPGA本身,作为一种工具,其能够实现多大的价值更要看对专业领域的认识。

当然了,每个方向都是一个深坑,甚至是一个独立的专业,人生苦短,往往在其中一个方向有很深的建树就已经了不起了。

(码字不易,转载请注明出处,谢谢!)

第二篇-FPGA学习之RoadMap的更多相关文章

  1. Hadoop入门第二篇-MapReduce学习

    mapreduce是一种计算模型,是google的一篇论文向全世界介绍了MapReduce.MapReduce其实可以可以用多种语言编写Map或Reduce程序,因为hadoop是java写的,所以通 ...

  2. 【第二篇】学习 android 事件总线androidEventbus之异步事件的传递

    1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过 postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().p ...

  3. RabbitMQ学习总结 第二篇:快速入门HelloWorld

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  4. 学习KnockOut第二篇之Counter

                                                                        学习KnockOut第二篇之Counter        欲看此 ...

  5. 老老实实学习WCF[第二篇] 配置wcf

    老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...

  6. #Java学习之路——基础阶段二(第二篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  7. angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)

    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...

  8. JavaWeb学习总结第二篇--第一个JavaWeb程序

    JavaWeb学习总结第二篇—第一个JavaWeb程序 最近我在学院工作室学习并加入到研究生的项目中,在学长学姐的带领下,进入项目实践中,为该项目实现一个框架(用已有框架进行改写).于是我在这里记录下 ...

  9. Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍

    Java并发包下锁学习第二篇队列同步器 还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图: ​ 从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本 ...

随机推荐

  1. IEnumerable,ICollection,IList,List之间的区别

    做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 // 摘要: // 公开枚举器,该枚举器 ...

  2. ES6的变量解构赋值

      前  言 ES6 解构赋值: ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称为解构. 1.1 数组的结构赋值 1.1.1基本用法 JS中,为变量赋值直接指定.例如下面代码: ...

  3. 【广告】win10 uwp 水印图床 含代码

    本文主要是广告我的软件. 图床可以加速大家写博客上传图片的时间,通过简化我们的操作来得到加速. 在写博客的时候,我们发现,我们需要上传一张图片,需要先打开图片,然后选择本地图片,然后上传. 但是我经常 ...

  4. ubuntu tftp-server 服务器安装与配置

    第一步:安装tftp服务sudo apt-get install tftpd tftp openbsd-inetd第二步:目录配置vi /etc/inetd.conf修改文件夹为根目录下的tftpbo ...

  5. Servlet 笔记-过滤器

    Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet.Servlet 过滤 ...

  6. Zookeeper 笔记-应用场景

    应用场景:数据发布,订阅:分布式应用配置项:分布式计数器:统一命名服务:状态同步服务:集群管理:Master选举:分布式锁:定时任务争夺:分布式队列:分布式协调通知 特点:顺序一致性,原子性,单一视图 ...

  7. Mongodb常用的性能监控命令

    1.显示服务器状态:db.serverStatus()      2.mongodb可以通过profile来监控数据,进行优化. 查看当前是否开启profile功能:db.getProfilingLe ...

  8. 在Owin Self-Hosing下实现每个请求中共享上下文(数据)

    问题 这几天在做公司的外部WebApi网关,由于使用了OAuth2.0,所以不得不使用Owin来部署网关. 而涉及到请求上下文的问题,为了使业务层能获取到请求头的信息,又不与网关耦合,决定把请求信息写 ...

  9. GET_DDL提取目标元数据:ddl

    创建对象的语句就是了 提取表 set line 200 pages 50000 wrap on long 999999 serveroutput on SQL> select dbms_meta ...

  10. SSM框架+slf4j 以Gradle实现

    环境:win10+jdk8+tomcat9+Intellij IDEA 首先,作为一个喜欢偷懒的人,管理jar之类的的事情太累,所以用了Gradle项目管理器 第一步: 新建一个gradle-web项 ...