如何快速掌握FPGA?
第一步:学习了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程。很多开发板的程序写的很烂,我也做过一段时间的开发板设计,我觉得很大程度上,开发板在误人子弟。不过原厂提供的正品开发板,代码很优秀的,可以借鉴。只有了解了FPGA内部的结构才能明白为什么写Verilog和写C整体思路是不一样的。
第二步:掌握FPGA设计的流程。了解每一步在做什么,为什么要那么做。很多人都是不就是那几步吗,有什么奇怪的?呵呵,我想至少有一半以上的人不知道synthesize和traslate的区别吧。
了解了FPGA的结构和设计流程才有可能知道怎么去优化设计,提高速度,减少资源,不要急躁,不要去在为选择什么语言和选择哪个公司的芯片上下功夫。语言只是一个表达的方式,重要的是你的思维,没有一个好的指导思想,语言用得再好,不过是个懂语言的人。
第三步:开始学习代码了。我建议要学代码的人都去Altera或Xilinx的网站上下原厂工程师的代码学习。不要一开始就走入误区。
现在很多FPGA工程师,没找到合适,我觉得很多人从开始的时候就误入歧途了,对新手学习FPGA设计我也说一点看法吧。我认为要从基础开始做,基础牢,才有成为高手的可能。
我觉得FPGA学习有以下几步必须要走:
第一步:学习了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程。很多开发板的程序写的很烂,我也做过一段时间的开发板设计,我觉得很大程度上,开发板在误人子弟。不过原厂提供的正品开发板,代码很优秀的,可以借鉴。只有了解了FPGA内部的结构才能明白为什么写Verilog和写C整体思路是不一样的。
第三步:开始学习代码了。我建议要学代码的人都去Altera或Xilinx的网站上下原厂工程师的代码学习。不要一开始就走入误区。
做FPGA主要是要有电路的思想,作为初学者,往往对器件可能不是熟悉,那么应该对于数字电路的知识很熟悉吧,FPGA中是由触发器和查找表以及互联线等基本结构组成的,其实在我们在代码里面能够看到的就是与非门以及触发器,不要把verilog和c语言等同起来,根本就是不同的东西,没有什么可比性,在写一句程序的时候应该想到出来的是一个什么样的电路,计数器选择器 三态门等等,理解时序,逻辑是一拍一拍的东西,在设计初期想的不是很清楚的时候可以画画时序图,这样思路会更加的清晰,还有就是仿真很重要,不要写完程序就去往FPGA中去加载,首先要仿真,尤其是对比较大型一点的程序,想像自己是在做asic,是没有二次机会的,所以一定要把仿真做好,还有很多新手对于语言的学习不知道选vhdl好还是verilog好,个人偏好verilog,当然不是说vhdl不好,反正写出来的都是电路,那当然就不要在语言的语法上面花太多的功夫了,verilog 言简意赅assign always case if else 掌握这些几乎可以写出90%的电路了,上面是我对FPGA学习的一些愚见,希望对大家有所帮助。
从表象看,Programmable这个单词确实能够很好的描述FPGA的特点,但这也使得很多初学者走了不少弯路。一说到编程,大家不免联想到 coding,因为软件编程的思想对工程师来说已经是根深蒂固了。因此,很多初学者都会问一个相同的问题,两种硬件编程语言VHDL和Verilog,应该学哪个?即使明确了要学习哪种设计语言,也会一头扎进浩瀚的语法中,走向歧途。有些初学者写了大量的代码,在Demo板上跑了n个试验,可还是觉得不懂 FPGA,甚至搞不清楚它和单片机的区别。这是为什么?其实,这都归结一个原因,就是被“可编程”这3个字给迷惑了,也就是说,没有弄清楚FPGA的本质是什么。因此,对于FPGA的学习也就不着法门,事倍功半,浪费了不少时间,却仍然达不到效果。
FPGA是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。因此,从底层来看,FPGA还是属于集成电路的范畴。就当前的技术而言,使用FPGA开发项目还是全部基于数字电路设计的,所以,FPGA的“可编程”也就是实现不同的数字电路逻辑。这与所谓的软件编程有着本质的区别!归根结底,FPGA设计就是电路设计,因此,对于每个FPGA工程师来说,在做设计时必须在脑中有电路的模样,这很重要!那么,到底该如何有效地学习FPGA呢?其实,很简单,只要从以下7点着手,循序渐进,日积月累,就完全能够对FPGA设计游刃有余。
1. 首先,必须了解FPGA的结构和性能。不同厂家,不同系列的FPGA芯片都有不同的结构和性能,但是万变不离其中。刚开始,从掌握几款典型的高端芯片开始,例如Altera公司的Stratix III和Xilinx公司的Virtex 5。之后,再去了解其它系列的芯片就很容易了。至于Lattice和Actel公司的芯片,当使用时再了解也不迟,因为学习主流的东西才会更加有效!许多有关FPGA的教科书都会以几款常用的芯片为例,讲述FPGA的基本结构和原理。初学者看了后,总觉得过于抽象,有点不知所云的感觉。因此,为了深刻理解 FPGA,必须要有扎实的数字电路基础!在数字电路里,最基本的就是逻辑和时序。工程师必须明白FPGA内部逻辑结构和数字电路基本电路结构的关系。例如,任何4个输入信号的组合逻辑都可以通过FPGA提供的4输入LUT来实现。如果使用Xilinx的芯片,移位寄存器既可以通过多个触发器级联实现,也可以通过LUT来实现。通常,初学者可以设计出正确的逻辑,但却很容易忽略时序。在I/O口的设计中,与时序相关的缺陷对于产品是致命的,会影响产品的可靠性。因此,在掌握了结构后,还必须关注芯片的一些重要时序参数,例如I/O口时钟的建立时间、保持时间和从触发器到输出的延迟时间,以及芯片内部工作时钟的最高频率等等。只有充分掌握了所使用芯片的结构和性能,才能设计出一个合理的系统,才能保证FPGA的设计可靠稳定。FPGA厂商提供的大量文档是一个不错的学习资料。
2. FPGA既然是“可编程”,自然离不开编程语言。其实,早期的工程师大多使用原理图输入方式进行逻辑设计,这是一种更接近于电路设计的设计方式。这种设计方式对设计者要求较高,而且也不利于移植和维护,因此VHDL和Verilog才渐渐流行起来。这两种语言,无所谓孰优孰劣,只不过Verilog发展的比VHDL好,而且和将来可能一统天下的SystemVerilog比较接轨。它们都是硬件描述语言。既然叫硬件描述语言,自然是和软件世界里的编程不一样,所以,初学者不能把它当作软件编程语言来学习,否则就会舍本逐末。如果仅仅只是从事FPGA逻辑设计和做简单的功能仿真,只需学习最简单的语法就够了。那些用于写验证脚本的语法,完全不用学,基本用不上。语言仅仅只是一个工具,尤其在硬件设计里,代码写得漂不漂亮,并不重要,最关键的是设计思想。记住,FPGA工程师是在设计电路,而不是在“编程”!
3. 很多工程师会谈到算法的重要性,认为必须懂得很多算法。没错,好的算法对于设计来说犹如利器一般。可是,研究算法和如何实现算法是两个不同的概念,研究算法是在做数学题,实现算法才是工程师的职责。这里并不是说FPGA工程师不用去研究算法,而是强调职责所在。不同的算法,我们对其原理的研究和理解的要求也是不同的。例如8B/10B编码,只要你懂得在哪里需要使用它就够了,现成的IP Core可以直接调用。但是,诸如FEC编解码这样的算法,则只有了解了基本原理后才可能懂得如何实现。对于算法,FPGA工程师的重点就是在于“如何实现”!。另外,算法之外,逻辑设计里常用的设计方法必须懂得,例如,乒乓操作、流水线设计和分时复用等等。还有常用的逻辑模块,如异步FIFO、状态机,这些其实都是数字电路里最基础的东西,但是对于初学者来说,在做FPGA设计时未必会正确的使用。
4. FPGA设计必须有一个好的设计流程来支撑。代码写完后,花大量时间做完善的功能仿真和验证是很有必要的。可是一些工程师并不重视仿真和验证,而是迫不及待的上板调试。碰到BUG后就在代码上修修补补,运气好的话,BUG表面上是解决了,可真正深层次的原因却未必发现,给产品留下了隐患。一个好的设计流程要求大多数BUG在前期工作中必须解决掉,功能仿真和验证则是一个很有效也很重要的步骤。除了仿真验证,综合和布线也必须重视,这要求我们必须仔细浏览编译报告和时序报告,因为,许多时序问题都能通过报告反映出来。有时候,一些工程师碰到时序问题,仅仅做时钟反相来调整数据和时钟的相位关系,或者修改综合和布线的参数,仍无法解决问题。尤其是在用了高速时钟的设计里,大多数情况,我们只有修改代码里的逻辑才能满足设计的时序要求。这些也只有仔细分析了报告后,才能对症下药。另外,对于大多数同步逻辑设计来说,时序仿真是没有必要的,这一步完全可以省略。
5. 现阶段,FPGA发展的三大方向就是SOC,高速I/O和DSP。在有限的时间里,选择一个领域进行主攻是有必要的,只有明确了目标,才会更加投入。 SOC设计要求设计者对软件编程、CPU原理甚至是操作系统比较了解才行,因为SOC就是一个软硬件结合的系统。高速I/O设计则要求设计者掌握许多模拟电路的基本知识以及一些常用的通信协议,例如,SDH、GbE、PCI-E等等。FPGA在DSP领域的使用是近几年兴起的一个发展方向。FPGA由于其内在的并行特性,能以很高的效率实现DSP算法中计算量较大的模块,非常适合视频和图像处理等对DSP性能要求越来越高的新兴应用,设计者需要掌握数字信号处理常用算法。这3个方向完全不同,切勿囫囵吞枣,一切通吃!“术业有专功”,资深的高级工程师也很难在多个方向都取得成就。当然,若能在一个领域有较深的研究,同时,对另外两个领域也有一定的了解,那就更好了。
6. 一个优秀的FPGA工程师,必须做到“一专多能”。所谓的“一专”当然是指在FPGA设计领域的专业深度,而“多能”则是要求工程师对其它专业领域也要有所了解和掌握。例如,对于设计一个SOC系统来说,C语言就必须学习,否则对于片上系统的架构就可能不合理。另外,对于设计高速I/O口的工程师来说,电路板原理设计和PCB设计则需要有所了解。只有掌握了预加重、均衡以及阻抗匹配等这些与模拟电路相关的概念,才可能在设计和调试中得心应手。
7. 最后一点,也是最难的一点,这也是迈向高级工程师的关键,就是FPGA的设计需要一个好的系统架构方案和合理的模块化分。这有助于FPGA的调试和维护,也便于多人共同开发,尤其是在使用大规模FPGA时,这也就是常说的Top-Down设计方式。把一个庞大的、复杂的设计化分成若干个小模块,而且层次要分明,不能扁平化,这需要设计者对设计必须有全面深刻的理解。一个杂乱无序的设计对于后期的维护是灾难性的,尤其是对于接手者来说,若要修改某个逻辑,可以说是苦不堪言。从这一点看,初学者的问题都可以在这里找到答案。FPGA学什么?就是学习系统级的电路设计。所以,FPGA工程师的发展方向就是系统工程师。
以上7点若能有深刻理解,则就能看清FPGA的本质了。市场的瞬息变化,要求电子产品必须对市场具有高敏感性,产品从方案设计到市场投放的时间越来越短,FPGA在其中功不可没。另外,在面对Cost Down时,FPGA也起着不可或缺的作用。在当今时代,FPGA已经在通信、数据处理、网络、仪器、工业控制、军事和航空航天等众多领域得到了广泛应用。随着功耗和成本的进一步降低,FPGA还将进入更多的应用领域,相信FPGA工程师也必将会有一个更加广阔的施展空间。
推荐一本书《基于VHDL的FPGA开发快速入门·技巧·实例》
加油吧!
FPGA工程师有前途吗?
有前途,fpga的话是属于硬件工程师之类的,这个工程师的话,个人觉得是靠年龄才能够成长的。年龄越大的话越吃香。中国每年对于FPGA设计人才的需求缺口巨大,FPGA设计人才的薪水也是行业内最高的。目前,美国已有FPGA人才40多万,中国台湾地区也有7万多,而中国内地仅有1万左右,可见中国渴望有更多的FPGA人才...
什么是FPGA?FPGA是什么意思
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA工作原理FPGA采用了逻辑单元阵列LCA(Logic ...
fpga应用领域(fpga设计技术与应用)
你做什么行业的产品就要掌握什么行业的一系列专业课程,和一种编程语言-硬件描述语言。FPGA是现场可编程门阵列的简称,简单来说是一种逻辑数字电路设计的方法。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA学习到什么境界就算是学好了?
这个好的评判也有好多标准的。1)FPGA首先是逻辑电路,你能熟练地拿它来实现任何可以实现的逻辑电路,这就是一个好。这里面包括熟悉芯片的结构,里面每部分功能块的使用。熟悉开发环境,里面的功能,熟悉第三方提供的IP核。能把FPGA的性能发挥到极致,利用约束提高设计的性能等等。如果有一个最好的话,...
我是一名FPGA的初学者,想自己做开发板,想请教各位高手什么样的FPGA芯...
买一块EP2C8的芯片,一块电源芯片,一块2M的nor flash,一块16MB的sdram,epcs4芯片一块,再加一块max232芯片可以实现电脑与fpga的串行通信,加个8位数码管就可以显示数字,其他的就要看你的用途了
FPGA从事的工作是什么啊?
FPGA软件工程师主要负责一些相关的算法,并以软件代码加以实现,你做什么行业的产品就要掌握什么行业的一系列专业课程,和一种编程语言(V\/VHDL)-硬件描述语言。FPGA(Field-Programmable Gate Array)是现场可编程门阵列的简称,简单来说是一种逻辑数字电路设计的方法。它是作为专用集成电路(ASIC)领域中的...
fpga属于前端还是后端
FPGA (Field-Programmable Gate Array)属于前端。原因是FPGA是一种可编程逻辑设备,它提供了一种用于实现数字电路的可编程硬件平台。在设计FPGA时,需要进行逻辑综合、布局布线和时序优化等前端设计工作。这些工作主要包括将设计描述转化为逻辑门级的电路网表、进行布局布线来确定电路中各个逻辑元件的位置和互连...
fpga工程师前景如何?
随着物联网、人工智能等技术的发展,FPGA工程师的前景也在不断拓展。例如,FPGA技术在边缘计算和深度学习等领域有广泛应用,因此FPGA工程师在这些领域也会有更多机会。此外,FPGA技术的不断发展也为FPGA工程师提供了不断学习和进步的机会。FPGA工程师需要不断跟进FPGA技术的新发展,掌握新的设计工具和开发...
FPGA高端项目:国产高云系列FPGA纯verilog图像缩放工程解决方案 提供3...
国产高云FPGA技术的巅峰之作,为您呈现纯Verilog图像缩放的高端解决方案。此方案包括3套精心设计的工程源码,分别是工程15、16和17,分别对应于不缩放、缩小和放大操作,旨在无缝融入您的项目和设计流程。工程15: 简洁明了,专为展示模块用法打造,让您快速上手高云FPGA的图像处理技术,无需缩放,直接展示...
FPGA行业有无相关的高性价比证书?
没有,fpga只是工具,你还需要一个扎实的专业背景,比如通信算法,信号处理,图像处理。FPGA,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限...
禾侦保心: 现在很多FPGA工程师,没找到合适,我觉得很多人从开始的时候就误入歧途了,对新手学习FPGA设计我也说一点看法吧.我认为要从基础开始做,基础牢,才有成为高手的可能.我觉得FPGA学习有以下几步必须要走:第一步:学习了解...
松桃苗族自治县15884826969: 如何学习FPGA - ?
禾侦保心: 掌握FPGA可以找到一份很好的工作,对于有经验的工作人员,使用FPGA可以让设计变得非常有灵活性.掌握了FPGA设计,单板硬件设计就非常容易(不是系统设计),特别是上大学时如同天书的逻辑时序图,看起来就...
松桃苗族自治县15884826969: 怎样快速学习FPGA??
禾侦保心: 一,学好数字电路基础,当然模拟电路也要懂一些二,夏宇闻得verilog书籍学习一遍三,用些简单的工具进行练习,设置输入观察波形输出四,看看alter,xilinx等官方的一些知识,慢慢进阶五,实际工程经验,要求式样开始,外部设计,基本设计,rtl,测试,implement,综合,布局布线,时序仿真等等..六,同时掌握一些协议,各个领域,有网络,图像等等..反正,入门学个verilog语言还是很容易,到后面感觉越来越难..我也迷茫当中..
松桃苗族自治县15884826969: 求助:FPGA的学习策略 - ?
禾侦保心: 怎么学习FPGA FPGA学习的好方法 FPGA入门却有一定难度,因为它不像软件设计,只要有一台计算机,几乎就可以完成所有的设计.FPGA设计与硬件直接相关,需要实实在在的调试仪器,譬如示波器等.这些硬件设备一般比较昂贵,这就...
松桃苗族自治县15884826969: fpga怎么入门比较好呢,希望能够推荐几本好的书..谢谢 - ?
禾侦保心: 首先你要对数字电路的知识有了解,然后选择一门硬件描述语言VHDL或者VERILOG,然后找一本EDA技术的书籍,从最简单点亮一个Led开始学习,最好有一个fpga的开发板,程序调试好后,下载到开发板上验证.最后能综合的完成一个课程设计,然后基本上就入门了.FPGA比CPLD更高级的版本,你就这么理解吧
松桃苗族自治县15884826969: 如何短期内学好FPGA(通信方向的),(没有基础)应该看什么书最快捷有效? - ?
禾侦保心: 首先是 verilog 语言.然后通信时有线h还是无线 如果是有线主要是报文转发.有千兆以太网,万兆以太网,XAUI,PCIE ,SPI4.2,等接口.如果是无线,那就更多了,主要是数字信号处理,倒是有本书 无线通信的MATLAB和FPGA实现
松桃苗族自治县15884826969: 怎么学好FPGA - ?
禾侦保心: 学好verilog编程,多实践,最好自己有块开发板做实验.数字电路是基础,其中触发器和寄存器的原理一定要弄清楚,最重要的是对逻辑电平的把握.
松桃苗族自治县15884826969: FPGA数字信号处理,怎么自学?(信号处理工程师进,新手麻烦和我一起等待答案) - ?
禾侦保心: 本人研究生,现在在上数字信号处理的课,老师留的作业一般都是结合着matlab在做的.可以学一学matlab,你编程基础那么好,肯定很容易上手的. 貌似你一直在做实际的东西,这方面我确实是不懂,一直都是在上学学理论...其实数字信号处理需要的数学并不是很复杂,拉普拉斯、傅里叶、z变换之间都是有很紧密的关系的,别看见公式就发毛,耐心的看下去,肯定能看懂的. 感觉数字信号处理主要工作就是在分析频谱,进而设计滤波器滤波,几种变换都是用来辅助分析信号在频域下情况的.我学这门课的成就感来自于matlab做出来的图...
松桃苗族自治县15884826969: 自学单片机,怎么学比较快?高手指教. - ?
禾侦保心: 自学单片机需要数字电路 模拟电路 特别是数字电路当然最好有些汇编语言的基础,不过没有也没有关系,自学单片机需要的重在不断实践,调试程序,读程序,分析程序,最后才能编制程序, 另外自学单片机首先要掌握单片机的 硬件的 所有资...
松桃苗族自治县15884826969: 如何快速上手ARM?ARM和FPGA哪个就业前景好? - ?
禾侦保心: 单片机开发很大一块已经用ARM来做,尽管8位机、16位机因为廉价还有一席之地,但是SoC工程基本都基于32位单片机, 基本逻辑开发,还在坚持用54、74系列器件的已经不多了,相当多的人已经转向CPLD, FPGA+软核很多情况下性能已经...