FPGA如何入门,看了Xilinx开发教程还是觉得很吃力

FPGA如何入门,看了Xilinx开发教程还是觉得很吃力,第1张

给你一条思路。首先FPGA的特点是易上手,不可能精通。很多搞了十几年的FPGA工程师还不是遇到项目就卡壳。我见过一个华为工作了七年的做FPGA的,项目搞不出来辞职的(现在是我的顶头上司),所以想搞FPGA还得沉得住心,吃得了苦。然后自学就刚开始学语法,学个两周足以,语法实在太简单了。然后开始买开发板,跟着例程跑程序,这个阶段至少掌握整个FPGA开发流程和熟悉软件,尤其是在线调试,建议VIVADO,因为这玩意还是有点复杂的,工作中要是让你调接口你连这软件怎么抓信号都不会那可就尴尬了。至于SOC这些就不要学了,学了也没用,工作中基本上用不到。然后软件熟悉的差不多就开始自己写代码,这个阶段最主要是注意形成自己的代码风格,多看代码多写代码多仿真,要是有实际项目的代码就更好了,学习人家高手的代码风格(建议别用开发板的代码学习,写的太搓了),然后多搜一些异步设计的规范等等资料,等你知道给个你几个时钟你该用哪个时钟写哪个代码的时候开始玩一些实际项目的东西,这个时候开始有选择了,一般FPGA就是两个方向-接口与算法。这个阶段出去找工作吧,剩下的都是工作中才会理解的东西。算法门槛高,我就写过中频采集板的代码,其他的也不懂,接口的话开始按照人家招聘公司的要求学习,一般要求你要懂PCIE,DDR这些高速接口,高速接口无非是IP核例化和控制,看起来难实则也难(不过是工作中难,要是学习这玩意是啥的话还是不那么难的)。FPGA这玩意最忌讳的是手低眼高,也是很多学FPGA最容易犯的错,觉得这玩意就那么一回事。剩下的路就该你自己走了,FPGA是一个相对比较偏的行业,网上资源不太好搜集,信息收集也是一个需要学会的,但一般都是从人家赛家的官网下载的,所以英语底子得扎实。至于数电就不用再看了,本科基础足够了,心中有电路可不是指的是那种触发器堆的电路,而是指的是数据流的传输与时钟布局的大局观以及整个项目的大局观,所以看数电是没用滴。不过对于信号处理的有些基础知识,至少要知道啥是奈奎斯特采样,啥是中频采样,啥是FIR,FFT,DDC,UDC。

学FPGA不是那么难的事!对有电路经验的人来说更容易上手。FPGA本身是逻辑电路,为了拓展应用和适应系统发展而集成了很多系统级的功能,如处理器、高速串行接口等等。个人认为学FPGA难在两点,一个是语言,如果之前没接触过VHDL/VERILOG,需要一些时间的;第二个是内嵌的处理器和其他IP核的应用,这部分功能需要某些方面的专业知识。其他纯逻辑的应用很简单,可以先从这部分入手,循序渐进。
上手最快可以先从数据手册和开发系统入手。定位一个纯逻辑的FPGA系列和较易入手的开放系统,先把流程跑通,慢慢再去研究内嵌IP核的应用。

你得知道自己为什么学习FPGA,一楼的看法是把FPGA作为一个可编辑的接口,这是现在企业应用的一大部分,而FPGA有很大部分是用来做通信应用的。如果你和一楼一样只是把FPGA当做可编辑的接口,而且再加上如果你倾向于功能的实现,那么这部分的FPGA是比较简单的,楼上的看法基本正确,就是看看目标接口的数据手册,满足时序的要求。FPGA只是一个工具,一个算法实现的强大途径。你的基础课程已经够了,数电的内容基本满足了,学过51估计你也学过一些接口的编程了,懂得一些器件的时序了,基础都够了。不知道你是什么专业的,估计也是通信的吧,如果是自动化的话,现在企业中有部分是FPGA和DSP结合应用。如果是通信的话,可以加把力好好学学,通信原理上的理论可以在这上面实现,像我们学校在大三下会有用FPGA实现通信原理的课程设计,比较有用。板子我个人觉得是得买的,原因如下:
1、你学的是硬件而不是软件,单靠仿真毕竟不够
2、虽说modelsim仿真到后期也得学,但是入门就开始学会比较烦人,比较分心,而且缺少成就感。
FPGA有几大厂家,多种序列,从高级到低级产品链很广,价格差非常多,贵的到数万,便宜的几十就够,我自己没买过板子,不知道具体价格。建议你去和熟悉的老师要板子,跟着老师做项目,或者以竞赛之类的搞到板子。如果没门道,去买的话,多了解了解,以自身的需求来买板子。

FPGA在国内主要是Xilinx和Altera两家。
学习FPGA最佳的知识获取途径是相关厂商的官方网站(自家孩子自己最了解)。
这两家都有大学计划和相关的培训材料,仔细找,能发现很多东东。
资料大多是英文,开始很难啃,要坚持住。
我学的是Xilinx的FPGA(FPGA的发明者)
DSP是数字信号处理器的简称,相当于一个为数字信号处理应用优化的CPU。
VHDL和verilog等语言都是HDL语言,是FPGA的编程语言,当然要学。你们老师的意思可能是让你先从FPGA的结构入手了解。
FPGA的专业基础课就是EDA。

任何一个硬件工程师对FPGA都不会陌生,就好比C语言对于软件工程师来说是必修课程一样,只要是电子相关专业的学生,都要学习可编程逻辑这门课程。 FPGA的英文全称是Field Programmable Gate Array,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。
从表象看,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开发快速入门·技巧·实例》
加油吧!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13205573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-20
下一篇 2023-06-20

发表评论

登录后才能评论

评论列表(0条)

保存