问:自己零根底,想学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 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里边的资源怎么组合,完结何种功用才干满意体系的需求,那就需求懂得更多更广泛的常识。