FPGA研发牛人心得总结
- 格式:doc
- 大小:152.00 KB
- 文档页数:40
fpga心得体会FPGA(Field Programmable Gate Array)是一种可编程逻辑设备,它具有强大的逻辑处理能力和灵活的可编程性,使得它在硬件设计领域得到广泛应用。
我在学习和使用FPGA的过程中收获了很多,下面就来分享一些我对FPGA的心得体会。
首先,FPGA具有极高的逻辑密度和计算性能,能够满足复杂的硬件设计需求。
相比于传统的固定功能芯片,FPGA具备了逻辑电路可编程的特性,使得它能够灵活地适应多种应用场景。
在我的项目中,我需要设计一个支持多种协议通信的嵌入式系统,而FPGA正是满足了这个需求。
通过在FPGA上编写逻辑代码,我成功实现了多个协议的处理和控制,大大提高了系统的灵活性和扩展性。
其次,FPGA具备了高度并行处理的能力,可以同时运行多个任务。
相比于单纯的软件实现,FPGA可以通过在不同的逻辑区域实现不同的功能模块,从而实现并行处理。
这对于需要高性能计算的应用非常有优势,如图像处理、音视频编码等。
在我的项目中,我利用了FPGA的并行处理能力,成功实现了一个高性能的图像处理算法,大大提高了系统的处理速度和效率。
第三,FPGA具备了较高的灵活性和可重构性,可以随时对逻辑进行修改和优化。
在硬件设计过程中,往往需要多次迭代和优化,而FPGA的可重构性使得这一过程变得更加高效。
通过修改逻辑代码和重新编程,我可以快速对设计进行调整和优化,并实时验证效果,减少了开发周期和成本。
另外,FPGA支持硬件和软件的协同设计,可以实现更灵活的系统架构。
在我的项目中,我采用了硬件和软件的结合,通过在FPGA上实现一些关键模块并通过软件控制,使系统具备了更高的通用性和扩展性。
FPGA还可以与其他处理器、外设等硬件组件进行连接,形成完整的系统。
这种协同设计方式使得我能够更好地解决具体的问题,并满足系统的要求。
最后,我发现学习和使用FPGA需要具备一定的硬件和软件知识,例如数字逻辑设计、Verilog/VHDL语言等。
fpga个人心得体会FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它可以根据用户的需要重新进行编程,以实现不同的功能。
在我个人使用FPGA的过程中,我深刻地体会到了它的优势和魅力。
首先,FPGA具有灵活性和可重构性。
相较于传统的专用集成电路(ASIC),FPGA可以在设计完成后进行现场编程,而无需重新设计和制造芯片。
这意味着我可以根据具体的需求对FPGA进行修改和优化,使其更适合特定的应用场景。
无论是改变设计逻辑、增加新的功能,还是优化性能和功耗,FPGA都可以随时进行调整,极大地提高了开发的灵活性和效率。
其次,FPGA具有并行计算能力。
相对于传统的通用处理器,FPGA可以通过配置并行计算单元实现更高的运算速度。
这对于需要高性能计算的应用非常重要,例如图像处理、信号处理和机器学习等。
我曾经使用FPGA进行图像处理的项目,通过合理地设计硬件架构和并行计算的布局,显著提升了处理速度和实时性。
这使我意识到FPGA在数据密集型应用中的巨大潜力。
此外,FPGA还具有较低的功耗和高效能。
FPGA的逻辑元件采用可编程的查找表(Look-Up Table)实现,相对于ASIC的固定逻辑电路,FPGA能够根据具体的需求进行灵活布局,减少了功耗的浪费。
在一些对功耗要求较高的应用中,FPGA能够提供更好的性能-功耗比,降低了系统的能源消耗。
与此同时,FPGA的设计流程也给我提供了很多的挑战和机会。
由于FPGA的可编程特性,需要我充分理解硬件描述语言(HDL)和硬件设计流程,掌握相关的设计工具和开发环境。
在这个过程中,我不仅提高了自己的技术能力,还学到了如何进行良好的工程管理和调试。
这些宝贵的经验对于今后的工作和学习都将会带来很大的帮助。
然而,FPGA的使用也存在一些挑战和限制。
首先,相较于通用处理器,FPGA的开发成本较高。
设计FPGA的逻辑电路需要耗费大量的人力、时间和资源。
FPGA学习总结FPGA(现场可编程门阵列)是一种数字电路开发和实现的工具,它提供了一种灵活的方式来设计和实现各种数字电路。
在我的FPGA学习过程中,我经历了以下几个方面的学习和实践:1.FPGA基础知识:在学习FPGA之前,我首先了解了FPGA的基本概念和原理。
我学习了FPGA的架构、时序和时钟设计、数字电路设计和综合等方面的知识。
这些基础知识为我深入学习和实践FPGA打下了坚实的基础。
2. FPGA开发工具的使用:我使用了常见的FPGA开发工具,如Vivado和Quartus。
这些工具提供了一种直观而强大的方式来设计和实现FPGA。
我学习了如何创建项目、添加模块、定义信号、综合和布局布线等操作。
通过不断的实践和尝试,我逐渐掌握了这些工具的使用。
3. Verilog和VHDL的学习:Verilog和VHDL是FPGA开发中常用的硬件描述语言。
通过学习这两种语言,我能够使用它们来描述和设计各种数字电路。
我掌握了如何使用这些语言来描述寄存器、组合逻辑、状态机等部件,并能够将它们综合成FPGA可实现的电路。
4.FPGA的应用实践:在学习了FPGA的基础知识和工具使用之后,我开始进行一些实际的应用实践。
我使用FPGA设计和实现了一些简单的电路,如计数器、加法器、乘法器等。
通过实践,我加深了对FPGA的理解,并增强了自己的设计和调试能力。
5.FPGA高级特性的学习:除了基础知识和工具使用外,我还学习了一些FPGA的高级特性,如时序分析、时钟域划分、并行数据传输和高速串行数据传输等。
这些特性在设计和实现一些高性能和复杂的电路时非常重要,我通过学习和实践,学会了如何正确地使用这些特性。
总结起来,FPGA学习是一个既有理论基础又注重实践和应用的过程。
通过学习FPGA,我更好地理解了数字电路的原理和设计,增强了自己的工程能力。
我学会了使用FPGA开发工具,掌握了Verilog和VHDL等硬件描述语言,实践了FPGA的设计和实现,并学习了一些高级特性。
FPGA培训学习心得不久前完成了在至芯科技的FPGA炼狱100天,近日签约公司,得闲,于是想写一段话来记录和总结一下这一百天。
来至芯科技前我纠结了很久,要不要做苦逼的技术,要不要学习门槛较高的FPGA,要不要来至芯科技学习?和很多大学生一样,我的本科非常平庸,没有凿壁偷光地学习,没有在社会校园里如鱼得水,只有一段朴实而又平凡的恋爱。
我没有考虑过以后做什么,没有考虑过靠什么养家糊口,没有考虑过怎么样让自己的生活更有价值。
直到现在,我幡然醒悟,我不能这样混日子,不能让别人瞧不起,一定要活出自己的价值来。
于是,在纠结过后最终决定去踏踏实实奋斗!2015年2月28我来到了至芯科技,带着自己的理想,带着“被虐”的心理准备,还有那几百块钱,紧接着就开始了我的疯狂一百天。
在这里,我见到了大名的鼎鼎的夏宇闻老师,为人大方开朗,但是对待科研和知识却是那么一丝不苟,他总能很生动地解释一些常见的概念,让我感觉到了一个老师对一门课程的真知灼见。
带我们成长最快的,最久的是一位从事FPGA开发30多年的老工程师,李凡老师。
李老师从module-endmodule开始,到我们渐渐学会了怎么去设计自己的架构,怎么去设计自己的状态图,怎么解决实际的工程问题,怎么写一份严谨的开发文档。
勤勤恳恳,为我们耐心解决每一个语法问题,设计问题,仿真问题。
他的不辞辛劳和踏实严谨让我非常感动。
他的做事方式,对待科研的态度让我非常佩服!还有小梅哥和建飞老师,让我学到了很多实际开发过程中的一些知识,让我们少走了很多弯路。
雷总对我们的关心,让我觉得很温暖!在这里对他们表示感谢!现在我找到一份还算满意的工作,也算是自己人生中新的一层吧。
有了对FPGA的最基本的开发知识,有了老工程师的严谨的态度和作风,对于以后的工程困难,远没有那么畏惧了。
今日的高度全靠昨日的努力,既然选择了做工程师,便只顾风雨兼程。
让自己的人生不一样!再次谢谢夏老师,李老师,雷总,小梅哥,建飞老师,陈老师,还有和我一起奋斗100天的大四的兄弟们。
10年FPGA开发经验的工程师肺腑之言从大学时代第一次接触FPGA至今已有10多年的时间。
至今记得当初第一次在EDA实验平台上完成数字秒表,抢答器,密码锁等实验时,那个兴奋劲。
当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。
后来读研究生,工作陆陆续续也用过Quartus II,Foundation,ISE,Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。
在学习一门技术之前我们往往从它的编程语言入手,比如学习单片机时,我们往往从汇编或者C语言入门。
所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的。
但我个人认为,若能先结合《数字电路基础》系统学习各种74系列逻辑电路,深刻理解逻辑功能,对于学习HDL 语言大有裨益,往往会起到事半功倍的效果。
当然,任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。
下面就以我的切身体会,谈谈FPGA设计的经验技巧。
1)看代码,建模型只有在脑海中建立了一个个逻辑模型,理解FPGA内部逻辑结构实现的基础,才能明白为什么写Verilog和写C整体思路是不一样的,才能理解顺序执行语言和并行执行语言的设计方法上的差异。
在看到一段简单程序的时候应该想到是什么样的功能电路。
例如:上面这段代码实现的功能就是一个带使能端的2选1数据选择器,如下图所示。
再例如:上面这段always实现的是带同步清零端的串并转换移位寄存器,位宽为width,下图为8位电路模型当你具备了一定的识代码能力之后,你会发现原来Verilog不是那么的枯燥,只不过是一个个电路模型的拼搭而已。
2)组合逻辑中的if...else...与case对于多输入端的组合逻辑来说,如果不需要考虑优先级应该尽量采用case语句来描述,这样综合出来的电路并行度要大一些,如果采用if...else...结构,综合出来的电路都是串行的,增大了信号时延路径。
学习FPGA的几点心得五篇第一篇:学习FPGA的几点心得1、首先要明白的是软件设计和逻辑设计的不同,并理解什么是硬件意识。
软件代码的执行是一个顺序的过程,编绎以后的机器码放在存储器里,等着CPU一条一条的取指并执行;因此软件设计中经常会带有顺序处理的思维。
而逻辑设计则不同,我们设计的是数字电路,它是由很多很多的与非门及D触发器构成的,上电之后所有与非门和D触发器都同时工作,不会因为A触发器的代码描述在B触发器之前A触发器就是先工作,事实上,RTL级代码的代码先后顺序在综合成网表文件后这种顺序就消失了,取代的是基本逻辑电路之间的互联关系描述;因此逻辑设计需要的是一种并发的思维,我们也需要用并发的思维去考虑电路的设计。
当然,我们设计的电路功能一般都有先后顺序的关系,如果这种顺序不能通过代码的先后顺序来实现,那么要怎么完成这一功能呢?在逻辑设计中,我们所说的先后顺序都是基于时间轴来实现:它的承载体就是时序逻辑,也就是那些触发器。
2、其次就是要熟悉基本电路的设计。
基本的电路不是很多,也就是D触发器、计数器、移位寄存器、状态机、多路选择器、译码器等几种,所有复杂的电路都可由这些基本的电路构成。
高手水平高的体现并不是他能写出一些很奇特的电路,相反,水平高是体现在他们总能将复杂的电路用这些很朴素的基本电路去描述。
甚至,你会发现他们的代码基本上是由if...else、case这些语句构成的,朴素的让你觉得奇怪。
初学者在入门的时候,对于基本电路的设计应该固定化、标准化,每种电路该用什么样的代码描述,应该要固定、统一,尽量少一些花哨的东西。
说来这里我举个例子。
以前有几个朋友因为仿真有问题请我帮忙找问题。
他们的代码写的很乱,出现了很多种稀奇古怪的电路,一看头都大了,只好建议他们按照标准的电路重新写下代码。
结果过了半天,他们就和我说问题不见了。
所以,高手们喜欢用简单的代码是有道理的,电路的标准化和规范化可以减少许多稀奇古怪的问题,问题少了他们也就能在别人加班的时候回家多睡回觉,呵呵。
学FPGA感想(五篇材料)第一篇:学FPGA感想回想起自己学FPGA,已经有一段时间了,从开始的茫然,到后来的疯狂看书,调电路,练习各种FPGA实例,到最后能独立完成项目,一路走来,感受颇多,拿出来和大家分享,顺便介绍下自己的一点经验所得,希望对初学者有所帮助。
废话不说了,下面进入正题,学习FPGA我主要经历了这么几个阶段:①、VHDL和Verilog语言的学习,熟悉VHDL和Verilog语言的各种语法。
②、FPGA的学习,熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c,AD,DA等)的设计,时序分析,硬件优化等,大家可以先从简单的做起,复杂的电路一定要把芯片资料读懂,上面的时序分析一定要看明白,然后才能设计正确驱动。
③、NiosII的学习,熟悉NiosII的开发流程,熟悉开发软件(SOPC,NiosII IDE),了解NiosII的基本结构,编写NiosII C语言程序,调试板子各模块功能。
NiosII软件调试要很费时间,大家要耐的住厌烦,如果对软件不熟悉会出现很多问题,自己遇到问题和解决问题的过程,也就是大家进步的过程,大家可以把NiosII内嵌的各种功能调试一遍,最后再移植C8051、uCOSII操作系统和uCLinux操作系统,估计你已经很熟悉了NiosII了。
先来说说第一个阶段,现在主要的硬件描述语言有VHDL,Verilog两种,现在Verilog用的人越来越多,因为容易上手(与C语言语法比较类似),也更灵活,现在的IC设计基本都用Verilog。
但是VHDL也有自己的优点,VHDL语言设计的程序很长,因为他本身语言比较严谨,在欧美一些国家还是比较喜欢VHDL语言。
所以我希望大家对两种语言应该都比较熟悉。
我们的开发板上都尽量把这两种语言进行完善。
其中关于VHDL语言和Verilog HDL语言资料书很多,如果还没有入门的话,可以买一本相对通俗易懂和简单的书来看,书籍我们在这就不推荐了,因为市面上关于这两种语言的书很多。
fpga工程师年终总结篇一:FPGA研发牛人心得总结FPGA研发之道FPGA是个什么玩意? FPGA是个什么玩意?首先来说:FPGA是一种器件。
其英文名 feild programable gate arry 。
很长,但不通俗。
通俗来说,是一种功能强大似乎无所不能的器件。
通常用于通信、络、图像处理、工业控制等不同领域的器件。
就像ARM、DSP等嵌入式器件一样,成为无数码农码工们情感倾泻而出的代码真正获得生命的地方。
只不过,一样的编程,却是不一样的思想。
嵌入式软件人员看到的是C。
而FPGA工程师看到是硬件描述语言,verilog或VHDL。
软件看到是函数、对象、重构。
FPGA工程师则是模块、流水、复用。
从现象上看,都是代码到下载程序再到硬件上运行。
不能只看现象而忽略本质。
FPGA 开发本质上是设计一颗IC,“**的身子,丫鬟的命”不是所有verilog/VHDL代码,都能获得青睐去流片成为真正的芯片,而更多的则成为运行在FPGA器件上,成为完成相同功能的替代品。
其实现的功能却一点也不逊色于百万身价流片的近亲。
从而成为独树一帜的行业。
FPGA开发的流程,是通过verilog/VHDL等硬件描述语言通过EDA工具编译、综合、布局布线成为下载文件,最终加载到FPGA器件中去,完成所实现的功能。
那硬件描述语言描述的是什么?这里描述的就是组合逻辑电路和时序逻辑电路。
组合逻辑电路就是大家所熟知的与门、或门、非门。
时序逻辑电路则是触发器。
数字芯片上绝大部分逻辑都是这两种逻辑实现的。
也就是基本上每个电子行业的人所学过的数字电路。
顺便说一下,感谢香农大师,在其硕士毕业论文就奠定了数字电路的的根基。
只不过在FPGA中,与或非的操作变成了查找表的操作。
于是所有的数字电路变成了查找表和寄存器,这就构成了FPGA的基础。
查找表负责逻辑实现,寄存器存储电路状态。
二者配合,双剑合璧,天衣无缝。
这是最初的FPGA的雏形。
现代FPGA内部出了查找表和寄存器之外,还有RAM块,用于存储大量的数据块,这是因为RAM块较寄存器来存储大量数据更能节省芯片实现的面积。
FPGA感悟自从接触和认识FPGA以后,自由电子科技坚定的选择了FPGA 器件作为我们创新和实现自身价值的承载平台,对此,我想从以下几个方面介绍一下。
1. 对FPGA的认识,为什么要选择FPGA现在的FPGA器件在电子行业中是一颗明星,这是一种正在不断采用新的半导体制造工艺,逻辑容量不断增加,应用领域不断拓展,器件成本不断下降的器件,FPGA厂商激烈的竞争使开发软件和方法不断的进步,是一个正在盘古开天时期的事物。
很多人对此的解释是FPGA拥有很大的灵活性,在半导体制造工艺的NRE不断增加、应用需求不断变更、品种要求多而数量要求少的现实情况下,FPGA是一个最佳选择,这正是现在FPGA厂商们宣传时耳目能详的陈词。
我们认为,FPGA在电子产业和信息产业上的地位并不是这么简单。
实际上如果通过我们对计算机发展的历史、软件发展历史的认识,可以推断FPGA器件是一方向性的创新,几千年以前我国的祖先们感悟了蕴涵在简单的阴、阳中的事理有了太极,阴阳可以生万物。
一百多年前的布尔代数使我们从数学上有了坚实的基础,从机械计算机到电子计算机的演变中,我们得到了冯.诺依曼型的程序存储类的计算机体系,并在当代发展为及至,极大的推动了人类社会的前进。
冯.诺依曼计算机体系是在CPU硬件的基础上加上千变万化的软件,软件的灵活性使计算机渗透到各行各业,在20世纪后半页演绎了气势恢弘的发展过程,造就了象比尔.盖茨那样的天才和巨富。
但我们要认识到在这个体系中,由一部分人从事低层硬件,CPU架构体系的设计,大部分应用工程师在相对固定的硬件系统上从事开发,这种模式在现在依然拥有无与伦比的活力和现实作用,在这里我提醒一点,在这个体系中,对大部分工程师来说,一半固定,硬件CPU是不可编程的,另一半灵活是可编程的(软件),很自然我们会想联想到如果两个部分都是可编程的那会是怎么一种情况呢?很好,现在有一种器件来了,这就是FPGA,它代表的就是硬件的编程。
FPGA学习心得学习fpga一个多月以来,完全从零开始学习,感觉自己学到的东西真不少,虽然还不是很熟练,不过也对fpga有了很好的了解。
以前一直没有想过要来总结些什么,是感觉自己对于fpga根本就像是一无所知一样,虽然天天在学,不过确实没有一个总体观念,学的东西太混乱也没有一个总体的框架。
到了今天终于觉得自己的学习已经小有成就了,虽然还是没有能够独立设计的自信。
在最初学习的时候最主要就是对于fpga结构的一个基本认识和对硬件描述语言verilog HDL语言的学习。
之所以选择学习fpga是因为在这一学期找工作中发现,现在很多公司都需要会一点fpga方面的知识,在笔试的时候也会偶尔遇到一些用HDL语言编程的试题。
现在很多硬件工程师已经不再是单纯的用传统的方法进行电路的设计,至少现在很多招聘的岗位当中不再是单纯的电路的设计了,很多都涉及到嵌入式和HDL语言。
Fpga现在正在以异常的速度发展,在08年全球金融危机的时候大多数行业都呈现在下滑的趋势,而fpga的厂商如xilinx和altera等公司的收入却呈现出增长的态势。
在我看来fpga必将是将来硬件工程师不可缺少的一项本领,这也就是我学习fpga的原因之一。
一、硬件描述语言:对于硬件描述语言(HDL)语言我选择的是和C语言类似的verilog HDL语言,虽然VHDL语言在很多方面优于verilog HDL语言,但是作为初学,还是先学习一个简单一点的语言,尽量先将所需要学习的东西过一遍,将来等时间允许的时候再去学习VHDL语言,在网上有看到现在出来了一个叫system verilog的语言,据说融合了verilog 和VHDL语言各自的优点,可能将来会成为行业统一的语言吧。
verilog HDL现阶段主要接触的就是对组合逻辑电路和时序电路的描述了。
所接触的程序中以always @ (*)模块居多,几乎是所见过模块的核心部分了,其实在学习这个语言上面也没有花太多的时间,因为有对C语言的学习,所以就先入为主了。
FPGA研发之道FPGA是个什么玩意FPGA是个什么玩意首先来说:FPGA是一种器件。
其英文名 feild programable gate arry 。
很长,但不通俗。
通俗来说,是一种功能强大似乎无所不能的器件。
通常用于通信、网络、图像处理、工业控制等不同领域的器件。
就像ARM、DSP等嵌入式器件一样,成为无数码农码工们情感倾泻而出的代码真正获得生命的地方。
只不过,一样的编程,却是不一样的思想。
嵌入式软件人员看到的是C。
而FPGA工程师看到是硬件描述语言,verilog或VHDL。
软件看到是函数、对象、重构。
FPGA工程师则是模块、流水、复用。
从现象上看,都是代码到下载程序再到硬件上运行。
不能只看现象而忽略本质。
FPGA 开发本质上是设计一颗IC,“**的身子,丫鬟的命”不是所有verilog/VHDL代码,都能获得青睐去流片成为真正的芯片,而更多的则成为运行在FPGA器件上,成为完成相同功能的替代品。
其实现的功能却一点也不逊色于百万身价流片的近亲。
从而成为独树一帜的行业。
FPGA开发的流程,是通过verilog/VHDL等硬件描述语言通过EDA 工具编译、综合、布局布线成为下载文件,最终加载到FPGA器件中去,完成所实现的功能。
那硬件描述语言描述的是什么这里描述的就是组合逻辑电路和时序逻辑电路。
组合逻辑电路就是大家所熟知的与门、或门、非门。
时序逻辑电路则是触发器。
数字芯片上绝大部分逻辑都是这两种逻辑实现的。
也就是基本上每个电子行业的人所学过的数字电路。
顺便说一下,感谢香农大师,在其硕士毕业论文<继电器与开关电路的符号分析>就奠定了数字电路的的根基。
只不过在FPGA中,与或非的操作变成了查找表的操作。
于是所有的数字电路变成了查找表和寄存器,这就构成了FPGA的基础。
查找表负责逻辑实现,寄存器存储电路状态。
二者配合,双剑合璧,天衣无缝。
这是最初的FPGA的雏形。
现代FPGA内部出了查找表和寄存器之外,还有RAM块,用于存储大量的数据块,这是因为RAM块较寄存器来存储大量数据更能节省芯片实现的面积。
FPGA内部的时序电路则需要时钟的输入,通常FPGA内部需要时钟种类较多,因此需要在片内产生所需的的相关的时钟,如不同频率,不同相位的时钟,因此时钟管理单元DCM/PLL也是必不可少的内部部件。
除此之外,FPGA内部还包括接口I/O,I/O分为普通I/O和高速I/O,高速I/O支持例如高速的SERDES,用于实现XAUI,PCIE等高速接口,这些接口动辄几Gbps到10Gbps以上。
此外种类多种多样的硬核IP也是各FPGA 厂商差异化竞争利器,例如POWERPC、ARM等硬核IP。
从而构成CPU+FPGA于一体的集可编程性和可重构的处理平台。
因此,相对来所,FPGA虽然发展有二三十年的历史,其基本架构一直不变不大。
回到问题开始的地方,FPGA的英文翻译过来是现场可编程门阵列。
这是相对ASIC来说的,ASIC的硬件也可看做是门阵列,但是其是非可编程的器件。
流片完成其功能就固化了,而FPGA的可编程性就在其能够重新下载配置文件,来改变其内在的功能,这就是其可编程性的由来。
从前端开发流程来说,FPGA和ASIC开发并无二至。
由于ASIC 开发一次性投入成本较高,FPGA无疑是一种经济的替代方案,用于实现的高速的数据并行处理。
如业务能够支撑大规模应用并且协议固化,则能够分摊成本的ASIC实现就有成本的优势。
FPGA作为一种器件,技术上主要垄断在少数大公司手中,那就是双巨头ALTERA和XILINX。
除此之外还有一些份额相对较小的公司,例如ACTEL和LATTICE。
不止是FPGA的硬件芯片,其配套的EDA工具技术壁垒更高。
因此相对于CPU来说,FPGA的国产化更不乐观,不过已经有国内的厂商来从事这一行业,例如国微和京微雅格等,也在一些细分市场上推出自己的FPGA产品。
FPGA和他那些小伙伴们(一)系统架构组成通常来讲,“一个好汉三个帮”,一个完整的嵌入式系统中由单独一个FPGA使用的情况较少。
通常由多个器件组合完成,例如由一个FPGA+CPU来构成。
通常为一个FPGA+ARM,ARM 负责软件配置管理,界面输入外设操作等操作,FPGA负责大数据量运算,可以看做CPU的专用协处理器来使用,也常会用于扩展外部接口。
常用的有ARM+FPGA,DSP+FPGA,或者网络处理器+FPGA等种种架构形式,这些架构形式构成整个高速嵌入式设备的处理形态。
不得不说的是,随着技术的进步,现在CPU中集成的单元也随之增加,例如TI的“达芬奇”架构的处理器内部通常由ARM+DSP构成。
同时异构的处理器形态业逐渐流行,如ARM9+ARM7的结构。
这类一个主要处理系统(ARM9)外带辅助处理系统(ARM7)的设计,同样成为现在处理器设计的流行方向。
主处理系统运行嵌入式操作系统,而辅助处理单元则专注某一些的专用领域的处理。
这些系统的应用减少了FPGA作为CPU协处理单元的领域。
因为毕竟FPGA相比ARM等流行嵌入式处理器价格要相对较高。
在这种情形下,FPGA的厂商似乎也感受到了压力,不约而同推出了带ARM硬核的FPGA,例如ALTERA的和XILINX的ZYNQ和ALTERA的SOC FPGA。
这是即是互相竞争的需要,也是同众多CPU厂商一掰手腕的杰总。
即使在这两种在趋势下,经典的处理器+FPGA的设计仍然可看做为高性能嵌入式系统的典型配置。
经典的处理器+FPGA的配置中有多种的架构形式,即多个处理器单元,可能是ARM,MIPS,或者DSP,FPGA也可能是多片的配置,具体架构形式于具体处理的业务相关和目标设备的定位也相关。
因为FPGA作为简单业务流大数据量的处理形态仍然是CPU无可比拟的优势,FPGA内部可以开发大量业务数据并行,从而实现高速的数据处理。
在实现高速处理方面,CPU的另一个发展趋势是多核,多核处理器也能处理大数据量的业务的并行,例如业界TERILA已推出64核的多核处理器,采用MIPS处理器,通过二维MASH网络连接在一起,形成NOC的结构。
在性能上已经和现有的高速FPGA的处理能力上不相上下。
但是多核处理器的不得不说的问题就是,同一业务流分配到多核处理上后,如需交互,例如访问同一资源,就会造成读写的缓存一致的问题,解决的这一问题的天然思路是加锁,即在变量访问上加自旋锁,但是带来的问题就是处理性能的急剧下降。
而FPGA无论并行处理和同一变量的访问,都可以变成工程师的设计水平的问题,没有原理性的挑战。
没有一种器件可以满足全人类的众多需求,因此不用担心FPGA没有用武之地。
必定是一系列产品的组合。
下面主要介绍一下FPGA可以作为现今热门场景的几种应用。
(1)网络存储产品,特别是现在的NAS,或者SAN设备上,其存储的时间、接口、安全性等都要求较高,而FPGA无论处理性能还是扩展接口的能力都使其在这一领域大有作为。
现在高端FPGA单片就可以扩展32个或者更多4G或者8G的FC接口。
并且其协议处理相对的固定,也使FPGA在这一领域有大量的可能应用。
(2)高速网络设备,现在高速网络设备10G、40/100G以太网设备领域,同样FPGA也是关键的处理部件。
特别是IPv6的商用化及大数据对于基础设施的高要求,都使这一领域的处理应用会逐渐广泛,这一领域通常是高速网络处理器(NP)+FPGA的典型架构。
(3)4G等通信设备,对于新一代通信基站的信号处理,FPGA+DSP阵列的架构就是绝配。
特别是在专用处理芯片面世之前,这样的架构可以保证新一代通信基础设施的迅速研发和部署。
没有完美的架构,只有合适的组合,各种芯片和架构都是为应用服务,互相的渗透是趋势,也是必然。
FPGA相对处理器的可编程领域,仍然属于小众(虽然人数也不少)。
但是正像一则笑话所说:大腿虽然比根命根子粗,但决没有命子重要。
这算开个玩笑。
FPGA 的实现为以后的芯片化留下了许多可能和想象空间,从而在应用大量爆发时通过芯片化来大幅降低成本,这这也正是其他可编程器件所不能比拟的。
FPGA和他那些小伙伴们(二)器件互联系统架构确定,下一步就是FPGA与各组成器件之间互联的问题了。
通常来说,CPU和FPGA 的互联接口,主要取决两个要素:(1)CPU所支持的接口。
(2)交互的业务。
通常来说,FPGA一般支持与CPU连接的数字接口,其常用的有EMIF,PCI,PCI-E,UPP,网口(MII/GMII/RGMII),DDR等接口。
作为总线类接口,FPGA通常作为从设备与CPU连接,CPU作为主设备通过访问直接映射的地址对FPGA进行访问。
根据是否有时钟同步,通常总线访问分为同步或异步的总线,根据CPU外部总线协议有所不同,但数据、地址、控制信号基本是总线访问类型中总线信号所不能省略的。
CPU手册中会对信号定义和时序控制有着详细的说明,FPGA需要根据这些详细说明来实现相应的逻辑。
同时CPU还可以对访问时序进行设置,比如最快时钟,甚至所需的最小建立时间和保持时间,这些一般CPU都可以进行设置,而这些具体参数,不仅影响FPGA的实现,也决定总线访问的速度和效率。
对于同步总线,只需要根据输入时钟进行采样处理即可,但对于异步总线,则需要的对进入的控制信号进行同步化处理,通常处理方式是寄存两拍,去掉毛刺。
因此用于采样的时钟就与CPU所设置的总线参数相关,如采样时钟较低,等控制信号稳定后在译码后输出,一个总线操作周期的时间就会相对较长,其处理的效率也相对较低;假如采样时钟过快,则对关键路径又是一个挑战,因此合理设定采样频率,便于接口的移植并接口的效率是设计的关键点和平衡点。
对于总线型的访问来说,数据信号通常为三态信号,用于输入和输出。
这种设计的目的是为了减少外部连线的数量。
因为数据信号相对较多一般为8/16/32位数据总线。
总线的访问的优势是直接映射到系统的地址区间,访问较为直观。
但相对传输速率不高,通常在几十到100Mbps以下。
这种原因的造成主要为以下因素(1)受制总线访问的间隔,总线操作周期等因素,总线访问间隔即两次访问之间总线空闲的时间,而总线操作周期为从发起到相应的时间。
(2)不支持双向传输,并且FPGA需主动发起对CPU操作时,一般只有发起CPU的中断处理一种方式。
这种总线型操作特点,使其可以用作系统的管理操作,例如FPGA内部寄存器配置,运行过程中所需参数配置,以及数据流量较小的信息交互等操作。
这些操作数据量和所需带宽适中,可以应对普通的嵌入式系统的处理需求。
对于大数据流量的数据交互,一般采用专用的总线交互,其特点是,支持双向传输,总线传输速率较快,例如GMII/RGMII、Upp、专用LVDS接口,及SERDES接口。