如何学习FPGA_fpga学习-程序员宅基地

技术标签: verlog  VHDL  FPGA  电子  学习方法  

PS:笔者强烈建议诸位注册一个EETOP的账号,每天签到或者发贴、回贴就有积分了,里面的资源非常丰富,各种软件、资料都能找到。

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

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

       接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(又叫综合器),常用的集成开发环境有:Intel的Quartus、Xilinx的ISEVivadoDesign CompilerSynopsysVCS、Linux下的iverilog、LatticeDiamondMicrochipLiberoSynplify pro,然后再模仿着写,最后不看书也能写出来。编译完代码,就打开RTL图,看一下综合出来是什么样的电路

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

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

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

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

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

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

四、学会提高开发效率。

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

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

五、增强理论基础。

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

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

2、接口应用——如:UARTSPIIICUSBCANPCIERapid IODDRTCP/IPSPI4.2(10G以太网接口)、SATA、光纤、DisplayPort、HDMI、AHB

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

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

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

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

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

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

六、学会使用MATLAB仿真。

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

七、足量的实践。

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

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

八、图像处理。

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

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

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

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

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

九、数电的尽头是模电。

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

十、学无止境。

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

十一、其它问题。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

d、对于入行的建议?

        建议读个研究生,否则可能没法进行这个行业。

f、推荐一些微电子的教学视频。

      可以参考本博客的《微电子教学视频--Silicon Run等》。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/k331922164/article/details/44626989

智能推荐

VirtualBox在CentOS中安装VBOXADDITIONS_centos virtualbox addition-程序员宅基地

文章浏览阅读588次。VirtualBox在CentOS中安装VBOXADDITIONS_centos virtualbox addition

s3c2416 U-Boot移植笔记-程序员宅基地

文章浏览阅读4.1k次。首先说,今天是一个值得高兴的日子,因为经过四天的努力,终于把U-Boot1.3.4成功移植到了s3c2416上.板子要求是SD卡启动,以下具体的移植步聚:一、SD起动首先要修改/include/configs/smdk2416.h头文件: 在365行左右,按如下修改: //#define CONFIG_BOOT_NAND #define CONFIG_BOOT_M_s3c2416 u-boot移植

java线程池的四种拒绝策略_rejectedpolicy-程序员宅基地

文章浏览阅读5.3k次,点赞12次,收藏24次。本文主要介绍了java juc包中提供的四种拒绝策略。先是接受了部分java线程池ThreadPoolExecutor的构造方法,然后以源码和程序示例的方式介绍了四种拒绝策AbortPolicy,CallerRunsPolicy,DiscardPolicy,DiscardOldestPolicy的不同。_rejectedpolicy

相机相关知识学习笔记_照相机基础知识笔记-程序员宅基地

文章浏览阅读231次。留空,要学_照相机基础知识笔记

InputStream读取数据问题_event check_return:"java.io.inputstream.read(byte[-程序员宅基地

文章浏览阅读3.8k次。1. 关于InputStream.read() 在从数据流里读取数据时,为图简单,经常用InputStream.read()方法。这个方法是从流里每次只读取读取一个字节,效率会非常低。 更好的方法是用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,一次读取多个字节。2._event check_return:"java.io.inputstream.read(byte[])" returns the number of

Ubuntu 14.04 更换阿里云源_ubuntu14.04更换阿里云-程序员宅基地

文章浏览阅读2.8k次。Ubuntu 14.04 更换阿里云源查看Ubuntu信息:root@llf-virtual-machine:/etc/apt# lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubuntu 14.04.5 LTSRelease: 14.04Codena..._ubuntu14.04更换阿里云

随便推点

Solr是如何工作的?_solr 是如何工作的-程序员宅基地

文章浏览阅读45次。solr是基于Lucence开发的企业级搜索引擎技术,而lucence的原理是倒排索引。倒排索引:Demo1:A在吃饭Demo2:B在睡觉记录就变成了这样关键词 段落号(出现频率) 出现位置吃饭 1(1) 3在 1(1) 22(1) 2A 1(1) 1睡觉 2(1_solr 是如何工作的

Linux 学习路线图_linux学习路径-程序员宅基地

文章浏览阅读2.4w次,点赞60次,收藏551次。1.应用场景更加高效地学习并达到运用Linux 2.学习/操作 linux运维学习需要分为四个阶段:初级入门、中级进阶、高级提升、资深方向细化。 第一阶段:初级入门 初级阶段需要把linux学习路线搞清楚,任何学习都是循序渐进的,所以学linux也是需要有一定的路线。 初级入门: Linux基础知识、基本命令(起源、组成、常用命令如cp、ls、fi..._linux学习路径

kafka在zookeeper中对应目录_kafka在zookeeper上的目录-程序员宅基地

文章浏览阅读1.4k次。Zookeeper DirectoriesThe following gives the zookeeper structures and algorithms used for co-ordination between consumers and brokers.NotationWhen an element in a path is denoted [xyz], that m_kafka在zookeeper上的目录

Exchange 常见问题(转自微软论坛)_微软exchanger批量修改邮箱密码-程序员宅基地

文章浏览阅读4.7k次。来自望兄的总结。这些文档都是最基础的了。如果你有类似的不清楚的问题,这里都是比较权威的回答了。1.什么是邮件中继? 邮件中继是指将邮件转发到你所在域以外的域的能力。更具体地说,当使用与您的 SMTP 服务器的入站连接来向外部域发送电子邮件时,便发生了中继。 2.在Exchange 2003中,如何知道哪些SMTP域是你的权威域?打开Exchange Se_微软exchanger批量修改邮箱密码

vue3.0中setup如何使用_vue3 setup函数 可以用在配置项组件内吗-程序员宅基地

文章浏览阅读745次。组件中所有用到的:数据、方法、计算属性、监视属性、生命周期钩子都可以配置在setup中_vue3 setup函数 可以用在配置项组件内吗

C语言---单链表(详解)---数据结构_单链表c语言-程序员宅基地

文章浏览阅读3.1k次,点赞5次,收藏43次。单链表所需要的头文件重命名类型的意义在于以后还需要用到单链表时,存入的类型不一定时int类型,需要更改类型时,要一个个更改,非常麻烦,我们可以直接在这里修改,更加方便(这里的解释我上一篇也有提到)单链表用到的结构体这里我们把结构体重命名为ST单链表需要实现的功能有 1.申请一个新节点的内存空间 2.单链表的头部,尾部的插入和删除 3.单链表的查找 4.单链表查找后的插入和删除 5.单链表的打印 6.单链表的释放1.单链表的节点申请内存空间申请内存空间并不是直接使用,._单链表c语言

推荐文章

热门文章

相关标签