荐读:如何学习FPGA?为什么你会觉得FPGA难学?

FPGA学习交流 ? 2018-05-22 10:43 ? 次阅读

美高梅官网,金沙网投领导者,金沙网投网站,金沙网投开户 www.tongshi-cn.com       大家好。又到了每日学习的时候了,近期很多人问我该如何去学FPGA,那么今天咱们就来聊一聊。        

  有人问:本人零基础,想学fpga,求有经验的人说说,我应该从哪入手,应该看什么教程,应该用什么学习板和开发板,用到什么书等等,希望有经验的好心人能够给我一些引导。

  如果想速成,那就上网看视频吧,这样主要是面对应用的,一个小时内让你的板子运行起来。早期起来的快,活学活用,就是后期没有系统理论支持,会有些吃力,特别是大项目那完全是个悲剧。国内做的可以的,我知道的就是周立功了,艾米电子也可以吧。这两家都有学习板,不过后者的教程抄袭的前者的。前者功底深厚些,资金不紧张就买前者吧。速成的话,数电书一定一定必备,边看边学比较好。其余的书可以适量买点。

  这么多,其实只要有兴趣,慢慢学,入门也不难,板子就去网购吧,我去华强北逛了好多次了,都没什么好板子。网购大把的!

  先总结几点

  1)看代码,建模型

  只有在脑海中建立了一个个逻辑模型,理解FPGA内部逻辑结构实现的基础,才能明白为什么写Verilog和写C整体思路是不一样的,才能理解顺序执行语言和并行执行语言的设计方法上的差异。在看到一段简单程序的时候应该想到是什么样的功能电路。

  2)用数学思维来简化设计逻辑

  学习FPGA不仅逻辑思维很重要,好的数学思维也能让你的设计化繁为简,所以啊,那些看见高数就头疼的童鞋需要重视一下这门课哦。举个简单的例子,比如有两个32bit的数据X[31:0]与Y[31:0]相乘。当然,无论Altera还是Xilinx都有现成的乘法器IP核可以调用,这也是最简单的方法,但是两个32bit的乘法器将耗费大量的资源。那么有没有节省资源,又不太复杂的方式来实现呢?我们可以稍做修改:

  将X[31:0]拆成两部分X1[15:0]和X2[15:0],令X1[15:0]=X[31:16],X2[15:0]=X[15:0],则X1左移16位后与X2相加可以得到X;同样将Y[31:0]拆成两部分Y1[15:0]和Y2[15:0],令 Y1[15:0]=Y[31:16],Y2[15:0]=Y[15:0],则Y1左移16位后与Y2相加可以得到Y;则X与Y的相乘可以转化为X1和X2 分别与Y1和Y2相乘,这样一个32bit*32bit的乘法运算转换成了四个16bit*16bit的乘法运算和三个32bit的加法运算。转换后的占用资源将会减少很多,有兴趣的童鞋,不妨综合一下看看,看看两者差多少。

  3)时钟与触发器的关系

  “时钟是时序电路的控制者”这句话太经典了,可以说是FPGA设计的圣言。FPGA的设计主要是以时序电路为主,因为组合逻辑电路再怎么复杂也变不出太多花样,理解起来也不没太多困难。但是时序电路就不同了,它的所有动作都是在时钟一拍一拍的节奏下转变触发,可以说时钟就是整个电路的控制者,控制不好,电路功能就会混乱。

  打个比方,时钟就相当于人体的心脏,它每一次的跳动就是触发一个 CLK,向身体的各个器官供血,维持着机体的正常运作,每一个器官体统正常工作少不了组织细胞的构成,那么触发器就可以比作基本单元组织细胞。时序逻辑电路的时钟是控制时序逻辑电路状态转换的“发动机”,没有它时序逻辑电路就不能正常工作,因为时序逻辑电路主要是利用触发器存储电路的状态,而触发器状态变换需要时钟的上升或下降沿!由此可见时钟在时序电路中的核心作用!

  最后简单说一下体会吧,归结起来就多实践、多思考、多问。实践出真知,看100遍别人的方案不如自己去实践一下。实践的动力一方面来自兴趣,一方面来自压力,我个人觉得后者更重要。有需求会容易形成压力,也就是说最好能在实际的项目开发中锻炼,而不是为了学习而学习。在实践的过程中要多思考,多想想问题出现的原因,问题解决后要多问几个为什么,这也是经验积累的过程,如果有写项目日志的习惯更好,把问题及原因、解决的办法都写进去。最后还要多问,遇到问题思索后还得不到解决就要问了,毕竟个人的力量是有限的,问同学同事、问搜索引擎、问网友都可以,一篇文章、朋友们的点拨都可能帮助自己快速解决问题。

  为什么大量的人会觉得FPGA难学?

  1、不熟悉FPGA的内部结构,不了解可编程逻辑器件的基本原理。

  FPGA为什么是可以编程的?恐怕很多菜鸟不知道,他们也不想知道。因为他们觉得这是无关紧要的。他们潜意识的认为可编程嘛,肯定就是像写软件一样啦。软件编程的思想根深蒂固,看到Verilog或者VHDL就像看到C语言或者其它软件编程语言一样。一条条的读,一条条的分析。如果这些菜鸟们始终拒绝去了解为什么FPGA是可以编程的,不去了解FPGA的内部结构,要想学会FPGA 恐怕是天方夜谭。虽然现在EDA软件已经非常先进,像写软件那样照猫画虎也能综合出点东西,但也许只有天知道EDA软件最后综合出来的到底是什么。也许点个灯,跑个马还行。这样就是为什么很多菜鸟学了N久以后依然是一个菜鸟的原因。那么FPGA为什么是可以“编程”的呢?首先来了解一下什么叫“程”。启示 “程”只不过是一堆具有一定含义的01编码而已。编程,其实就是编写这些01编码。只不过我们现在有了很多开发工具运算或者是其它操作。所以软件是一条一条的,通常都不是直接编写这些01编码,而是以高级语言的形式来编写,最后由开发工具转换为这种01编码而已。对于软件编程而言,处理器会有一个专门的译码电路逐条把这些01编码翻译为各种控制信号,然后控制其内部的电路完成一个个的读,因为软件的操作是一步一步完成的。而FPGA的可编程,本质也是依靠这些01编码实现其功能的改变,但不同的是FPGA之所以可以完成不同的功能,不是依靠像软件那样将01编码翻译出来再去控制一个运算电路,FPGA里面没有这些东西。FPGA内部主要三块:可编程的逻辑单元、可编程的连线和可编程的IO?????杀喑痰穆呒ピ鞘裁??其基本结构某种存储器(SRAM、 FLASH等)制成的4输入或6输入1输出地“真值表”加上一个D触发器构成。任何一个4输入1输出组合逻辑电路,都有一张对应的“真值表”,同样的如果用这么一个存储器制成的4输入1输出地“真值表”,只需要修改其“真值表”内部值就可以等效出任意4输入1输出的组合逻辑。这些“真值表”内部值是什么?就是那些01编码而已。如果要实现时序逻辑电路怎么办?这不又D触发器嘛,任何的时序逻辑都可以转换为组合逻辑+D触发器来完成。但这毕竟只实现了4输入1输出的逻辑电路而已,通常逻辑电路的规模那是相当的大哦。那怎么办呢?这个时候就需要用到可编程连线了。在这些连线上有很多用存储器控制的链接点,通过改写对应存储器的值就可以确定哪些线是连上的而哪些线是断开的。这就可以把很多可编程逻辑单元组合起来形成大型的逻辑电路。最后就是可编程的IO,这其实是FPGA作为芯片级使用必须要注意的。任何芯片都必然有输入引脚和输出引脚。有可编程的IO可以任意的定义某个非专用引脚(FPGA中有专门的非用户可使用的测试、下载用引脚)为输入还是输出,还可以对IO的电平标准进行设置。总归一句话,FPGA之所以可编程是因为可以通过特殊的01代码制作成一张张 “真值表”,并将这些“真值表”组合起来以实现大规模的逻辑功能。不了解FPGA内部结构,就不能明白最终代码如何变到FPGA里面去的。也就无法深入的了解如何能够充分运用FPGA。现在的FPGA,不单单是有前面讲的那三块,还有很多专用的硬件功能单元,如何利用好这些单元实现复杂的逻辑电路设计,是从菜鸟迈向高手的路上必须要克服的障碍。而这一切,还是必须先从了解FPGA内部逻辑及其工作原理做起。

  2、错误理解HDL语言,怎么看都看不出硬件结构。

  HDL语言的英语全称是:Hardware Description Language,注意这个单词Description,而不是Design。老外为什么要用Description这个词而不是Design呢?因为HDL确实不是用用来设计硬件的,而仅仅是用来描述硬件的。描述这个词精确地反映了HDL语言的本质,HDL语言不过是已知硬件电路的文本表现形式而已,只是将以后的电路用文本的形式描述出来而已。而在编写语言之前,硬件电路应该已经被设计出来了。语言只不过是将这种设计转化为文字表达形式而已。但是很多人就不理解了,既然硬件都已经被设计出来了,直接拿去制作部就完了,为什么还要转化为文字表达形式再通过EDA工具这些麻烦的流程呢?其实这就是很多菜鸟没有了解设计的抽象层次的问题,任何设计包括什么服装、机械、广告设计都有一个抽象层次的问题。就拿广告设计来说吧,最初的设计也许就是一个概念,设计出这个概念也是就是一个点子而已,离最终拍成广告还差得很远。硬件设计也是有不同的抽象层次,每一个层次都需要设计。最高的抽象层次为算法级、然后依次是体系结构级、寄存器传输级、门级、物理版图级。使用HDL的好处在于我们已经设计好了一个寄存器传输级的电路,那么用HDL描述以后转化为文本的形式,剩下的向更低层次的转换就可以让EDA工具去做了,这就大大的降低了工作量。这就是可综合的概念,也就是说在对这一抽象层次上硬件单元进行描述可以被EDA工具理解并转化为底层的门级电路或其他结构的电路。在FPGA设计中,就是在将这以抽象层级的意见描述成HDL语言,就可以通过FPGA开发软件转化为问题1中所述的FPGA内部逻辑功能实现形式。HDL也可以描述更高的抽象层级如算法级或者是体系结构级,但目前受限于EDA软件的发展,EDA软件还无法理解这么高的抽象层次,所以 HDL描述这样抽象层级是无法被转化为较低的抽象层级的,这也就是所谓的不可综合。所以在阅读或编写HDL语言,尤其是可综合的HDL,不应该看到的是语言本身,而是要看到语言背后所对应的硬件电路结构。如果看到的HDL始终是一条条的代码,那么这种人永远摆脱不了菜鸟的宿命。假如哪一天看到的代码不再是一行行的代码而是一块一块的硬件???,那么恭喜脱离了菜鸟的级别,进入不那么菜的鸟级别。

  3、FPGA本身不算什么,一切皆在FPGA之外这一点恐怕也是很多学FPGA的菜鸟最难理解的地方。

  FPGA是给谁用的?很多学校解释为给学微电子专业或者集成电路设计专业的学生用的,其实这不过是很多学校受资金限制,买不起专业的集成电路设计工具而用FPGA工具替代而已。其实FPGA是给设计电子系统的工程师使用的。这些工程师通常是使用已有的芯片搭配在一起完成一个电子设备,如基站、机顶盒、视频监控设备等。当现有芯片无法满足系统的需求时,就需要用FPGA来快速的定义一个能用的芯片。前面说了,FPGA里面无法就是一些“真值表”、触发器、各种连线以及一些硬件资源,电子系统工程师使用FPGA进行设计时无非就是考虑如何将这些以后资源组合起来实现一定的逻辑功能而已,而不必像IC设计工程师那样一直要关注到最后芯片是不是能够被制造出来。本质上和利用现有芯片组合成不同的电子系统没有区别,只是需要关注更底层的资源而已。要想把FPGA用起来还是简单的,因为无非就是那些资源,在理解了前面两点再搞个实验板,跑跑实验,做点简单的东西是可以的。而真正要把FPGA用好,那光懂点FPGA知识就远远不够了。因为最终要让FPGA里面的资源如何组合,实现何种功能才能满足系统的需要,那就需要懂得更多更广泛的知识。目前FPGA的应用主要是三个方向:

  第一个方向,也是传统方向主要用于通信设备的高速接口电路设计,这一方向主要是用FPGA处理高速接口的协议,并完成高速的数据收发和交换。这类应用通常要求采用具备高速收发接口的 FPGA,同时要求设计者懂得高速接口电路设计和高速数字电路板级设计,具备EMC/EMI设计知识,以及较好的模拟电路基础,需要解决在高速收发过程中产生的信号完整性问题。FPGA最初以及到目前最广的应用就是在通信领域,一方面通信领域需要高速的通信协议处理方式,另一方面通信协议随时在修改,非常不适合做成专门的芯片。因此能够灵活改变功能的FPGA就成为首选。到目前为止FPGA的一半以上的应用也是在通信行业。

  第二个方向,可以称为数字信号处理方向或者数学计算方向,因为很大程度上这一方向已经大大超出了信号处理的范畴。例如早就在2006年就听说老美将FPGA用于金融数据分析,后来又见到有将FPGA用于医学数据分析的案例。在这一方向要求FPGA设计者有一定的数学功底,能够理解并改进较为复杂的数学算法,并利用FPGA内部的各种资源使之能够变为实际的运算电路。目前真正投入实用的还是在通信领域的无线信号处理、信道编解码以及图像信号处理等领域,其它领域的研究正在开展中,之所以没有大量实用的主要原因还是因为学金融的、学医学的不了解这玩意。不过最近发现欧美有很多电子工程、计算机类的博士转入到金融行业,开展金融信号处理,相信随着转入的人增加,FPGA在其它领域的数学计算功能会更好的发挥出来,而我也有意做一些这些方面的研究。不过国内学金融的、学医的恐怕连数学都很少用到,就不用说用FPGA来帮助他们完成数学_运算了,这个问题只有再议了。

  第三个方向就是所谓的SOPC方向,其实严格意义上来说这个已经在FPGA设计的范畴之内,只不过是利用FPGA这个平台搭建的一个嵌入式系统的底层硬件环境,然后设计者主要是在上面进行嵌入式软件开发而已。设计对于FPGA本身的设计时相当少的。但如果涉及到需要在FPGA做专门的算法加速,实际上需要用到第二个方向的知识,而如果需要设计专用的接口电路则需要用到第一个方向的知识。就目前SOPC方向发展其实远不如第一和第二个方向,其主要原因是因为SOPC以FPGA为主,或者是在FPGA内部的资源实现一个“软”的处理器,或者是在FPGA内部嵌入一个处理器核。但大多数的嵌入式设计却是以软件为核心,以现有的硬件发展情况来看,多数情况下的接口都已经标准化,并不需要那么大的FPGA逻辑资源去设计太过复杂的接口。而且就目前看来SOPC相关的开发工具还非常的不完善,以ARM为代表的各类嵌入式处理器开发工具却早已深入人心,大多数以ARM为核心的SOC芯片提供了大多数标准的接口,大量成系列的单片机/嵌入式处理器提供了相关行业所需要的硬件加速电路,需要专门定制硬件场合确实很少。通常是在一些特种行业才会在这方面有非常迫切的需求。即使目前Xilinx将ARM的硬核加入到FPGA里面,相信目前的情况不会有太大改观,不要忘了很多老掉牙的8位单片机还在嵌入式领域混呢,嵌入式主要不是靠硬件的差异而更多的是靠软件的差异来体现价值的。我曾经看好的是 cypressPsoc这一想法。和SOPC系列不同,Psoc的思想史载SOC芯片里面去嵌入那么一小块FPGA,那这样其实可以满足嵌入式的那些微小的硬件接口差异,比如某个运用需要4个USB,而通常的处理器不会提供那么多,就可以用这么一块FPGA来提供多的USB接口。而另一种运用需要6个 UART,也可以用同样的方法完成。对于嵌入式设计公司来说他们只需要备货一种芯片,就可以满足这些设计中各种微小的差异变化。其主要的差异化仍然是通过软件来完成。但目前cypress过于封闭,如果其采用ARM作为处理器内核,借助其完整的工具链。同时开放IP合作,让大量的第三方为它提供IP设计,其实是很有希望的。但目前cypress的日子怕不太好过,Psoc的思想也不知道何时能够发光。

  4、数字逻辑知识是根本。无论是FPGA的哪个方向,都离不开数字逻辑知识的支撑。FPGA说白了是一种实现数字逻辑的方式而已。如果连最基本的数字逻辑的知识都有问题,学习FPGA的愿望只是空中楼阁而已。而这,恰恰是很多菜鸟最不愿意去面对的问题。数字逻辑是任何电子电气类专业的专业基础知识,也是必须要学好的一门课。很多人无非是学习了,考个试,完了。

  如果不能将数字逻辑知识烂熟于心,养成良好的设计习惯,学FPGA到最后仍然是雾里看花水中望月,始终是一场空的。以上四条只是我目前总结菜鸟们在学习FPGA时所最容易跑偏的地方,FPGA的学习其实就像学习围棋一样,学会如何在棋盘上落子很容易,成为一位高手却是难上加难。要真成为李昌镐那样的神一般的选手,除了靠刻苦专研,恐怕还确实得要一点天赋。

荐读:如何学习FPGA?为什么你会觉得FPGA难学?

       一、入门首先要掌握HDL(HDL=verilog+VHDL)。

      第一句话是:还没学数电的先学数电。然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL。因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它。当然,你思维能转得过来,也可以选verilog,毕竟在国内verilog用得比较多。

      接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器,常用的编译器有:Quartus、ISE、Vivado、Design Compiler 、Synopsys的VCS、iverilog、Lattice的Diamond、Microsemi/Actel的Libero、Synplify pro),然后再模仿着写,最后不看书也能写出来。编译完代码,就打开RTL图,看一下综合出来是什么样的电路。

      HDL是硬件描述语言,突出硬件这一特点,所以要用数电的思维去思考HDL,而不是用C语言或者其它高级语言,如果不能理解这句话的,可以看《什么是硬件以及什么是软件》。在这一阶段,推荐的教材是《Verilog传奇》、《Verilog HDL高级数字设计》或者是《用于逻辑综合的VHDL》。不看书也能写出个三段式状态机就可以进入下一阶段了。

      此外,你手上必须准备Verilog或者VHDL的官方文档,《verilog_IEEE官方标准手册-2005_IEEE_P1364》、《IEEE Standard VHDL Language_2008》,以便遇到一些语法问题的时候能查一下。

       二、独立完成中小规模的数字电路设计。

      现在,你可以设计一些数字电路了,像交通灯、电子琴、DDS等等,推荐的教材是夏老《Verilog 数字系统设计教程》(第三版)。在这一阶段,你要做到的是:给你一个指标要求或者时序图,你能用HDL设计电路去实现它。这里你需要一块开发板,可以选Altera的cyclone IV系列,或者Xilinx的Spantan 6?;姑徽莆誋DL之前千万不要买开发板,因为你买回来也没用。这里你没必要每次编译通过就下载代码,咱们用modelsim仿真(此外还有QuestaSim、NC verilog、Diamond的Active-HDL、VCS、Debussy/Verdi等仿真工具),如果仿真都不能通过那就不用下载了,肯定不行的。在这里先掌握简单的testbench就可以了。推荐的教材是《WRITING TESTBENCHES Functional Verification of HDL Models》。

       三、掌握设计方法和设计原则。

      你可能发现你综合出来的电路尽管没错,但有很多警告。这个时候,你得学会同步设计原则、优化电路,是速度优先还是面积优先,时钟树应该怎样设计,怎样同步两个异频时钟等等。推荐的教材是《FPGA权威指南》、《IP核芯志-数字逻辑设计思想》、《Altera FPGA/CPLD设计》第二版的基础篇和高级篇两本。学会加快编译速度(增量式编译、LogicLock),静态时序分析(timequest),嵌入式逻辑分析仪(signaltap)就算是通关了。如果有不懂的地方可以暂时跳过,因为这部分还需要足量的实践,才能有较深刻的理解。

       四、学会提高开发效率。

       因为Quartus和ISE的编辑器功能太弱,影响了开发效率。所以建议使用Sublime text编辑器中代码片段的功能,以减少重复性劳动。Modelsim也是常用的仿真工具,学会TCL/TK以编写适合自己的DO文件,使得仿真变得自动化,推荐的教材是《TCL/TK入门经典》。你可能会手动备份代码,但是专业人士都是用版本控制器的,所以,为了提高工作效率,必须掌握GIT。文件比较器Beyond Compare也是个比较常用的工具。此外,你也可以使用System Verilog来替代testbench,这样效率会更高一些。如果你是做IC验证的,就必须掌握System Verilog和验证方法学(UVM)。推荐的教材是《Writing Testbenches using SystemVerilog》、《The UVM Primer》、《System Verilog1800-2012语法手册》。

        掌握了TCL/TK之后,可以学习虚拟Jtag(ISE也有类似的工具)制作属于自己的调试工具,此外,有时间的话,最好再学个python。脚本,意味着一劳永逸。

       五、增强理论基础。

       这个时候,你已经会使用FPGA了,但是还有很多事情做不了(比如,FIR滤波器、PID算法、OFDM等),因为理论没学好。我大概地分几个方向供大家参考,后面跟的是要掌握的理论课。

       1、信号处理——信号与系统、数字信号处理、数字图像处理、现代数字信号处理、盲信号处理、自适应滤波器原理、雷达信号处理

       2、接口应用——如:UART、SPI、IIC、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G以太网接口)、SATA、光纤、DisplayPort

       3、无线通信——信号与系统、数字信号处理、通信原理、移动通信基础、随机过程、信息论与编码

       4、CPU设计——计算机组成原理、单片机、计算机体系结构、编译原理

       5、仪器仪表——模拟电子技术、高频电子线路、电子测量技术、智能仪器原理及应用

       6、控制系统——自动控制原理、现代控制理论、过程控制工程、模糊控制器理论与应用

       7、压缩、编码、加密——数论、抽象代数、现代编码技术、信息论与编码、数据压缩导论、应用密码学、音频信息处理技术、数字视频编码技术原理

      现在你发现,原来FPGA会涉及到那么多知识,你可以选一个感兴趣的方向,但是工作中很有可能用到其中几个方向的知识,所以理论还是学得越多越好。如果你要更上一层,数学和英语是不可避免的。

       六、学会使用MATLAB仿真。

       设计FPGA算法的时候,多多少少都会用到MATLAB,比如CRC的系数矩阵、数字滤波器系数、各种表格和文本处理等。此外,MATLAB还能用于调试HDL(用MATLAB的计算结果跟用HDL算出来的一步步对照,可以知道哪里出问题)。推荐的教材是《MATLAB宝典》和杜勇的《数字滤波器的MATLAB与FPGA实现》。

       七、足量的实践。

      这个时候你至少读过几遍芯片手册(官网有),然后可以针对自己的方向,做一定量的实践了(期间要保持良好的代码风格,增加元件例化语句的可读性,绘制流程图/时序图,撰写文档的习惯)。比如:通信类的可以做调制解调算法,仪表类的可以做总线分析仪等等。不过这些算法,在书上只是给了个公式、框图而已,跟实际的差距很大,你甚至会觉得书上的东西都很肤浅。那么,你可以在知网、百度文库、EETOP论坛、opencores、ChinaAET、Q群共享、博客上面找些相关资料(校外的朋友可以在淘宝买个知网账号)。其实,当你到了这个阶段,你已经达到了职业级水平,有空就多了解一些前沿技术,这将有助于你的职业规划。

       在工作当中,或许你需要关注很多协议和行业标准,协议可以在EETOP上面找到,而标准(如:国家标准GB和GB/T,国际标准ISO)就推荐《标准网》和《标准分享网》。

       八、图像处理。(这部分只写给想学图像处理的朋友,也是由浅入深的路线)

       1、Photoshop?;ㄒ?、两周的时间学习PS,对图像处理有个大概的了解,知道各种图片格式、直方图、色相、通道、滤镜、拼接等基本概念,并能使用它。这部分是0基础,目的让大家对图像处理有个感性的认识,而不是一上来就各种各样的公式推导。推荐《Photoshop CS6完全自学教程》。

       2、基于MATLAB或OpenCV的图像处理。有C/C++基础的可以学习OpenCV,否则的话,建议学MATLAB。这个阶段下,只要学会简单的调用函数即可,暂时不用深究实现的细节。推荐《数字图像处理matlab版》、《学习OpenCV》。

       3、图像处理的基础理论。这部分的理论是需要高数、复变、线性代数、信号与系统、数字信号处理等基础,基础不好的话,建议先补补基础再来??床欢睦砺垡部梢栽菔毕确畔?,或许学到后面就自然而然地开窍了。推荐《数字图像处理》。

       4、基于FPGA的图像处理。把前面学到的理论运用到FPGA上面,如果这时你有前面第七个阶段的水平,你将轻松地独立完成图像算法设计(图像处理是离不开接口的,上面第五个阶段有讲)。推荐《基于FPGA的嵌入式图像处理系统设计》、《基于FPGA的数字图像处理原理及应用》。

       5、进一步钻研数学。要在算法上更上一层,必然需要更多的数学,所以这里建议学习实分析、泛涵分析、小波分析等。

       下面这两个阶段是给感兴趣的朋友介绍的。

       九、数电的尽头是模电。

      现在FPGA内部的事情是难不到你的,但是信号出了FPGA,你就没法控制了。这个时候必须学好模电。比如:电路分析、模拟电子技术、高频电子线路、PCB设计、EMC、SI、PI等等,能设计出一块带两片DDR3的FPGA开发板,就算通关了。具体的学习路线可以参考本博客的《如何学习硬件设计——理论篇》和《如何学习硬件设计——实践篇》。

       十、学无止境。

      能到这个境界,说明你已经很厉害了,但是还有很多东西要学的,因为FPGA常常要跟CPU交互,也就是说你得经常跟软件工程师交流,所以也得懂点软件方面的知识。比如ARM(Xilinx的ZYNQ和Altera的SOC会用到ARM的硬核,请参考本博客的《如何学习嵌入式软件》)、DSP、Linux、安卓、上位机(QT、C#、JAVA)都可以学一下,反正学无止境的。

       十一、其它问题。

       a、为什么不推荐学习NIOS II和MicroBlaze等软核?


     1、性价比不高,一般的软核性能大概跟Cortex M3或M4差不多,用FPGA那么贵的东西去做一个性能一般的CPU,在工程上是非常不划算的。不如另外加一块M3。

     2、加上软核,可能会影响到其它的逻辑的功能。这是在资源并不十分充足的情况下,再加上软核,导致布局布线变得相当困难。

     3、软核不开源,出现Bug的时候,不容易调试。

     4、工程上很少使用,极有可能派不上用场。

b、为什么不推荐0基础学习ZYNQ或SOC?

     1、容易让人有傍同心理。傍同心理是指一个人通过渲染与自己有亲近关系的人的杰出,来掩盖和弥补自己在这方面的不足,从而获得心理上的平衡。自己在学习很厉害的东西,然后也感觉自己很厉害,但这只是错觉而已。

     2、入门应该学习尽量简单的东西,要么专心学习ARM,要么专心学习FPGA。这样更容易有成就感,增强信心。

     3、ZYNQ和SOC的应用领域并不广,还有很多人没听过这种东西,导致求职的不利。

     4、开发工具编译时间长,浪费较多时间。

     5、绝大多数工作,都只是负责一方面,也就是说另一方面,很有可能派不上用场。

c、为什么已经存在那么多IP核,仍然需要写HDL?

     1、问这种问题的,一般是学生,他们没有做过产品,没有遇到过工程上的问题。

     2、IP核并非万能,不能满足所有需求。

     3、尽量少用闭源IP核,一旦出问题,这种黑匣子很可能让产品难产。

     4、深入理解底一层次,可以更好地使用高一层次。该法则可以适用于所有编程语言。

       今天就聊到这里,各位,加油。

热门推荐

收藏 人收藏
分享:

评论

相关推荐

简谈FPGA中系统运行频率计算方法与组合逻辑的层级

大家好,又到了每日学习的时间了,最近一个月比较忙,没有更新文章,希望各位没有想我,哈哈。 无用的话不....

的头像 FPGA学习交流 发表于 07-27 19:16 ? 127次 阅读
简谈FPGA中系统运行频率计算方法与组合逻辑的层级

浅析嵌入式C语言高级用法

我们需要知道——变量,其实是内存地址的一个抽像名字罢了。在静态编译的程序中,所有的变量名都会在编译时....

的头像 单片机精讲吴鉴鹰 发表于 07-27 16:28 ? 79次 阅读
浅析嵌入式C语言高级用法

关于如何提高单片机执行效率的一些建议

我们平常所说的执行效率就是使用相同的算法在相同输入条件下完成相同计算所产生的系统开销,目前来说一般会....

的头像 单片机精讲吴鉴鹰 发表于 07-27 16:24 ? 76次 阅读
关于如何提高单片机执行效率的一些建议

【解决方案】加速海啸模拟

发表于 07-27 15:04 ? 45次 阅读
【解决方案】加速海啸模拟

可广泛应用于高密度深度学习片上系统(SoC)、FPGA和应用处理器

MAX77714 PMIC提供完备、高效、小尺寸电源管理方案,支持多核处理器系统工作在最高性能,在3....

的头像 美信半导体 发表于 07-27 14:31 ? 112次 阅读
可广泛应用于高密度深度学习片上系统(SoC)、FPGA和应用处理器

为什么我的Arria 10 HPS EMAC到FPGA接口在硬件中无法正常工作?

发表于 07-27 14:27 ? 42次 阅读
为什么我的Arria 10 HPS EMAC到FPGA接口在硬件中无法正常工作?

阿里FPGA云服务器平台FaaS,可大大降低加速器的开发与部署成本

FPGA (现场可编程门阵列)由于其硬件并行加速能力和可编程特性,在传统通信领域和IC设计领域大放....

发表于 07-27 14:25 ? 41次 阅读
阿里FPGA云服务器平台FaaS,可大大降低加速器的开发与部署成本

首款基于FPGA的原创深度学习语音识别加速解决方案面世,深鉴引领FPGA加速云市场

深鉴科技于国内领先公有云服务商华为云发布语音识别加速引擎DDESE——DeePhi Descart....

发表于 07-27 14:25 ? 42次 阅读
首款基于FPGA的原创深度学习语音识别加速解决方案面世,深鉴引领FPGA加速云市场

请问对12.918做无损定点化,最小位宽是多少?

发表于 07-27 10:00 ? 44次 阅读
请问对12.918做无损定点化,最小位宽是多少?

请问AD7606采集50Hz标准正弦出现下图结果是什么原因?

发表于 07-27 09:51 ? 22次 阅读
请问AD7606采集50Hz标准正弦出现下图结果是什么原因?

请问AD7626 FPGA LVDS 电平标准如何选择?

发表于 07-27 08:46 ? 13次 阅读
请问AD7626 FPGA LVDS 电平标准如何选择?

请问ad9249采的数据有多次谐波问题怎么解决?

发表于 07-27 08:08 ? 15次 阅读
请问ad9249采的数据有多次谐波问题怎么解决?

请问能通过DM3730的DSP控制GPMC与FPGA进行实时的数据传输吗?

发表于 07-27 07:12 ? 13次 阅读
请问能通过DM3730的DSP控制GPMC与FPGA进行实时的数据传输吗?

转个牛人贴- FPGA设计经验分享

发表于 07-26 18:09 ? 156次 阅读
转个牛人贴- FPGA设计经验分享

如何获取一块FPGA开发板的MAC地址?

发表于 07-26 16:55 ? 90次 阅读
如何获取一块FPGA开发板的MAC地址?

10 Gbps以太网硬件演示参考设计

发表于 07-26 16:33 ? 117次 阅读
10 Gbps以太网硬件演示参考设计

基于Intel SoC FPGA的光伏电力通信管理机系统设计

光伏发电站利用大量的光伏电池板完成从光能到直流电能的转换,再将直流电能使用逆变器转换为50 Hz的交....

发表于 07-26 16:04 ? 73次 阅读
基于Intel SoC FPGA的光伏电力通信管理机系统设计

基于带通采样的AIS非相干解调软件接收机的FPGA实现设计

AIS系统是一种船舶交通信息交换系统,船载AIS设备不断发送自身信息,如航向、吨位等,用以领航调度、....

发表于 07-26 15:49 ? 29次 阅读
基于带通采样的AIS非相干解调软件接收机的FPGA实现设计

关于分段多项式近似的DDFS研究及FPGA实现的设计过程浅析

感应式磁力仪基于法拉第电磁感应原理,用于探测近地空间的低频交变磁场 ,它通常自带标准信号源,用于在轨....

发表于 07-26 15:30 ? 37次 阅读
关于分段多项式近似的DDFS研究及FPGA实现的设计过程浅析

FPGA是什么?为什么要使用它?

最近几年,FPGA这个概念越来越多地出现。例如,比特币挖矿,就有使用基于FPGA的矿机?;褂?,之前微....

的头像 芯资本 发表于 07-26 14:41 ? 147次 阅读
FPGA是什么?为什么要使用它?

为什么中国AI芯片产业难改依附式生存?

芯片定义了产业链和生态圈的基础计算架构,正如CPU是IT产业的核心一样,芯片也是人工智能产业的核心。....

的头像 章鹰 发表于 07-26 10:01 ? 374次 阅读
为什么中国AI芯片产业难改依附式生存?

赛灵思:FPGA的鼻祖,全球最大的FPGA厂商

到目前为止,赛灵思的产品已经在29个OEM品牌的111种车型上得到了应用,未来这个数字还会扩大。

的头像 高工智能汽车 发表于 07-25 08:44 ? 511次 阅读
赛灵思:FPGA的鼻祖,全球最大的FPGA厂商

为什么说AI芯片是FPGA的附庸?

央行放水之后,催生出了一大批手握重金的投资机构,而国内优秀的投资标的,特别是高科技领域的标的极为稀缺....

的头像 佐思汽车研究 发表于 07-25 08:39 ? 1160次 阅读
为什么说AI芯片是FPGA的附庸?

EasyX_20170421 C语言编程图形库应用程序免费下载

本文档的主要内容详细介绍的是EasyX_20170421C语言编程图形库应用程序免费下载 特别实用!

发表于 07-25 08:00 ? 13次 阅读
EasyX_20170421 C语言编程图形库应用程序免费下载

以SoC FPGA为设计平台的北斗卫星信号跟踪算法的设计

全球导航卫星系统(Global Navigation Satellite System,GNSS)....

发表于 07-24 17:43 ? 148次 阅读
以SoC FPGA为设计平台的北斗卫星信号跟踪算法的设计

基于块匹配的高斯背景建模-ROI映射方法的FPGA和HEVC视频编码算法设计

与H.264/AVC相比,新一代视频压缩标准H.265/HEVC能够在相同的图像质量下实现更低的码....

发表于 07-24 17:28 ? 56次 阅读
基于块匹配的高斯背景建模-ROI映射方法的FPGA和HEVC视频编码算法设计

如何利用spaCy和Cython以约100倍于Python的速度实现NLP

然后,我们可以将矩形列表存储在这种结构的 C 数组中,并将这个数组传递给我们的 check_rect....

的头像 马哥Linux运维 发表于 07-24 16:52 ? 169次 阅读
如何利用spaCy和Cython以约100倍于Python的速度实现NLP

FPGA对DC-DC精度的要求不断提升

供电电源的稳态直流精度主要取决于两个因素:电压调整精度和输出电压纹波。这里有一个误区,很多工程师只通....

的头像 FPGA极客空间 发表于 07-24 15:05 ? 125次 阅读
FPGA对DC-DC精度的要求不断提升

FPGA产品升级进击,赛灵思三大战略助力加速市场增长

FPGA领域的玩家多年来都波澜不惊,所以当2015年唯一可称得上直接竞争对手的Altera被英特尔....

发表于 07-23 17:23 ? 44次 阅读
FPGA产品升级进击,赛灵思三大战略助力加速市场增长

基于FPGA的可调FIR滤波器在实际通信系统中的实现方法设计

基于灵活自适应的空口波形技术FOFDM(Filtered OFDM)是现代通信技术的研究热点,设....

发表于 07-23 17:21 ? 42次 阅读
基于FPGA的可调FIR滤波器在实际通信系统中的实现方法设计

关于国产FPGA发展现状以及未来发展前景趋势详解

2018年上半年对于中国半导体行业而言是多事之秋,发生了几件让国人深入思考的大事。我作为IC产业的....

发表于 07-23 17:18 ? 189次 阅读
关于国产FPGA发展现状以及未来发展前景趋势详解

关于FPGA与深度学习的关系探析详解

人工智能的风潮从技术一路蔓延到硬件,让“芯片”成为今年行业里盛极一时的主题。人们关注通用芯片领域里C....

发表于 07-23 17:12 ? 95次 阅读
关于FPGA与深度学习的关系探析详解

当FPGA跟ASIC分界线日益模糊,FPGA还像SoC吗?

随着处理器被添加到传统FPGA中,可编程性被添加到ASIC中,FPGA和ASIC的分界线日益模糊。

发表于 07-23 17:07 ? 73次 阅读
当FPGA跟ASIC分界线日益模糊,FPGA还像SoC吗?

中国AI芯片产业难改依附式生存现状的原因有哪些?

日前,全球最大的可编程芯片(FPGA)厂商赛灵思宣布收购中国 AI 芯片领域的明星创业公司—深鉴科....

发表于 07-23 16:49 ? 84次 阅读
中国AI芯片产业难改依附式生存现状的原因有哪些?

高云半导体小蜜蜂家族再添新成员——GW1NS-2 FPFA-SoC芯片揭开AI的序幕

中国广州,2018年7月23日,广东高云半导体科技股份有限公司(以下简称“高云半导体”)今日宣布:高....

的头像 人间烟火123 发表于 07-23 14:09 ? 625次 阅读
高云半导体小蜜蜂家族再添新成员——GW1NS-2 FPFA-SoC芯片揭开AI的序幕

基于INTEL FPGA硬浮点DSP实现卷积运算详解

卷积是一种线性运算,其本质是滑动平均思想,广泛应用于图像滤波。而随着人工智能及深度学习的发展,卷积也....

的头像 FPGA极客空间 发表于 07-23 09:09 ? 416次 阅读
基于INTEL FPGA硬浮点DSP实现卷积运算详解

C语言MFC制作剪刀石头布游戏资料合集应用程序免费下载

本文档的主要内容详细介绍的是C语言MFC制作剪刀石头布游戏资料合集应用程序免费下载。

发表于 07-23 08:00 ? 49次 阅读
C语言MFC制作剪刀石头布游戏资料合集应用程序免费下载

美高森美PolarFire 现场可编程逻辑器件产品系列:应用范围广泛,具备了业界最低功耗

美高森美公司(Microsemi)宣布提供全新成本优化PolarFire 现场可编程逻辑器件(FP....

发表于 07-22 12:54 ? 79次 阅读
美高森美PolarFire 现场可编程逻辑器件产品系列:应用范围广泛,具备了业界最低功耗

英特尔Cyclone 10系列现场可编程门阵列,意在支持日益增多的物联网应用

为支持日益增多的物联网(IoT)应用,英特尔公司今天发布了英特尔 Cyclone 10 系列现场可....

发表于 07-22 12:51 ? 133次 阅读
英特尔Cyclone 10系列现场可编程门阵列,意在支持日益增多的物联网应用

莱迪思半导体推出全新的??榛疘P核,能为客户提供创建自定义视频桥接解决方案所需???/a>

莱迪思半导体公司推出7款全新的??榛疘P核,支持屡获殊荣的CrossLink FPGA产品系列,可....

发表于 07-22 12:09 ? 51次 阅读
莱迪思半导体推出全新的??榛疘P核,能为客户提供创建自定义视频桥接解决方案所需??? />    </a>
</div><div class=

FPGA的设计主要是以时序电路为主吗?

“时钟是时序电路的控制者” 这句话太经典了,可以说是FPGA设计的圣言。FPGA的设计主要是以时序电....

的头像 FPGA极客空间 发表于 07-21 10:55 ? 251次 阅读
FPGA的设计主要是以时序电路为主吗?

为什么要学习FPGA?如何学习FPGA?

我知道,我对与电子有关的所有事情都很着迷,但不论从哪个角度看,今天的现场可编程门阵列(FPGA),都....

的头像 FPGA极客空间 发表于 07-21 10:49 ? 254次 阅读
为什么要学习FPGA?如何学习FPGA?

赛灵思收购深鉴科技的意义是什么?

7月18日早间消息,赛灵思今天宣布已经完成对中国AI芯片创企深鉴科技的收购。深鉴科技是一家总部位于北....

的头像 FPGA技术联盟 发表于 07-20 10:33 ? 352次 阅读
赛灵思收购深鉴科技的意义是什么?

中国芯片初创公司深鉴科技对外正式宣布被FPGA巨头赛灵思收购

深鉴科技在业内素有“中国英伟达”之称,成立初姚颂便表示,深鉴是一个解决方案的提供商,类似于一个制作D....

的头像 新智元 发表于 07-20 10:26 ? 278次 阅读
中国芯片初创公司深鉴科技对外正式宣布被FPGA巨头赛灵思收购

如何基于proteus仿真进行电子秤设计的详细资料概述

基于proteus仿真,用C语言编程,设计了一个精度20g,量程0-5kg的小型电子秤。具有计价、快....

发表于 07-20 08:00 ? 40次 阅读
如何基于proteus仿真进行电子秤设计的详细资料概述

以FPGA为基础的嵌入式图像监控系统的设计方案详解

目前,图像监控系统大多采用PC和视频采集卡作为系统主要部分,基于嵌入式技术的图像监控系统设备在我国....

发表于 07-19 18:04 ? 150次 阅读
以FPGA为基础的嵌入式图像监控系统的设计方案详解

FPGA 原型设计及发展趋势介绍

FPGA 原型设计人员艰苦努力所得的明显回报就是 ASIC 设计可以及时而毫无问题地完成产品定案(t....

发表于 07-19 11:33 ? 53次 阅读
FPGA 原型设计及发展趋势介绍

自动驾驶的芯片竞赛正在愈演愈烈

英特尔近日宣布计划收购小型芯片制造商eASIC,这是英特尔继2015年以167亿美元收购Altera....

的头像 高工智能汽车 发表于 07-19 10:42 ? 336次 阅读
自动驾驶的芯片竞赛正在愈演愈烈

如何来设计针对FPGA系统电源

FPGA被应用于通信、汽车、工业、医疗、视频和国防等,但是所有设计的一个共同特性就是它们全都需要电源....

的头像 FPGA技术联盟 发表于 07-19 09:13 ? 705次 阅读
如何来设计针对FPGA系统电源

瑞萨电子发布新型全数字 DC/DC 控制器—ISL68300和ISL68301

具有丰富功能的ISL68300和ISL68301为FPGA、DSP、ASIC以及网络处理器提供高达八....

的头像 人间烟火123 发表于 07-18 15:12 ? 740次 阅读
瑞萨电子发布新型全数字 DC/DC 控制器—ISL68300和ISL68301

在单片机中,C语言的数据存储与程序编写需要哪些基本知识?

一、五大内存分区 内存分成5个区,它们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

的头像 嵌入式资讯精选 发表于 07-17 19:41 ? 354次 阅读
在单片机中,C语言的数据存储与程序编写需要哪些基本知识?

C语言和其他高级语言的区别

全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在....

的头像 嵌入式资讯精选 发表于 07-17 18:05 ? 146次 阅读
C语言和其他高级语言的区别

基于KRUG下的WS BUILD

在日常的开发中,有很多地方会用到Foundation和UIKit,使用之前需要先将头文件%23imp....

发表于 07-17 17:00 ? 27次 阅读
基于KRUG下的WS BUILD

C语言使用中指针和内存泄漏的问题和解决方案

引言对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和....

的头像 机器人博览 发表于 07-17 16:33 ? 118次 阅读
C语言使用中指针和内存泄漏的问题和解决方案

介绍单片机中C语言的数据存储与程序编写

内存分成5个区,它们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

的头像 畅学单片机 发表于 07-17 09:03 ? 728次 阅读
介绍单片机中C语言的数据存储与程序编写

高速数据转换器实现方案中使用LVDS的应用诀窍和技巧

采用单端CMOS数字信号时,逻辑电平以大约1 V/nS的速度移动,典型输出负载为10 pF(最大值)....

的头像 电子工程专辑 发表于 07-17 08:41 ? 289次 阅读
高速数据转换器实现方案中使用LVDS的应用诀窍和技巧

如何在Linux下用C语言最基本的程序开发与调试的详细概述

1.建一个目录 2.写代码,建一个hello.c文件

的头像 C语言专家集中营 发表于 07-16 17:02 ? 231次 阅读
如何在Linux下用C语言最基本的程序开发与调试的详细概述

Linux程序的编写、编译、调试方法及make

命令行中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译 器给我们输出的可执....

的头像 C语言专家集中营 发表于 07-16 17:02 ? 214次 阅读
Linux程序的编写、编译、调试方法及make

c语言和其他高级语言的最大的区别在哪里?

当程序运行到需要一个动态分配的变量时,必须向系统申请取得堆中的一块所需大小的存储空间,用于存储该变量....

的头像 玩转单片机 发表于 07-16 15:14 ? 255次 阅读
c语言和其他高级语言的最大的区别在哪里?

位置型PID的C语言代码的实现过程详细资料概述

上一节中已经抽象出了位置性 PID 和增量型 PID 的数学表达式,这一节,重 点讲解 C 语言代码....

发表于 07-16 08:00 ? 69次 阅读
位置型PID的C语言代码的实现过程详细资料概述