如何学习FPGA

原文:https://blog.csdn.net/qq_22168673/article/details/90643220
原文:https://blog.csdn.net/k331922164/article/details/44626989 
 

一、入门首先要掌握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应用程序设计实例精讲》。在这一阶段,你要做到的是:给你一个指标要求或者时序图,你能用HDL设计电路去实现它。这里你需要一块开发板,可以选Altera的cyclone IV系列,或者Xilinx的Spantan 6。还没掌握HDL之前千万不要买开发板,因为你买回来也没用。这里你没必要每次编译通过就下载代码,咱们用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也是个比较常用的工具,Git也有比较功能。此外,你也可以使用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、HDMI

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研发1年,也不知道自己的发展方向。

所以,从FPGA接口通信入手,慢慢学习和了解吧。

希望自己逐步积累和掌握以下几个方向从业的基础知识,并具有一定的研发能力。

主要方向分以下个方向:

(1)接口通信类:

         简单通信接口SPI/UART/IIC,

        复杂一点的SDR SDRAM控制器设计、DDR3MIG的使用、PCIE控制器、Aurora、千兆以太网通信;

(2)数字信号处理类:FPGA数字信号处理

(3)数字图像处理类:FPGA数字图像处理

(4)通信编码类       :

(5)加密解密算法硬件实现:

 

学习,从大牛的博客开始!

辅助阅读相关专业书籍!

 

FPGA数字信号处理
博客学习:

 FPGADesigner的博客   : https://blog.csdn.net/FPGADesigner

李锐博恩(Reborn)     : https://blog.csdn.net/Reborn_Lee

 

相关书籍阅读:

《数字信号处理的FPGA实现》第四版

《数字滤波器的MATLAB与FPGA实现》

《数字信号处理――原理、算法与应用(第四版) [Digital Signal Processing,Fourth Edition]》

 

FPGA数字图像处理
博客学习:

angelbosj  视频拼接器  : https://blog.csdn.net/angelbosj?t=1

LakersNation                :  https://blog.csdn.net/lzy272942518?t=1

Pieces_thinking的博客   :   https://blog.csdn.net/pieces_thinking?t=1

灰巧克力爱松露              :   https://blog.csdn.net/shadow_guo

fzhykx                            : https://blog.csdn.net/fzhykx?t=1

libing64                          : https://blog.csdn.net/renshengrumenglibing

 

 

 

相关书籍阅读:

《数字信号处理的FPGA实现》第四版

《基于FPGA的数字图像处理原理及应用》

《数字图像处理(第三版)冈萨雷斯》

 

FPGA相关书籍
在FPGA领域相关专业的书籍并不是很多,下面仅是个人整理的一些可以参考阅读的书籍。

下面列举的书籍,大多是工具书,基本就入个门。

若想在一个领域深耕,则需要学习和了解该领域的专业和系统的知识,比如关于加密解密算法,深入学习的话需要掌握信息论、信息论与编码等更加专业知识。

不读书,何以进步?!

《Altera FPGA/CPLD设计(基础篇)(第2版)》

《Altera FPGA/CPLD设计(高级篇)(第2版)》

《FPGA原理和结构》天野英晴

《FPGA实战训练精粹》

《Xilinx FPGA 高速串行传输技术与应用》

《嵌入式高速串行总线技术 基于FPGA实现与应用》

《PCI Express 系统结构标准教材》

《无线通信FPGA设计》

《典型密码算法FPGA实现》

《数字信号处理的FPGA实现》第四版

《基于FPGA的数字图像处理原理及应用》

《数字图像处理(第三版)冈萨雷斯》

《数字滤波器的MATLAB与FPGA实现》

《数字信号处理――原理、算法与应用(第四版) [Digital Signal Processing,Fourth Edition]》

《Xilinx FPGA 权威设计指南 基于vivado2018集成开发环境》

《Xilinx FPGA 数字信号处理设计指南 从HDL、simulink到HLS的实现》

《Xilinx ZYNQ-7000嵌入式系统设计与实现》

《Xilinx FPGA开发使用教程》第二版

《FPGA快速系统原型设计权威指南》ps:这本书值得看看!

《数字设计和计算机体系结构》第二版

《兼容ARM9的软核处理器设计-基于FPGA》

《TCL/TK入门经典》

《UVM实战》

《The UVM Primer》

《Writing Testbenches using SystemVerilog》

《System Verilog1800-2012语法手册》

文件比较器Beyond compare

 

综合类:

桔色小西瓜             :  https://blog.csdn.net/sinat_25326461

ALIFPGA                :  https://blog.csdn.net/woshifennu1234?t=1

善良的一休君         :  https://blog.csdn.net/qq_39210023?t=1

 

软件类:

深海里的杂货铺      :  https://blog.csdn.net/ncut_nwpu?t=1

 

 

软件工具:

(1)熟练掌握Microsoft Visual Studio的调试流程,熟练掌握C++语言。

         没有学会的,要开始学习。

(2)熟练掌握MATLAB的使用方法,熟悉其编程环境;熟练掌握C语言。

          曾经学会的,不能忘记。

(3)熟练掌握Python、TCL软件工具。

(4)熟悉QT开发环境。

 

代码开源网站:

1、几个简单的Verilog Examples   :  http://www.asic-world.com/examples/verilog/index.html

2、联合开发网                                 :  http://www.pudn.com/

3、EETOP                                       :  http://bbs.eetop.cn/

 

 

32个FPGA开源网站
下面是转载,最初的原文链接暂时没找到。以后有时间,会查找一下原作者的原文链接。还请见谅!

1. OPENCORES.ORG
这里提供非常多,非常好的PLD了内核,8051内核就可以在里面找到。
进入后,选择project或者由http//www.opencores.org/browse.cgi/by_category进入。
对于想了解这个行业动态人可以看看它的投票调查。
http://www.opencores.org/polls.cgi/list
OpenCores is a loose collection of people who are interested in developing hardware, with a similar ethos to the free software movement. Currently the emphasis is on digital modules called 'cores', since FPGAs have reduced the incremental cost of a core to approximately zero. Activity is centered around the opencores web site
http://www.opencores.org - 中文
2. FPGAs are fun
提供了大量的关于FPGA应用的文章,项目实际例子。强烈推荐
http://www.fpga4fun.com/ - 外文
3. Open Collector
收集了大量的开源硬件,内核.它的分类非常清晰,不多说。
强烈推荐
http://opencollector.org/summary.php - 外文
4. The First Stop for the Latest ICs and Components
非常好的关于微处理器,DSP,可以编程控制器资讯的网站,更新非常快。强烈推荐一些领导级别的人常去,了解行业动态!
http://www.eeproductcenter.com/ - 外文
5. FPGA和CPLD可编程逻辑器件 - 莱迪思半导体公司
http://www.latticesemi.com.cn/ - 中文
6. Altera中文主页 强烈推荐
http://www.altera.com.cn/ - 中文
7. 强烈推荐FPGA学习。
http://www.epanorama.net/links/fpga.html - 外文
8. EDA Industry Working Groups
好像是官方网站,大量的相关资料与链接.
http://www.vhdl.org/ - 外文
9. 可编程逻辑器件 - Programable Logic Device
一个专门的关于可编程逻辑器件 - Programable Logic Device ( FPGA & CPLD )的网站,里面的资料比较全。里面有几个非常好的栏目:参考设计,应用文章,设计进阶。
http://www.pld.com.cn/ - 中文
10. 可编程逻辑器件 - Programable Logic Device
一个专门的关于可编程逻辑器件 - Programable Logic Device ( FPGA & CPLD )的网站,里面的资料比较全。里面有几个非常好的栏目:参考设计,应用文章,设计进阶。这里的BBS论坛人气也比较旺
http://www.pld.com.cn/bbs/index.asp - 中文
11. Andraka Consulting Group Home
包含了大量的算法比如FFT,FIR以及它们的DSP与FPGA实现等等。
http://www.andraka.com/toc.htm - 中文
12. www.fpga-faq.org
收集了大量的faq.对一些概论性的东西作了很好的解说。
初学者必去。
http://www.fpga-faq.org/ - 外文
13. Via Dev-page
提供许多非常新的开发项目,而且提供详细的有关资料。
文档下载http://via.dynalias.org/hw/
http://via.dynalias.org/ - 外文
14. Design And Reuse
The Web's System-On-Chip Design Resource - IP, Core, System-On-Chip
http://www.us.design-reuse.com/ - 外文
15. 硬件工程师之家(hardware Engineer
大量的电子开发资料,主要是硬件相关,计算机接口开发.推荐
http://www.3721it.com/ - 中文
16. FPGAworld
大量的资料下载,推荐.需要注册
http://www.fpgaworld.com/ - 外文
17. FPGA-Guide
This WEB-page is dedicated to all PLD / FPGA-designers
to find the best solution for their project
http://www.fpga-guide.com/ - 外文
18. SOCcentral
SOCcentral brings you the latest news about SOC/ASIC/FPGA design, EDA tools and design methodologies, intellectual property (IP), and design reuse. You'll also find the abstracts (and links) to more than 1600 relevant magazine and newspaper articles, tutorials, whitepapers, and application notes available on line, as well as the most comprehensive directory of EDA/design service/IP providers available anywhere on the Internet.
http://www.soccentral.com/ - 外文
19. EDACafe, the Leading EDA Portal
http://www.edacafe.com/ - 外文
20. FPGA and Programmable Logic Journal
http://www.fpgajournal.com/ - 外文
MCU+ALTERA注意了...........
21. FPGA.ch
有许多FPGA应用。
http://www.fpga.ch/ - 外文
22. NIOS μClinux Project
在NIOS处理器上移植uclinux,提供详细文档,电路。
http://www.enseirb.fr/~kadionik/embedded/uclinux/nios-uclinux.html - 外文
23. 中国可编程逻辑器件网 FPGA CPLD专业技术网站
提供可编程逻辑器件开发资料与开发板
http://www.81ic.com/ - 中文
24. Accellera的主页
一个收集了非常多的关于HDL标准的网站。
Accellera's mission is to drive worldwide development and use of standards required by systems, semiconductor and design tools companies, which enhance a language-based design automation process. Its Board of Directors guides all the operations and activities of the organization and is comprised of representatives from ASIC manufacturers, systems companies and design tool vendors.
http://www.accellera.org/activities/ - 外文
25. www.fpga4fun.com
www.fpga4fun.com网站收集的链接,非常实用。特色就是它把verilog与VHDL相关的链接作了分类汇总
http://www.fpga4fun.com/links.html - 外文
26. FPGA CPU News
收集了大量的关于FPGA,CPU的新闻,可以了解它们的发展动态。可惜很久很久没有更新了。
http://www.fpgacpu.org/ - 中文
27. FPGA-based Logic Analyzer
利用FPGA来进行逻辑分析,有上位机器VC的源代码实现,非常优秀,它不是利用MFC实现,我下载并且编译通过,有硬件电路图,PCB图,有PC104与并口接口。但是我没有找到VHDL代码。一个非常有用的实际性工程。可以
http://www.eebit.com/ - 外文
28. FPGA开发板网
尽管是买fpga开发板的,但也有小许资料下载。看看
http://www.fpgadev.com/ - 中文
29. DA开发技术网
Altera FPGA开发板,Altera CPLD开发板,Xilinx FPGA开发板, Xilinx CPLD开发板,cyclone开发板,cyclone2开发板,Spartan2开发板,Spartan3开发板,Mars-EDA
http://www.eda.org.cn/ - 中文
30. 线路人生51fpga
http://www.51fpga.com/ - 外文
31. 思恒科技-DSP、ARM、FPGA等开发的电子综合网站
公司网站,资料还不是很多,有时间可以看看。
http://www.siheng.cn/ - 中文
32. 中国集成电路设计平台开发网
里面有些不错的关于FPGA的资料,可以看看。
http://www.fpgastation.cn/ - 中文
 

 

 

 

 

 

PCIE(Peripheral Component Interconnect Express)是一种用于计算机系统中扩展设备的高速串行总线标准。FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,可以根据需要重新配置其电路。学习如何将PCIE与FPGA结合使用,可以为您提供更高性能和更灵活的硬件设计方案。 有几种方法可以学习PCIE学习FPGA的相关知识和技能: 1. 学习文档和教程:您可以查找和阅读关于PCIE和FPGA的相关文档和教程。这些资源通常包括PCIE和FPGA的基本概念、原理和应用示例等内容。这些资料可以帮助您建立起对PCIE和FPGA的基本了解。 2. 参加培训课程:有许多在线和实体的培训机构提供PCIE和FPGA的培训课程。这些课程通常涵盖PCIE和FPGA的理论知识、设计技巧和实际应用。通过参加这些课程,您可以系统地学习PCIE和FPGA的相关知识,并通过实践项目来锻炼您的技能。 3. 实践项目:通过实践设计和开发PCIE与FPGA的项目,您可以更深入地理解它们的工作原理和应用场景。您可以从简单的项目开始,逐步扩展到更复杂的项目。通过实践项目,您可以学习如何使用相关工具和软件来设计、实现和验证PCIE和FPGA的功能。 4. 参与社区和论坛:加入PCIE和FPGA的社区和论坛,与其他人分享经验、提问问题和获得帮助。这些社区和论坛通常有许多经验丰富的人员,可以与他们交流并学习他们的经验和见解。 总结起来,要学习PCIE与FPGA,您可以通过阅读文档和教程、参加培训课程、进行实践项目以及参与社区和论坛来获取相关知识和技能。这些方法的结合使用将帮助您掌握PCIE与FPGA的概念、原理和应用,并能够进行相关的设计和开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值