第二篇-FPGA学习之RoadMap
古语云:知己知彼,百战不殆。那么既然选择了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的更多相关文章
- Hadoop入门第二篇-MapReduce学习
mapreduce是一种计算模型,是google的一篇论文向全世界介绍了MapReduce.MapReduce其实可以可以用多种语言编写Map或Reduce程序,因为hadoop是java写的,所以通 ...
- 【第二篇】学习 android 事件总线androidEventbus之异步事件的传递
1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过 postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().p ...
- RabbitMQ学习总结 第二篇:快速入门HelloWorld
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...
- 学习KnockOut第二篇之Counter
学习KnockOut第二篇之Counter 欲看此 ...
- 老老实实学习WCF[第二篇] 配置wcf
老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...
- #Java学习之路——基础阶段二(第二篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)
您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...
- JavaWeb学习总结第二篇--第一个JavaWeb程序
JavaWeb学习总结第二篇—第一个JavaWeb程序 最近我在学院工作室学习并加入到研究生的项目中,在学长学姐的带领下,进入项目实践中,为该项目实现一个框架(用已有框架进行改写).于是我在这里记录下 ...
- Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍
Java并发包下锁学习第二篇队列同步器 还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图: 从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本 ...
随机推荐
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(87)-MVC Excel导入和导出
本文示例代码下载: 链接:http://pan.baidu.com/s/1jHBdgCA 密码:hzh7 ps:Vs数据库脚本在解压目录下,修改web.config数据库链接,示例代码包含:导入,导出 ...
- 点击jsp页面上的超链接后怎么找到对应的servlet
首先超链接是一个像是url一部分的东西,其实不追求深入的道理可以联想到web.xml中的一个<url-pattern>,其实它俩也的确是对应关系,然后<url-pattern> ...
- sys.argv向脚本中传递参数
可以向脚本中传递无限多个参数,其值是一个列表,默认sys.argv[0]内容是脚本文件路径加文件名 test.py文件中的内容如下: #! /usr/bin/python3import sys pri ...
- 80806汇编(5)——[BX]和Loop指令
80806汇编(5)--[BX]和Loop指令 已经好久没写点东西了,国庆节就一直想弄个个人网站,这段时间一直在弄那个,虽然有现成的框架(Hexo),但是总想弄出自己的效果来,但是最后还是有些差强人意 ...
- JVM菜鸟进阶高手之路十三(等你来战!!!)
转载请注明原创出处,谢谢! 前几天有个朋友问了我个问题,下面给大家分享下,希望大家积极在评论区进行评论留言,等你来战!!! 先来个趣味题,热身下,引出后面的jvm题目. 地上的影子是那个人的? 地上的 ...
- RandomAccessFile类进行文件加密
文件加密/解密示例. package io; import java.io.*; public class encrypt { private File file; //存储文件对象信息 byte[] ...
- JS难点--面向对象(封装)
我觉得js的难点之一就是面向对象编程. 面向对象 它是一种编程思想,它在写法上比面向过程相对来说复杂一些: 以下是我学习中关于面向对象的知识点总结: 1.什么是对象 从广义上说,"一切皆 ...
- 顺序栈--Java实现
/*栈和队列:逻辑结构属于操作受限的线性表 *栈:特点先进后出,只允许在栈顶操作 *栈的实现方式:顺序栈和链栈 *常见的操作:进栈,出栈,获取栈顶,判空,判满,栈的容量 *栈的应用 *1.逆序相关操作 ...
- time函数获取时间与本地时间不一致
修改php.ini,将“date.timezone”项修改为“date.timezone = PRC”. 大陆内地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/U ...
- JavaScript OOP 之 this指向
今天给大家分享一个JavaScript OOP中关于分辨this指向对象的小技巧,很实用呦! 我们先来看一段代码: 大家能判断出func();和obj.func();这两句的this指向吗? 首先,我 ...