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 Deion Language,留意这个单词Deion,而不是Design。老外为什么要用Deion这个词而不是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现已将ARMcortex- A9的硬核嵌入到FPGA里边,未来对嵌入式的展开有很大推进,不过,不要忘了许多老掉牙的8位单片机还在嵌入式范畴混呢,嵌入式首要不是靠硬件的差异而更多的是靠软件的差异来体现价值的。
我从前看好的是cypress的Psoc这一主意。和SOPC系列不同,Psoc的思维史载SOC芯片里边去嵌入那么一小块FPGA,那这样其实可以满意嵌入式的那些细小的硬件接口差异,比方某个运用需求4个USB,而一般的处理器不会供给那么多,就可以用这么一块FPGA来供给多的USB接口。而另一种运用需求6个UART,也可以用相同的办法完结。关于嵌入式规划公司来说他们只需求备货一种芯片,就可以满意这些规划中各种细小的差异改变。其首要的差异化仍然是经过软件来完结。但现在cypress过于关闭,假设其选用ARM作为处理器内核,凭借其完好的东西链。一起敞开IP协作,让许多的第三方为它供给IP规划,其实是很有期望的。但现在cypress的日子怕不太好过,Psoc的思维也不知道何时可以发光。
4、数字逻辑常识是底子。
无论是FPGA的哪个方向,都离不开数字逻辑常识的支撑。FPGA说白了是一种完结数字逻辑的方法罢了。假设连最底子的数字逻辑的常识都有问题,学习FPGA的希望仅仅海市蜃楼罢了。而这,恰恰是许多菜鸟最不乐意去面临的问题。数字逻辑是任何电子电气类专业的专业根底常识,也是有必要要学好的一门课。许多人无非是学习了,考个试,完了。假设不能将数字逻辑常识纯熟于心,养成杰出的规划习气,学FPGA到终究仍然是水中望月水中望月,一向是一场空的。以上四条仅仅我现在总结菜鸟们在学习FPGA时所最简单跑偏的当地,FPGA的学习其实就像学习围棋相同,学会怎么在棋盘上落子很简单,成为一位高手却是难上加难。要真成为李昌镐那样的神一般的选手,除了靠吃苦专研,恐怕还的确得要一点天分。