古语云:知己知彼,百战不殆。那么既然选择了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. HDU5661 Claris and XOR

    我们求二进制是怎么求的呢:先看看二进制的每一位代表多大:.......32 16 8 4 2 1 假如n=10, ..... 32>n ,不要. 16>n,不要. 8<=n,要,然后 ...

  2. 通过js修改网页内容

    js可以通过文本所在标签的id获取该标签对象,然后修改其内容,如: document.getElementById('标签id').innerHTML = '要修改的文本内容'; 该方法可以在要修改的 ...

  3. 浅谈Java多态

    什么是Java中的多态?又是一个纸老虎的概念,老套路,把它具体化,细分化,先想三个问题(注意,这里不是简单的化整为零,而是要建立在学习一个新概念时的思考框架): 1.这个东西有什么用?用来干什么的?它 ...

  4. WPF 快捷方式

    http://www.cnblogs.com/gnielee/archive/2010/07/16/wpf-custom-hotkey-command.html

  5. 史上最难的一道Java面试题 (分析篇)

    博客园 匠心零度 转载请注明原创出处,谢谢! 无意中了解到如下题目,觉得蛮好. 题目如下: public class TestSync2 implements Runnable { int b = 1 ...

  6. 前端魔法堂——异常不仅仅是try/catch

    前言  编程时我们往往拿到的是业务流程正确的业务说明文档或规范,但实际开发中却布满荆棘和例外情况,而这些例外中包含业务用例的例外,也包含技术上的例外.对于业务用例的例外我们别无它法,必须要求实施人员与 ...

  7. win10 UWP FlipView

    FlipView 可以让用户逐个浏览的项目集合 <FlipView Grid.Row="0" Height="100" Margin="10,1 ...

  8. win10 uwp 装机必备应用 含源代码

    zhxilin大神说http://www.cnblogs.com/zhxilin/p/4819372.html这文章说到了使用await Windows.System.Launcher.LaunchU ...

  9. HTML5之appcache语法理解/HTML5应用程序缓存/manifest缓存文件官方用法翻译

    习惯性的贴几个参考链接: W3School-HTML 5 应用程序缓存 官方 MDN window.applicationCache 接口文档 官方 MDN 用法示例 看所有的教程不如直接看最原始的官 ...

  10. 在项目中集成jetty server

    为什么使用jetty 使用 tomcat 开发效率并不是太高,并且在eclipse有时两秒做更新,有时候又得手动去部署显得非常麻烦.折算我们可以使用 jetty server 由于 eclipse开发 ...