资讯详情

新谈:为什么你觉得FPGA难学?如何入门?

新谈:为什么你觉得FPGA难学?怎样入门?

今天给大侠带来新的谈话:你为什么认为FPGA难学?如何开始?我以前发过一篇文章,但也是很多年前。一般来说,它仍然可以作为参考。随着技术的发展和创新,一些内容仍需与时俱进。你可以谈谈你最新的个人观点,仅供参考和学习。不要说太多。

大侠会发现,FPGA技术江湖一直在推动各种设置FPGA设计实例或项目研发案例,将清楚地阐述设计方法和设计理念,甚至有些将分享源代码供你参考学习,很少做一些纯粹的噱头文章,这是因为社会环境几乎有趣,噱头夸张或冲动的事情太多,技术最禁忌,然而,营销人员不在乎这些。只要有噱头和流量,他们就会赚钱。通常,会有很多误导性的信息。很多信息不研究,技术不研究,凭空想象,害人害己。

从事技术,技术牛也有很多,但对于学习,或者必须找到合适的,有些人很清楚,但不清楚,甚至大多数人不擅长与外界沟通,也蔑视沟通,这类人我接触过很多,这就是为什么技术牛,对于技术学习,特别是初学者指导,系统学习有深刻理解的技术领导。

最近很多人问我怎么学。FPGA,所以今天在这里和大侠聊聊。

有人问:我零基础,想学。fpga,有经验的人说,我应该从哪里开始,我应该读什么教程,我应该使用什么开发板,我应该使用什么书等等,我希望有经验的老板能给我一些指导。这里假装有人问,事实上,很多人问,这里只是总结了一些问题。

如果你想快速成功,这主要是面对应用程序,让你的板在一个小时内运行。早期起床快,学习灵活,后期没有系统的理论支持,会有点困难,尤其是大项目,这完全是一场悲剧。

先总结几点

学习FPGA,首先理解相应语言的语法,这里只是为了 Verilog HDL 和 VHDL,不讨论系统级别。我们不必担心硬件描述语言的选择。如果没有个人或特殊需要,我建议先开始 Verilog HDL,Verilog HDL设计使用灵活,有点像C语言,但学习时不能按照C语言的顺序思考,要改变思维。

对于 VHDL,逻辑更细致,格式要求更单一,或者更容易死记硬背,verilog比较灵活,先学 Verilog HDL 优点是如果先接触,可以灵活灵活。 VHDL 怕你再接触 Verilog HDL死记硬背的节奏不容易接受。

一般来说,学习透彻,两者没有影响,当然,掌握两种语言是最好的,但你只能掌握你需要使用的,这取决于个人需要。HDL硬件描述语言,下面会有更详细的阐述,这里大概说一下。

这里有几个语法知识的超链接,供大侠参考学习。

Verilog HDL 语法学习笔记

一周掌握FPGA Verilog HDL语法 汇总篇

VHDL语法学习笔记:一文掌握VHDL语法

一周掌握 FPGA VHDL Day 7 暨汇总篇

以下几点可以理解

1)看代码,建模型

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

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

学习FPGA逻辑思维不仅很重要,而且好的数学思维也可以简化你的设计。因此,那些看到高等数学就头疼的英雄需要注意这门课,重新纠正他们的态度。

举个简单的例子,比如有两个 32 bit 的数据 X[31:0]与 Y31:0相乘。无论如何,当然 Intel 还是 Xilinx 现成的乘法器乘法器 IP 核可以调用,这也是最简单的方法,但有两种 32 bit 乘法器将消耗大量资源。 那么,有没有不太复杂的方法来节约资源呢?

我们可以做一点修改:X31:0分成两部分X1[15:0]和X2[15:0],令X1[15:0]=X[31:16],X2[15:0]=X[15:0],则X1左移16位后与X2可以得到相加X;同样将Y31: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 相乘,这样一个 32 bit * 32 bit 乘法运算转换为四个 16 bit * 16 bit 乘法和三个 32 bit 加法运算。转换后的资源占用会减少很多,感兴趣的大侠,不妨综合一下,看看两者的区别。

这里还举了一个简单的资源占用比较的例子,超链接,仅供大侠参考。

简谈FPGA不同设计方法的资源消耗比较

3)时钟与触发器的关系

时钟是时序电路的控制器。FPGA格言的设计。

FPGA设计主要是时间序列电路,因为无论组合逻辑电路多么复杂,它都不能改变太多的模式,也不难理解。但时间序列电路是不同的,它的所有动作都是由时钟的节奏引发的。可以说,时钟是整个电路的控制器。如果控制不好,电路功能就会混乱。

例如,时钟相当于人体的心脏。它的每一次跳动都会触发一个 Clk,向身体各器官供血,维持身体的正常运转。组织细胞的组成是每个器官身体正常工作所必需的,因此触发器可以与基本单元组织细胞进行比较。时间逻辑电路的时钟是控制时间逻辑电路状态转换的发动机。由于时间逻辑电路主要使用触发器存储电路的状态,因此时间逻辑电路需要时钟的上下边缘。可见时钟在时序电路中的核心作用。

对于以上几点,总结一下,多练习,多思考,多问问题。练习真知,看别人的计划100遍比自己练习好。

一方面,实践的动力来自兴趣,另一方面,。

就我个人而言,我认为后者更重要。毕竟,真正感兴趣的人并不多。真正感兴趣的人会全身心地投入其中。学习这些也是一件小事。对于后者,无论你的压力来自哪里,需求都很容易形成压力,也就是说,最好在实际的项目开发中锻炼,而不是学习。 在实践过程中,我们应该多思考,多思考问题的原因,多问问题解决后为什么,这也是经验积累的过程。如果你有写项目总结的习惯,最好写下问题、原因和解决方案。最后,我们应该问更多的问题。如果我们在思考问题后得不到解决,我们应该问。毕竟,我们的个人力量是有限的。询问学生和同事,充分利用当前丰富的网络资源,询问所有老板。有经验的人可能会让你事半功倍。

总结一下:

  • 多实践,深刻理解理论,结合理论,而不是纯粹的实践,抛弃理论;

  • 多思考,举一反三,掌握核心设计理念、设计方法,不限于固有设备;

  • 多问,不管是谁,只要你不明白,就不要羞于问,学习有效的方法。

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

<1>、很容易让人有同理心。同理心是指一个人通过渲染与自己关系密切的人的卓越,来掩盖和弥补自己在这方面的不足,从而获得心理平衡。我在学习很好的东西,然后我觉得很好,但这只是一种错觉。

<2>、入门要学会尽可能简单的东西,什么阶段要做什么阶段的事情,一口吃胖子是不现实的,或者专心学习FPGA,或者专心学习MCU或者RAM。更容易有成就感,增强信心。

<3>、ZYNQ和SOC近年来,应用领域发展良好,需求不断增加,但对整个市场的需求只是一小部分,最重要的是综合能力要求高,不能在短时间内快速达到一定程度或高度,零基础学习,不现实,因为你必须学会爬,更好地走,甚至跑。

为什么已经存在了这么多?IP还需要写核HDL?

<1>、首先,不应该有这样的问题,包装好 IP 确实有很多,但不可能一切都用。 IP 核,IP 核不是万能的,不能满足所有的需求。此外,技术编辑设计不同于其他文职编辑设计。这不仅仅是为了粘贴、复制或调用实现具体硬件调试需要您了解原理、方法和方法。其次,在做产品和项目时,项目中有很多问题,这个问题可以作为学生回答问题,回答困惑,没有必要在这里纠结;

<2>、尽量少用闭源IP核,一旦出现问题,这种黑匣子很可能使产品难以生产,这对整个开发团队和产品衍生品都是一个巨大的麻烦;

<3>、对低层次的深入理解可以更好地利用高层次。这种学习思想可以应用于所有编程语言。

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

<1>、性价比不高,一般软核性能和Cortex M3或M4差不多,用FPGA做一个性能一般的昂贵的事情。CPU,这个项目很不划算。最好再加一块M3。

<2>、再加上软核,可能会影响其他逻辑功能。这是因为资源不够,再加上软核,布局布线相当困难;

<3>、软核不开源,出现Bug不易调试;

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

所以不建议深入学习。如果非要用,可以在别人的指导下或者自己用。

关于FPGA人工智能,5G应用的一些见解

俗话说外行看热闹,内行看门道。自2016年底以来,人工智能这个词再次风靡全球。上一次是在20世纪70年代和80年代。人工智能给太多行业带来了突破瓶颈的希望,同时也带来了更大的压力和更多的泡沫噱头经济。

对FPGA就人工智能而言,它的应用主要是在硬件加速方面。我以前也使用过加速器,并且对此有所了解。不建议零基础学习 Zynq 同样,这些都是综合能力,还有门槛,不是每个人都能达到的高度。不管你有多努力,你都必须承认你的能力很高,所以不用去考虑太多,当你后续能接触到了,有能力了在考虑。

但是由于现在很多培训机构打着人工智能的幌子,信口开河的忽悠人,个人选择时要有判断力,人工智能下的FPGA,可不是单纯的学习FPGA,也不是单纯的学个python就行了,至于人工智能的具体应用及实现,后续再出专题研究,这里就不过多讨论。总之,一句话,自我判断力要有,绝大多数没有实际作用,不可信。

 

关于企业里FPGA工程师的开直播卖板卡引导学习的见解

首先,要明白以下几个问题:

一是,你是纯正的FPGA工程师么?这里说的纯正是指,你是定岗定制专门做FPGA开发的,而不是什么都干,接触过几天FPGA就叫FPGA工程师;

二是,你自己有没有在自己的专业方向进行过系统性的学习?FPGA工程师现在对口的专业就是弱电类专业,包括电子信息工程、电子科学与技术、通信工程、集成电路、微电子、半导体、物电光电等等相关专业,具体的专业方向,能不能接触到FPGA,还需要看各个学校的具体发展方向。系统性学习就是不是片面的知识组合,而是有规划有效的学习,包括对整个市场的理解,对技术需求,对学习者的自身情况的理解,各种综合,而不是学了几天某个器件,感觉个人懂了很多,就行了;

三是,既然是引导他人学习或者推荐学习,你是否明白原理,是否很清楚如何沟通,表达清楚你懂的并且有效传达?这一点也是最重要的,在前面也说过,你懂得不代表你可以正确地去传输给别人,让别人也懂,正确地价值观,正确地引导方式都是很重要的,可以说是相互学习,共同进步,而不是单方面的输出。

这里点到为止,不过多阐述,以免给杠精机会,哈哈哈。

 

为什么很多人会觉得FPGA难学?

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

FPGA为什么是可以编程的?

恐怕很多自以为入门都不知道,可能也不想知道。因为觉得这是无关紧要的。潜意识的认为可编程嘛,肯定就是像写软件一样啦。

软件编程的思想根深蒂固,看到 Verilog HDL 或者 VHDL 就像看到 C 语言或者其它软件编程语言一样。一条条的读,一条条的分析。如果始终拒绝去了解为什么FPGA是可以编程的,不去了解FPGA的内部结构,要想学会FPGA 恐怕是天方夜谭。尽管现在的EDA软件日益成熟,开发者像写软件那样照葫芦画瓢也能综合出点东西,但不知道原理及内部结构,还是一脸懵,还是不知道EDA软件最后综合出来的到底是什么。也许点个灯,跑个流水灯还行。这样就是为什么很多人学了很久,依然进步不明显,还是一个菜鸟的原因。

那么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输出的组合逻辑。超链接一篇

《对比ARM、DSP,深入了解FPGA》

,作为参考。

这些“真值表”内部值是什么?

就是那些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开发软件转化为问题中所述的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来帮助他们完成数学运算了,这个问题只有再议了。

第三个方向就是所谓的SOC/SOPC方向,片上系统,综合性的,这里简单说一下。其实严格意义上来说这个已经不在FPGA设计的范畴之内,只不过是利用FPGA这个平台搭建的一个嵌入式系统的底层硬件环境,然后设计者主要是在上面进行嵌入式软件开发而已。

设计对于FPGA本身的设计是相当少的。但如果涉及到需要在FPGA做专门的算法加速,实际上需要用到第二个方向的知识,而如果需要设计专用的接口电路则需要用到第一个方向的知识。就目前SOPC方向发展其实远不如第一和第二个方向,其主要原因是因为SOPC以FPGA为主,或者是在FPGA内部的资源实现一个“软”的处理器,或者是在FPGA内部嵌入一个处理器核。

但大多数的嵌入式设计却是以软件为核心,以现有的硬件发展情况来看,多数情况下的接口都已经标准化,并不需要那么大的FPGA逻辑资源去设计太过复杂的接口。而且就目前看来SOPC相关的开发工具还非常的不完善,以ARM为代表的各类嵌入式处理器开发工具却早已深入人心,大多数以ARM为核心的SOC芯片提供了大多数标准的接口,大量成系列的单片机/嵌入式处理器提供了相关行业所需要的硬件加速电路,需要专门定制硬件场合确实很少。通常是在一些特种行业才会在这方面有非常迫切的需求。

《FPGA 之 SOPC 系列 汇总篇》

其实FPGA还有关于计算机网络方向的,这个就和我们经常讨论的硬件方向不一样了,这里不作讨论,有兴趣的可以去查阅 MIPS fpga 一些类似资料。

4)数字逻辑知识是根本。

无论是FPGA的哪个方向,都离不开数字逻辑知识的支撑。FPGA说白了是一种实现数字逻辑的方式而已。如果连最基本的数字逻辑的知识都有问题,学习FPGA的愿望只是徒有空想了。而这,恰恰是很多新手最不愿意去面对的问题。数字逻辑是任何电子电气类专业的专业基础知识,也是必须要学好的一门课。很多人无非是学习了,考个试,完了。如果不能将数字逻辑知识烂熟于心,养成良好的设计习惯,学FPGA到最后仍然是雾里看花水中望月,始终是一场空的。

以上是个人的一些见解,但是没有涉及到具体市场行情、工资待遇,本人在去年年底到今年年初,从各个方向做过半年的市场调研,由于篇幅原因,这里就不给大家去说了,后续有时间再整理一下,相信各种选择FPGA的大侠们,应该都发现了FPGA现在确实很火,尤其近两年,一句话总结,市场行情、薪资待遇,无可挑剔,但是,前提是技术硬实力过关。

对于FPGA的展望,这里放一张原来做报告的图吧,其他的就不过多说了。

FPGA的学习其实就像学习围棋一样,学会如何在棋盘上落子很容易,成为一位高手却是难上加难。要真成为李昌镐那样的神一般的选手,除了靠刻苦专研,恐怕还确实得要一点天赋。

 

如何入门?找适合自己的,取其精华去其糟粕

下面也为各位准备要学习FPGA或者专业对口的大侠们梳理了一下,仅供参考。

 

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

第一句话是:还没学数电的先学数电。然后你可以选择 Verilog HDL或者VHDL,对于硬件描述语言的选择,大家不用纠结,如果没有个人或者特殊需求,本人建议先入手 Verilog HDL,Verilog HDL 设计运用比较灵活,有点类似于C语言,但是在学习的时候不能按照C语言的顺序执行去思考,要转变思想。而且本人调研结果显示,国内80%的企业FPGA工程师研发使用的都是 Verilog HDL。(调研样本企业超过百家,FPGA工程师超过千名)

对于 VHDL,逻辑比较缜密,格式要求比较单一,还是比较容易死记硬背的,verilog比较灵活,先学 Verilog HDL 的好处就是,可以灵活变通,如果先接触 VHDL 的话,怕你再接触 Verilog HDL时陷入死记硬背的节奏里,不太容易接受。

总的来说,学通透了,两者并没有什么影响,两种语言都熟练掌握当然是最好啦,但是你也可以仅掌握你需要用的,这个具体看个人需求了。

接下来,可以跟着实例敲代码。敲代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器,常用的编译器有:Intel 的 Quartus 、Xilinx 的ISE和Vivado、Lattice的Diamond、Design Compiler 、Synopsys的VCS、iverilog、Microsemi/Actel的Libero、Synplify pro),现在流行的也就前三者了,而且前两位占据了90%,然后模仿着写,最后不看书也能写出来。编译完代码,就打开RTL图,看一下综合出来是什么样的电路。

HDL是硬件描述语言,突出硬件这一特点,所以要用数电的思维去思考HDL,而不是用C语言或者其它高级语言,关于语法开篇前面已经超链接了几篇,这里超链接一篇,

《FPGA Verilog-1995 VS Verilog-2001》

,其他的就不说了。

 

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

现在,你可以设计一些数字电路了,像交通灯、电子琴、DDS等等,推荐的教材是夏宇闻教授《Verilog 数字系统设计教程》,最新版是第四版。这里也有帅总的教程

《SANXIN-B01 Verilog教程-郝旭帅团队》

,超链接一下。

在这一阶段,你要做到的是:给你一个具体要求或者时序图,你能用HDL设计电路去实现它。这里你需要一块开发板,对于初学者而言,基础板子足够了,这里推荐一款性价比高的,还有配套的学习视频以及资料。

叁芯智能科技 FPGA开发板,热销中!

可以选Intel altera的cyclone IV系列,或者Xilinx 的 Spantan 6。还没掌握HDL之前千万不要买开发板,因为你买回来也没用。这里你没必要每次编译通过就下载代码,可以用modelsim仿真(此外还有QuestaSim、NC verilog、Diamond的Active-HDL、VCS、Debussy/Verdi等仿真工具),如果仿真都不能通过那就不用下载了,肯定不行的。在这里先掌握简单的testbench就可以了。如何编写仿真测试文件,在上述的《SANXIN-B01 Verilog教程-郝旭帅团队》都是有介绍的。

 

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

你可能发现你综合出来的电路尽管没错,但有很多警告。这个时候,你得学会同步设计原则、优化电路,是速度优先还是面积优先,时钟树应该怎样设计,怎样同步两个异频时钟等等。

《简谈FPGA的片内资源》

《FPGA STA(静态时序分析)》

《FPGA设计的三大黄金法则》

《FPGA 高级设计:时序分析和收敛》

如果有不懂的地方可以暂时跳过,因为这部分还需要足量的实践,才能有较深刻的理解。

 

四、学会提高开发效率

由于传统的EDA软件编辑器功能太弱,影响了开发效率。所以建议使用推荐的编辑器中代码片段的功能,Vs Code 或者 Notepad++,以减少重复性劳动。

软件安装包获取如下:

资料汇总更新|FPGA软件安装包、书籍、源码、技术文档…(2021.01.04更新)

《Vivado 2017.2 安装教程(含多版本各类安装包)》

《FPGA工程师用了都喜欢的编辑神器—Vs Code》

Modelsim也是常用的仿真工具,学会TCL编写适合自己的DO文件,使得仿真变得自动化,推荐的教材是《TCL/TK入门经典》。你可能会手动备份代码,但是专业人士都是用版本控制器的,所以,为了提高工作效率,必须掌握GIT。文件比较器Beyond Compare也是个比较常用的工具。此外,你也可以使用System Verilog来替代testbench,这样效率会更高一些。

如果你是做IC验证的,就必须掌握System Verilog和验证方法学(UVM)。推荐的教材是《Writing Testbenches using SystemVerilog》、《The UVM Primer》、《System Verilog1800-2012语法手册》。

《SystemVerilog验证  测试平台编写指南》电子版

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

 

五、增强理论基础

这个时候,你已经会使用FPGA了,但是还有很多事情做不了,比如,FIR 滤波器、PID 算法、OFDM 等,那是因为理论没学好。这里大概地分几个方向供大家参考,后面跟的是要掌握的理论课,有相关的公众号文章,也超链接提供参考学习。

1、信号处理相关 《信号与系统》、《数字图像处理》、《信号与系统》、《现代数字信号处理》、《雷达信号处理》、《自适应滤波器原理》、《盲信号处理》、《数字信号处理》等;

2、接口应用相关(公众号内部很多资料,可自行搜索) 接口举例:如、UART、SPI、I²C、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G以太网接口)、SATA、光纤、DisplayPort;

3、无线通信相关 《信号与系统》、《数字信号处理》、《通信原理》、《数字信号处理》、《动通信基础》、《信息论与编码》等;

4、CPU设计相关 《单片机》、《计算机体系结构》、《计算机组成原理》、《编译原理》、《RISC CPU 设计》等;

5、仪器仪表相关 《模拟电子技术》、《高频电子线路》、《电子测量技术》、《智能仪器原理及应用》、《IFRD射频识别技术》等;

6、控制系统相关 《自动控制原理》、《现代控制理论》、《过程控制工程》、《模糊控制器理论与应用》、《电机拖动》等;

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

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

 

六、学会使用MATLAB仿真

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

 

七、足量的实践

这个时候你至少读过几遍芯片手册,对应资料对应官网都可以找到,然后可以针对自己的方向,做一定量的实践了(期间要保持良好的代码风格,增加元件例化语句的可读性,绘制流程图/时序图,撰写文档的习惯)。

《简谈FPGA研发设计相关规范(企业中初入职场很实用)》

比如:通信类的可以做调制解调算法,仪表类的可以做总线分析仪等等。

《基于FPGA VHDL 的 FSK调制与解调设计(附源码)》

《基于FPGA VHDL 的 ASK调制与解调设计(附源码)》

不过这些算法,在书上只是给了个公式、框图而已,跟实际的差距很大,你甚至会觉得书上的东西都很肤浅。那么,你可以在知网、百度文库、EETOP、CSDN、博客园等搜索引擎或者技术论坛上面找些相关资料。 其实,当你到了这个阶段,你已经达到了职业级水平,有空就多了解一些前沿技术,这将有助于你的职业规划。 在工作当中,或许你需要关注很多协议和行业标准,协议可以在前沿论坛上面找到,而标准(如:国家标准GB和GB/T,国际标准ISO)就推荐《标准网》和《标准分享网》。

 

八、图像处理

(这部分只是对于图像处理的朋友,也是由浅入深的路线) 这里超链接几篇相关文章以及资料,如下:

《图像边缘检测算法体验步骤(Photoshop,Matlab)》

《FPGA设计中 Verilog HDL实现基本的图像滤波处理仿真》

《算法系列:基于 FPGA 的图像边缘检测系统设计(sobel算法)》

《荐读:FPGA设计经验之图像处理》

《基于FPGA的实时图像边缘检测系统设计(下)》

1、编辑软件,Photoshop(PS)

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

FPGA技术江湖内部也有Photoshop的安装包,可以进入“FPGA技术江湖”公众号,在自我回复界面回复“ps 2019 安装包”,即可获取Adobe Photoshop CC 2019的软件安装包百度网盘链接。

2、基于MATLAB或OpenC++V的图像处理 有C/C++基础的可以学习OpenCV,否则的话,建议学MATLAB。这个阶段下,只要学会简单的调用函数即可,暂时不用深究实现的细节。推荐《冈萨雷斯数字图像处理MATLAB版》中文版(第二版) ,这里也给了电子版获取方式超链接。

《《冈萨雷斯数字图像处理MATLAB版》中文版(第二版) 电子版》

3、图像处理的基础理论 这部分的理论是需要高数、复变、线性代数、信号与系统、数字信号处理等基础,基础不好的话,建议先补补基础再来。看不懂的理论也可以暂时先放下,或许学到后面就自然而然地开窍了。推荐《数字图像处理》。

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

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

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

 

九、数电的尽头是模电

现在FPGA内部的事情是难不到你的,但是信号出了FPGA,你就没法控制了。这个时候必须学好模电。比如:电路分析、模拟电子技术、高频电子线路、PCB设计、EMC、SI、PI 等。

 

十、软件方向

能到这个境界,说明你已经很厉害了,但是还有很多东西要学的,因为 FPGA 常常要跟 CPU 交互,也就是说你得经常跟软件工程师交流,所以也得懂点软件方面的知识。比如 ARM,(在Xilinx 的ZYNQ和 Intel Altera 的SOC里,会用到ARM的硬核)、DSP、Linux、上位机都可以学一下。

 

作为一名硬件工程师,综合能力是很重要的

天下之大,无奇不有,学无止境,学习脚步不能停,这位大侠,看你筋骨奇特,能练就FPGA之才,送你两幅学习宝典指南图,可以参考参考,哈哈哈。 图片

本篇到此结束,交流可加群,进群备注:姓名+公司/学校+岗位/专业。

有想要参加FPGA系统性学习,或者就业班学习,或者上班族充电学习,可以看看一下超链接。

FPGA项目合作,请点这里!

FPGA工程师就业班,线上直播课开启!

FPGA工程师各类研修班,总有你需要的!

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

江湖偌大,继续闯荡,愿大侠一切安好,有缘再见!

 

【QQ交流群】

群号:173560979,进群暗语:FPGA技术江湖粉丝。

多年的FPGA企业开发、培训经验,各种通俗易懂的学习资料以及学习方法,浓厚的交流学习氛围,QQ群目前已有1000多名志同道合的小伙伴,无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有,FPGA技术江湖打造最纯净最专业的技术交流学习平台。

 

【微信交流群】

现微信交流群已建立08群,人数已达数千人,欢迎关注“FPGA技术江湖”微信公众号,可获取进群方式。

 

欢迎关注“FPGA技术江湖”微信公众号,可获取进群方式,更多精彩内容等你发现

标签: 智能压力变送器sta923

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台