找回密码
 注册
关于网站域名变更的通知
查看: 370|回复: 1
打印 上一主题 下一主题

荐读:如何学习FPGA 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-25 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
荐读:如何学习FPGA 1 ~4 j0 [* r" l! Z5 N: G; f
3 R9 F+ \; H, O9 g

5 W; p" u6 r2 T7 D# N8 H大家好。又到了每日学习的时候了,近期很多人问我该如何去学FPGA,那么今天咱们就来聊一聊。        
8 p) p: c2 v, A" z1 ~
# z2 x' T) |4 W4 s) d8 d        一、入门首先要掌握HDL(HDL=verilog+VHDL)。
. ?) c" O, K6 i/ ]: ^# ]( i/ `; t' F8 ?2 s/ W  b7 L
       第一句话是:还没学数电的先学数电。然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL。因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它。当然,你思维能转得过来,也可以选verilog,毕竟在国内verilog用得比较多。9 C) E9 |' b4 b4 m! U7 I

, t. y  u. s3 W  X4 i: k4 M6 U       接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器,常用的编译器有:Quartus、ISE、Vivado、Design Compiler 、Synopsys的VCS、iverilog、Lattice的Diamond、Microsemi/Actel的Libero、Synplify pro),然后再模仿着写,最后不看书也能写出来。编译完代码,就打开RTL图,看一下综合出来是什么样的电路。
3 L& D+ z5 ~( s% _7 U
3 d: r% c: S8 G       HDL是硬件描述语言,突出硬件这一特点,所以要用数电的思维去思考HDL,而不是用C语言或者其它高级语言,如果不能理解这句话的,可以看《什么是硬件以及什么是软件》。在这一阶段,推荐的教材是《Verilog传奇》、《Verilog HDL高级数字设计》或者是《用于逻辑综合的VHDL》。不看书也能写出个三段式状态机就可以进入下一阶段了。; g# e8 g# [7 Y7 n' |& n

6 k' Z* L9 F( @. ^5 n& n( x       此外,你手上必须准备Verilog或者VHDL的官方文档,《verilog_IEEE官方标准手册-2005_IEEE_P1364》、《IEEE Standard VHDL Language_2008》,以便遇到一些语法问题的时候能查一下。+ X' L5 E6 p. A4 T
- P; ~# r' D2 }2 a7 t
        二、独立完成中小规模的数字电路设计。
8 K6 P4 U' w& M
/ s' h9 W/ }2 A7 K       现在,你可以设计一些数字电路了,像交通灯、电子琴、DDS等等,推荐的教材是夏老《Verilog 数字系统设计教程》(第三版)。在这一阶段,你要做到的是:给你一个指标要求或者时序图,你能用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》。
- {1 e# A  k% W/ y! I3 N  |; _3 {6 Y0 e% ~2 J
        三、掌握设计方法和设计原则。
  {9 W2 ]) U# W6 P9 Y. C& q# F& t0 s( E6 c! g
       你可能发现你综合出来的电路尽管没错,但有很多警告。这个时候,你得学会同步设计原则、优化电路,是速度优先还是面积优先,时钟树应该怎样设计,怎样同步两个异频时钟等等。推荐的教材是《FPGA权威指南》、《IP核芯志-数字逻辑设计思想》、《Altera FPGA/cpld设计》第二版的基础篇和高级篇两本。学会加快编译速度(增量式编译、LogicLock),静态时序分析(timequest),嵌入式逻辑分析仪(signaltap)就算是通关了。如果有不懂的地方可以暂时跳过,因为这部分还需要足量的实践,才能有较深刻的理解。+ V( N5 e+ l2 d# @' }" l
- n' d7 a. z& K
        四、学会提高开发效率。
3 o6 n; ?5 O% ~7 a  n: o5 Y. C! ~2 s2 ^6 ~
        因为Quartus和ISE的编辑器功能太弱,影响了开发效率。所以建议使用Sublime text编辑器中代码片段的功能,以减少重复性劳动。Modelsim也是常用的仿真工具,学会TCL/TK以编写适合自己的DO文件,使得仿真变得自动化,推荐的教材是《TCL/TK入门经典》。你可能会手动备份代码,但是专业人士都是用版本控制器的,所以,为了提高工作效率,必须掌握GIT。文件比较器Beyond Compare也是个比较常用的工具。此外,你也可以使用System Verilog来替代testbench,这样效率会更高一些。如果你是做IC验证的,就必须掌握System Verilog和验证方法学(UVM)。推荐的教材是《Writing Testbenches using SystemVerilog》、《The UVM Primer》、《System Verilog1800-2012语法手册》。
; G) ]: B' P# A8 \' f# W- W; {. ^) ~7 h5 n+ |9 X- [
         掌握了TCL/TK之后,可以学习虚拟Jtag(ISE也有类似的工具)制作属于自己的调试工具,此外,有时间的话,最好再学个python。脚本,意味着一劳永逸。
7 b4 e. `& @7 s0 _8 l& c+ A2 o- M$ w) ?1 r; g( W
        五、增强理论基础。) \1 t" E7 x  [5 T9 r. {! r
* u( y4 u7 q6 K, @
        这个时候,你已经会使用FPGA了,但是还有很多事情做不了(比如,FIR滤波器、PID算法、OFDM等),因为理论没学好。我大概地分几个方向供大家参考,后面跟的是要掌握的理论课。7 M0 B! Z% T4 D0 W) Q- g
3 M( G/ O% K( E" J+ O
        1、信号处理——信号与系统、数字信号处理、数字图像处理、现代数字信号处理、盲信号处理、自适应滤波器原理、雷达信号处理; P& C7 _( B0 X' [
( }* q. y- F6 M2 m. G
        2、接口应用——如:UART、SPI、IIC、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G以太网接口)、SATA、光纤、DisplayPort4 y0 |5 C+ A! Z
) f* F) j; g% O: Q7 k! r
        3、无线通信——信号与系统、数字信号处理、通信原理、移动通信基础、随机过程、信息论与编码
4 A, q- l$ u  \) `( t0 y' z7 E, m% h$ `8 C; c
        4、CPU设计——计算机组成原理、单片机、计算机体系结构、编译原理
5 |6 _5 U8 A+ J
+ E) c+ K* p  x  e5 e2 s' c        5、仪器仪表——模拟电子技术、高频电子线路、电子测量技术、智能仪器原理及应用1 U! K+ W3 [+ ~( }/ Y
7 Q7 }" p" S! V( g5 v7 i( t
        6、控制系统——自动控制原理、现代控制理论、过程控制工程、模糊控制器理论与应用( J9 k$ v$ }( b* X, k' e+ R
4 \" ]) a9 D" D. V* [) \0 Z
        7、压缩、编码、加密——数论、抽象代数、现代编码技术、信息论与编码、数据压缩导论、应用密码学、音频信息处理技术、数字视频编码技术原理
' Q) d# u5 {, A/ x
: V4 j& k$ o3 d  s       现在你发现,原来FPGA会涉及到那么多知识,你可以选一个感兴趣的方向,但是工作中很有可能用到其中几个方向的知识,所以理论还是学得越多越好。如果你要更上一层,数学和英语是不可避免的。8 i$ h. Y" O( ]

9 U3 X9 m: B% i1 @0 L4 ]9 y        六、学会使用MATLAB仿真。
, f9 U# S# g8 u3 l, e- A4 K6 R, z. T) e. l9 H, ]9 R
        设计FPGA算法的时候,多多少少都会用到MATLAB,比如CRC的系数矩阵、数字滤波器系数、各种表格和文本处理等。此外,MATLAB还能用于调试HDL(用MATLAB的计算结果跟用HDL算出来的一步步对照,可以知道哪里出问题)。推荐的教材是《MATLAB宝典》和杜勇的《数字滤波器的MATLAB与FPGA实现》。
) J  V* v- k% [3 k1 x. ]/ Z5 z! G  @% a/ ?: u! ]% {& F
        七、足量的实践。. A  Z+ w7 h& ?5 I
8 L8 M+ ^/ {" [. D$ }; G
       这个时候你至少读过几遍芯片手册(官网有),然后可以针对自己的方向,做一定量的实践了(期间要保持良好的代码风格,增加元件例化语句的可读性,绘制流程图/时序图,撰写文档的习惯)。比如:通信类的可以做调制解调算法,仪表类的可以做总线分析仪等等。不过这些算法,在书上只是给了个公式、框图而已,跟实际的差距很大,你甚至会觉得书上的东西都很肤浅。那么,你可以在知网、百度文库、EETOP论坛、opencores、ChinaAET、Q群共享、博客上面找些相关资料(校外的朋友可以在淘宝买个知网账号)。其实,当你到了这个阶段,你已经达到了职业级水平,有空就多了解一些前沿技术,这将有助于你的职业规划。
" z/ J6 P$ g8 C3 h, t  ^
  D6 l5 H5 R  Q        在工作当中,或许你需要关注很多协议和行业标准,协议可以在EETOP上面找到,而标准(如:国家标准GB和GB/T,国际标准ISO)就推荐《标准网》和《标准分享网》。
' j/ z" r" t' K2 e3 W- C( F' {$ j# ]/ O+ }; G5 H( H; I9 ~- T
        八、图像处理。(这部分只写给想学图像处理的朋友,也是由浅入深的路线)
7 W6 Q5 i' D3 o7 s8 K  b" C; }! u8 u0 b# ^/ D
        1、Photoshop。花一、两周的时间学习PS,对图像处理有个大概的了解,知道各种图片格式、直方图、色相、通道、滤镜、拼接等基本概念,并能使用它。这部分是0基础,目的让大家对图像处理有个感性的认识,而不是一上来就各种各样的公式推导。推荐《Photoshop CS6完全自学教程》。
. W) H  \6 h: k- _: |2 f' w; R4 E. o0 q$ S
        2、基于MATLAB或OpenCV的图像处理。有C/C++基础的可以学习OpenCV,否则的话,建议学MATLAB。这个阶段下,只要学会简单的调用函数即可,暂时不用深究实现的细节。推荐《数字图像处理matlab版》、《学习OpenCV》。2 @4 l+ U  S5 J! q3 G
' G4 h6 t! \; c. R6 C0 w$ |
        3、图像处理的基础理论。这部分的理论是需要高数、复变、线性代数、信号与系统、数字信号处理等基础,基础不好的话,建议先补补基础再来。看不懂的理论也可以暂时先放下,或许学到后面就自然而然地开窍了。推荐《数字图像处理》。& C- y- b* _+ A. t* f. K% p2 L

+ b, }: |/ m' Y# n        4、基于FPGA的图像处理。把前面学到的理论运用到FPGA上面,如果这时你有前面第七个阶段的水平,你将轻松地独立完成图像算法设计(图像处理是离不开接口的,上面第五个阶段有讲)。推荐《基于FPGA的嵌入式图像处理系统设计》、《基于FPGA的数字图像处理原理及应用》。
2 U, I  i" o4 H; c) U. f4 U6 ^
8 y# a6 f' g& Z8 r. j# x        5、进一步钻研数学。要在算法上更上一层,必然需要更多的数学,所以这里建议学习实分析、泛涵分析、小波分析等。  ^: R/ z7 B+ [& s- Y7 r' d+ Z
& a1 v; s5 S# J' }
        下面这两个阶段是给感兴趣的朋友介绍的。) J" v6 M# J% w! |! a

4 J* d5 g+ r! v. q0 z2 c        九、数电的尽头是模电。
6 j7 F0 m& V1 S( Q# F4 ^4 `0 I0 ]. g5 G7 j0 t
       现在FPGA内部的事情是难不到你的,但是信号出了FPGA,你就没法控制了。这个时候必须学好模电。比如:电路分析、模拟电子技术、高频电子线路、PCB设计、EMC、SI、PI等等,能设计出一块带两片DDR3的FPGA开发板,就算通关了。具体的学习路线可以参考本博客的《如何学习硬件设计——理论篇》和《如何学习硬件设计——实践篇》。8 ]: B/ Y! }2 c

" W3 C7 u8 G3 q0 p        十、学无止境。6 E1 \& \& h7 V3 Z
4 {1 _! T" K' Y) x0 \2 {3 ~
       能到这个境界,说明你已经很厉害了,但是还有很多东西要学的,因为FPGA常常要跟CPU交互,也就是说你得经常跟软件工程师交流,所以也得懂点软件方面的知识。比如ARM(Xilinx的ZYNQ和Altera的SOC会用到ARM的硬核,请参考本博客的《如何学习嵌入式软件》)、DSP、Linux、安卓、上位机(QT、C#、JAVA)都可以学一下,反正学无止境的。
+ I7 p# A4 y' ~' Y' k7 K+ ]4 }/ j# v* m8 Y0 u7 ]
        十一、其它问题。
# ~( M% g1 L2 q1 p7 Z9 _% B" [* T9 ~9 z9 h0 j- ?5 s
        a、为什么不推荐学习NIOS II和MicroBlaze等软核?+ @- V4 o: }$ ?- N: w  d, p! o# F7 \. |2 M

* h5 n$ r! C) j$ t, K$ j& c& D  ?2 P- M# m
      1、性价比不高,一般的软核性能大概跟Cortex M3或M4差不多,用FPGA那么贵的东西去做一个性能一般的CPU,在工程上是非常不划算的。不如另外加一块M3。" H) }; s. p& m) X9 Y

- _( I5 y, ^3 Z0 M/ R# J      2、加上软核,可能会影响到其它的逻辑的功能。这是在资源并不十分充足的情况下,再加上软核,导致布局布线变得相当困难。
  L$ w/ X& h  U" V* t2 y' ~" ^5 x, C# l) x: T; B; z
      3、软核不开源,出现Bug的时候,不容易调试。
! ?- O% K% d9 U* {
. D3 w: e  V9 k# M0 ]      4、工程上很少使用,极有可能派不上用场。4 `; Y% l, Z4 K$ s7 x( j: ]

2 n# \! w+ g8 e- u$ jb、为什么不推荐0基础学习ZYNQ或SOC?; Z; e% a4 i8 z* h5 o
- X3 ~0 e3 |& G# |8 \9 p: b) W
      1、容易让人有傍同心理。傍同心理是指一个人通过渲染与自己有亲近关系的人的杰出,来掩盖和弥补自己在这方面的不足,从而获得心理上的平衡。自己在学习很厉害的东西,然后也感觉自己很厉害,但这只是错觉而已。- T% M5 _1 W4 Y, e8 K
3 _! C9 D& J* I% H; Q0 h
      2、入门应该学习尽量简单的东西,要么专心学习ARM,要么专心学习FPGA。这样更容易有成就感,增强信心。" K6 t% `# K1 |3 j# r  c

0 H4 }* n- a) L7 y* X      3、ZYNQ和SOC的应用领域并不广,还有很多人没听过这种东西,导致求职的不利。7 P5 V( W( |+ `* Q, U1 w
. ]  Y0 P5 o; I
      4、开发工具编译时间长,浪费较多时间。
, Q9 n/ s6 ?: w/ |! A% `, `; E$ V: u) a
      5、绝大多数工作,都只是负责一方面,也就是说另一方面,很有可能派不上用场。
+ e- ~5 b9 o5 t8 I
7 o# x* ~; K1 V9 Cc、为什么已经存在那么多IP核,仍然需要写HDL?
  }( k. e1 g; g% f0 c5 @7 a2 o, W$ M& |2 x  o, T
      1、问这种问题的,一般是学生,他们没有做过产品,没有遇到过工程上的问题。
' E0 E6 S/ A2 `* O4 K0 D) i( A0 d1 `2 K, n" ?9 f9 Y7 z( y
      2、IP核并非万能,不能满足所有需求。
) Q" I: \* Z. X( w7 {
. r7 d9 A# w% R3 F+ @) |. ~      3、尽量少用闭源IP核,一旦出问题,这种黑匣子很可能让产品难产。+ X/ s' z* l& u3 O

3 j& Y9 E9 C) s5 E8 a2 C      4、深入理解底一层次,可以更好地使用高一层次。该法则可以适用于所有编程语言。

该用户从未签到

2#
发表于 2019-3-25 15:59 | 只看该作者
写的很有深度啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 18:29 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表