古语云:知己知彼,百战不殆。那么既然选择了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. JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)

    函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过了你规定的时间间隔,才能进行下一次该函数的调用. 函数节流的原理挺简单的,估计大家都想到了,那就是定时器.当我 ...

  2. Java面向对象 IO (二)

     Java面向对象  IO   (二) 知识概要:               (1)字节流概述 (2)字节流复制图片 (3)IO流(读取键盘录入) (4)读取转换流,写入转换流 字节流概述   ...

  3. Vue实现勾选后向数组都添加

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. WPF 只允许打开一个实例

    我们有时候只希望我们的程序只打开一个实例,也就是我们的软件只有一次被打开. 那么我们可以通过一个办法知道,在这个软件打开前是不是打开过一个,还没关闭.也就是是否存在另一个程序在运行. 下面是一个简单方 ...

  5. visual studio 2015 warning MSB3246

    在我们很高兴的按下 本地计算机运行 按钮,希望看到我们程序运行的时候,垃圾vs就告诉我们,你的程序出现了问题,问题就是: warning MSB3246: 解析的文件包含错误图像.无元数据或不可访问. ...

  6. LINUX下分区命令Parted详解

    通常划分分区工具我们用的比较多是fdisk命令,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大.而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘.现在的磁盘空间已经远远大于2T,有两 ...

  7. 聊聊Vue.js组件间通信的几种姿势

    写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出. 文章的原地址:https://github.com/a ...

  8. SGU 223 Little Kings(状压DP)

    Description 用字符矩阵来表示一个8x8的棋盘,'.'表示是空格,'P'表示人质,'K'表示骑士.每一步,骑士可以移动到他周围的8个方格中的任意一格.如果你移动到的格子中有人质(即'P'), ...

  9. jzoj 5230 队伍统计(状压DP)

    Description 现在有n个人要排成一列,编号为1->n .但由于一些不明原因的关系,人与人之间可能存在一些矛盾关系,具体有m条矛盾关系(u,v),表示编号为u的人想要排在编号为v的人前面 ...

  10. [IR] Concept Search and LDA

    重要的是通过实践更深入地了解贝叶斯思想,先浅浅地了解下LDA. From: http://blog.csdn.net/huagong_adu/article/details/7937616/ 传统方法 ...