队长 路飞的电子设计宝藏 4月16日

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

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

接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(又叫综合器),常用的集成开发环境有:Intel的Quartus、Xilinx的ISE和Vivado、Design Compiler 、Synopsys的VCS、Linux下的iverilog、Lattice的Diamond、Microchip的Libero、Synplify 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仿真(此外还有QuestaSim、NC 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也有类似的工具)制作属于自己的调试工具,此外,有时间的话,最好再学个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设计——计算机组成原理、单片机、计算机体系结构、编译原理、RISC-V

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

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

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

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

六、学会使用MATLAB仿真。

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

七、足量的实践。

这个时候你至少读过几遍芯片手册(官网有),然后可以针对自己的方向,做一定量的实践了(期间要保持良好的代码风格,增加元件例化语句的可读性,绘制流程图/时序图,撰写文档的习惯)。比如:通信类的可以做调制解调算法,仪表类的可以做总线分析仪等等。不过这些算法,在书上只是给了个公式、框图而已,跟实际的差距很大,你甚至会觉得书上的东西都很肤浅。那么,你可以在知网、百度文库、EETOP论坛、opencores、ChinaAET、SCI-HUB、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上面,如果这时你有前面第七个阶段的水平,你将轻松地独立完成图像算法设计(图像处理是离不开接口的,上面第五个阶段有讲)。如果你没有开发板,请参考《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#、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、深入理解底一层次,可以更好地使用高一层次。该法则可以适用于所有编程语言。

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

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

————————————————

版权声明:本文为CSDN博主「队长-Leader」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/k331922164/article/details/44626989

​自我介绍:B站资深恰饭Up,双985通信专业毕业,擅长高速数字电路设计(X86/FPGA/ARM等)。不定期分享硬件电路设计干货,知识体系,有趣专业实验。包括但不仅限于学习方法、模电、FPGA、小信号、高速电路、信号完整性、Layout、嵌入式、学习方法。已帮助成千上万电子专业学生和初级工程师入门成长。技术交流群集合了众多经验丰富的技术大牛,交流氛围极佳。我的宝藏都在这了。

如何学习FPGA,FPGA学习教程学习经验相关推荐

  1. 【从零开始的大数据学习】Flink官方教程学习笔记(一)

    Flink官方教程学习笔记 学习资源 基础Scala语法 Scala数据结构专题 声明变量 代码块 函数(function) 方法(methods) Traits (接口) class(类) tupl ...

  2. 深度学习(三十八)——深度强化学习(1)教程

    教程 http://incompleteideas.net/sutton/book/the-book-2nd.html <Reinforcement Learning: An Introduct ...

  3. Linux教程学习笔记

    Linux教程学习笔记 目录 Linux教程学习笔记 写在前面 虚拟机 Linux目录结构 远程登录Linux系统 vi和vim编辑器 关机.重启和用户登录注销 用户管理 实用指令 组管理和权限管理 ...

  4. paddleX使用教程学习笔记

    paddleX为百度飞浆一类产品,在数据标注.图像处理.模型训练方面简单实用,以下为用法学习笔记 paddleX使用教程学习笔记 PaddleX的安装 示例下载 使用步骤 导入数据集 新建项目 参数配 ...

  5. FPGA学习02——Quartus01安装教程.

    参考视频:<ALINX之01.quartus17.1安装> <------------------------------------------------------------ ...

  6. FPGA是什么?FPGA现状?怎样学习FPGA?

    FPGA介绍 FPGA是现场可编程门阵列的简称,FPGA的应用领域最初为通信领域,但目前,随着信息产业和微电子技术的发展,可编程逻辑嵌入式系统设计技术已经成为信息产业最热门的技术之一,应用范围遍及航空 ...

  7. FPGA第一天的学习-LED流水灯

    FPGA第一天的学习-LED流水灯 每一次玩一块新的开发板我们都会首先做出一个流水灯,所以我也做出一个流水灯并且结合网上教程和自己的理解来试着将代码理解得更透彻. 1.硬件部分 由原理图我们可以知道时 ...

  8. FPGA学习.0——FPGA是什么

    FPGA(Field Programmable Gate Array,简称FPGA),译文:现场可编程门阵列,一种主要以数字电路为主的集成芯片,于1985年由Xilinx创始人之一Ross Freem ...

  9. FPGA实现Sobel边缘检测学习心得

    参照了野火的教程学习了Sobel边缘检测,记录过程中的思考与问题. 工程目标是由串口传入图像数据,FPGA边缘检测后,将图像经过串口传回电脑.内容涉及RS232串口协议.FIFO卷积求和. 目录 一. ...

最新文章

  1. 你所不知道的日志异步落库
  2. Andriod: 在xml布局中使用自定义属性
  3. php获取ip写到文本,php 文本转HTML与获取IP函数
  4. java开发实战经典答案百度云,含面试题+答案
  5. tensorflow 学习资料汇总
  6. [CodeForces - 950D]A Leapfrog in the Array(思维)
  7. 移动端下拉刷新,向后台请求数据
  8. 简单的小说阅读网站JavaWeb项目
  9. 阿里百万架构师打造的 Java并发编程实战笔记,理论到实践一键吃透
  10. SecureCRT的下载、安装
  11. 2022-2027年中国民办高校行业市场调研及未来发展趋势预测报告
  12. adb官方最新下载链接和常用操作
  13. 信息学奥赛C++编程:计算分数加减表达式的值
  14. 黑苹果安装经验整理|再见丁小果
  15. 省教育厅关于印发《湖北省义务教育阶段信息技术课程指导意见(试行)》的通知
  16. win10运行安装软件程序提示“为了对电脑进行保护,已经阻止此应用” 有效解决方法记录
  17. 如何在CentOS 7上安装Elasticsearch,Logstash和Kibana(ELK堆栈)
  18. 应用内更新,直接跳转到对应手机应用市场
  19. 图纸上标注的是实际尺寸吗_尺寸数字应该标注图纸上所画实际长度。
  20. matlab计算轮廓曲率半径,【转】求最小曲率半径matlab源程序

热门文章

  1. 为什么外呼系统要收取坐席费呢,有没有免费的外呼系统?
  2. 我的个人博客成功上线咯
  3. 一日一书:机器学习及实践——从零开始通往kaggle竞赛之路
  4. centos搭建 Nginx 静态网站
  5. 如何用ceres进行两帧之间的BA优化
  6. 名片识别sdk助力于商务交流活动
  7. 关于Spring的三级缓存
  8. WAMP不能启动, 一直处于红色图标(正常启动为绿色)
  9. C语言期末考试可以运行嘛,C语言期末考试总结,看完保你过-
  10. 二线制仪表能用计算机电缆吗,DJYPVRP计算机电缆2x2x1.5型号规格含义