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

荐读:如何学习FPGA 

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
荐读:如何学习FPGA
% L4 l: v! @9 u' Y5 ?# m" u* o

# m$ T0 j/ [( p" w' e6 x
! e) D7 _/ W4 N' {2 M大家好。又到了每日学习的时候了,近期很多人问我该如何去学FPGA,那么今天咱们就来聊一聊。        
2 \3 M1 g" `' i8 k3 Y/ z& V4 U4 W- P' O, H
        一、入门首先要掌握HDL(HDL=verilog+VHDL)。
8 o- w% ^  A, K3 _$ O0 u$ F% p7 i( ~% [  T" M+ v7 q# B* g
       第一句话是:还没学数电的先学数电。然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL。因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它。当然,你思维能转得过来,也可以选verilog,毕竟在国内verilog用得比较多。
0 i3 I5 \; P2 G! u6 [, L0 r
6 B  o5 A1 z  e       接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器,常用的编译器有:Quartus、ISE、Vivado、Design Compiler 、Synopsys的VCS、iverilog、Lattice的Diamond、Microsemi/Actel的Libero、Synplify pro),然后再模仿着写,最后不看书也能写出来。编译完代码,就打开RTL图,看一下综合出来是什么样的电路。
% @2 K" t/ U" j% f
. q: [6 i" p5 R- Z; H- A" H       HDL是硬件描述语言,突出硬件这一特点,所以要用数电的思维去思考HDL,而不是用C语言或者其它高级语言,如果不能理解这句话的,可以看《什么是硬件以及什么是软件》。在这一阶段,推荐的教材是《Verilog传奇》、《Verilog HDL高级数字设计》或者是《用于逻辑综合的VHDL》。不看书也能写出个三段式状态机就可以进入下一阶段了。
6 F7 f  H/ u0 T- N" c% n
# v* f" ?9 c4 D: S7 n5 l# V+ s0 n3 s       此外,你手上必须准备Verilog或者VHDL的官方文档,《verilog_IEEE官方标准手册-2005_IEEE_P1364》、《IEEE Standard VHDL Language_2008》,以便遇到一些语法问题的时候能查一下。
6 I( ~! G7 d& w" S& C+ ^3 K$ A" h- J$ o5 L& z1 t/ y1 |
        二、独立完成中小规模的数字电路设计。, [$ [; B8 m3 h- W1 H. k& B

: k9 y7 a. v6 U  E- G       现在,你可以设计一些数字电路了,像交通灯、电子琴、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》。
( M! ]) ?) k( ], d; S- _5 d5 u/ E6 E  Y* ?# @  a1 ~2 R
        三、掌握设计方法和设计原则。/ N) {  m; }( m& Z# S) H+ Z
; k+ c: e3 D% i, Y! m
       你可能发现你综合出来的电路尽管没错,但有很多警告。这个时候,你得学会同步设计原则、优化电路,是速度优先还是面积优先,时钟树应该怎样设计,怎样同步两个异频时钟等等。推荐的教材是《FPGA权威指南》、《IP核芯志-数字逻辑设计思想》、《Altera FPGA/cpld设计》第二版的基础篇和高级篇两本。学会加快编译速度(增量式编译、LogicLock),静态时序分析(timequest),嵌入式逻辑分析仪(signaltap)就算是通关了。如果有不懂的地方可以暂时跳过,因为这部分还需要足量的实践,才能有较深刻的理解。" ]9 {  R0 h$ r

5 K. u  c; ~: C# w  i' h        四、学会提高开发效率。
4 N# @+ Z7 g7 Y1 n) N; T( q' O' Q: L0 A* G) T; F! M
        因为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语法手册》。
' q; I, z5 F# Z# l% H# a5 p' e
4 B2 i: J% Y6 k, `1 A. O/ Q5 X         掌握了TCL/TK之后,可以学习虚拟Jtag(ISE也有类似的工具)制作属于自己的调试工具,此外,有时间的话,最好再学个python。脚本,意味着一劳永逸。: |4 t3 L' L3 ^: t4 Z
3 S& y) E- }7 X; V# H6 B% A
        五、增强理论基础。
8 k- @! [- ~/ C, H$ X4 c, b5 ~% }' X
        这个时候,你已经会使用FPGA了,但是还有很多事情做不了(比如,FIR滤波器、PID算法、OFDM等),因为理论没学好。我大概地分几个方向供大家参考,后面跟的是要掌握的理论课。
" g/ m6 A; f, N; d8 g0 n6 x5 g( u8 {% S- I6 p
        1、信号处理——信号与系统、数字信号处理、数字图像处理、现代数字信号处理、盲信号处理、自适应滤波器原理、雷达信号处理- X, V7 k2 @0 e& K+ M# b9 z. b

$ {$ |4 \4 E0 z3 y        2、接口应用——如:UART、SPI、IIC、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G以太网接口)、SATA、光纤、DisplayPort* q' z1 A2 ~& _1 @# v

8 U3 d8 C$ W3 `* K        3、无线通信——信号与系统、数字信号处理、通信原理、移动通信基础、随机过程、信息论与编码7 f# L6 V9 X& S0 C

# F+ c  k9 w) S6 ~" @* x6 ]        4、CPU设计——计算机组成原理、单片机、计算机体系结构、编译原理
, Y) E6 E& y% ?5 M8 W7 H' d+ S8 d# V: {% `
        5、仪器仪表——模拟电子技术、高频电子线路、电子测量技术、智能仪器原理及应用5 l2 @- Y% u( I* a( e
$ o/ j9 V; g5 F7 y; M* m. F  `# p
        6、控制系统——自动控制原理、现代控制理论、过程控制工程、模糊控制器理论与应用
# A. T! h7 @1 k4 o0 ~; O
5 q$ W2 R$ V' `: M  p: ^4 [        7、压缩、编码、加密——数论、抽象代数、现代编码技术、信息论与编码、数据压缩导论、应用密码学、音频信息处理技术、数字视频编码技术原理, o, H1 i" k7 U0 Q  N0 ^$ R0 S
5 H+ t/ C! p, c2 d: q! D; I5 {: q
       现在你发现,原来FPGA会涉及到那么多知识,你可以选一个感兴趣的方向,但是工作中很有可能用到其中几个方向的知识,所以理论还是学得越多越好。如果你要更上一层,数学和英语是不可避免的。. _1 f/ h- L8 M' c

( p7 Q5 Y, l3 ?. H+ ?1 y# V) V        六、学会使用MATLAB仿真。
! l2 {5 z) j" m; k, A# \# A' ^3 j! L5 _4 }4 M% C  w4 J
        设计FPGA算法的时候,多多少少都会用到MATLAB,比如CRC的系数矩阵、数字滤波器系数、各种表格和文本处理等。此外,MATLAB还能用于调试HDL(用MATLAB的计算结果跟用HDL算出来的一步步对照,可以知道哪里出问题)。推荐的教材是《MATLAB宝典》和杜勇的《数字滤波器的MATLAB与FPGA实现》。
: r6 f! [4 g' f. c, a: L9 O4 u  W( T8 e$ k$ \8 d& t* C  {
        七、足量的实践。
: X. Z6 }/ C4 J4 E. c% p  l
* Z, G+ @% U" x       这个时候你至少读过几遍芯片手册(官网有),然后可以针对自己的方向,做一定量的实践了(期间要保持良好的代码风格,增加元件例化语句的可读性,绘制流程图/时序图,撰写文档的习惯)。比如:通信类的可以做调制解调算法,仪表类的可以做总线分析仪等等。不过这些算法,在书上只是给了个公式、框图而已,跟实际的差距很大,你甚至会觉得书上的东西都很肤浅。那么,你可以在知网、百度文库、EETOP论坛、opencores、ChinaAET、Q群共享、博客上面找些相关资料(校外的朋友可以在淘宝买个知网账号)。其实,当你到了这个阶段,你已经达到了职业级水平,有空就多了解一些前沿技术,这将有助于你的职业规划。# E8 t: l0 J4 B! ?9 Q' M5 @
; f8 p" J$ ^+ v
        在工作当中,或许你需要关注很多协议和行业标准,协议可以在EETOP上面找到,而标准(如:国家标准GB和GB/T,国际标准ISO)就推荐《标准网》和《标准分享网》。
1 A, O+ P$ G: D1 x; h3 Q, @4 y. L* }# [8 |
        八、图像处理。(这部分只写给想学图像处理的朋友,也是由浅入深的路线)
- s1 n; v: X/ u2 {3 R2 Z4 p
! N( L' ~6 S( ]* ^- b        1、Photoshop。花一、两周的时间学习PS,对图像处理有个大概的了解,知道各种图片格式、直方图、色相、通道、滤镜、拼接等基本概念,并能使用它。这部分是0基础,目的让大家对图像处理有个感性的认识,而不是一上来就各种各样的公式推导。推荐《Photoshop CS6完全自学教程》。
+ ^+ N$ `: S) z% n# Z( ^; T' _# @# D$ a9 T- B2 `4 ~7 k, i% t
        2、基于MATLAB或OpenCV的图像处理。有C/C++基础的可以学习OpenCV,否则的话,建议学MATLAB。这个阶段下,只要学会简单的调用函数即可,暂时不用深究实现的细节。推荐《数字图像处理matlab版》、《学习OpenCV》。
& J9 a  q# X# m2 B3 j) F6 f8 O
: R  S4 B5 C- a! W& ~; {        3、图像处理的基础理论。这部分的理论是需要高数、复变、线性代数、信号与系统、数字信号处理等基础,基础不好的话,建议先补补基础再来。看不懂的理论也可以暂时先放下,或许学到后面就自然而然地开窍了。推荐《数字图像处理》。% O* ?7 r6 Y' H4 P0 y
7 s3 `0 e! u* G
        4、基于FPGA的图像处理。把前面学到的理论运用到FPGA上面,如果这时你有前面第七个阶段的水平,你将轻松地独立完成图像算法设计(图像处理是离不开接口的,上面第五个阶段有讲)。推荐《基于FPGA的嵌入式图像处理系统设计》、《基于FPGA的数字图像处理原理及应用》。
1 S9 t6 ~, [" {& a" M" g1 t5 b- j" ^# k& \7 I
        5、进一步钻研数学。要在算法上更上一层,必然需要更多的数学,所以这里建议学习实分析、泛涵分析、小波分析等。$ Y7 M/ y+ g8 e# z, X) \" V. [- t
6 s, {- ^9 j( c- t& S# T% K
        下面这两个阶段是给感兴趣的朋友介绍的。
9 C2 w/ A5 }6 Q6 L4 q5 I) b/ a+ ^9 r: w) ]) }" K9 i) c7 [: C% s5 t
        九、数电的尽头是模电。* G, T0 |' Z# t' P5 \
: a( Z4 o  s) M- \$ I8 f( G
       现在FPGA内部的事情是难不到你的,但是信号出了FPGA,你就没法控制了。这个时候必须学好模电。比如:电路分析、模拟电子技术、高频电子线路、PCB设计、EMC、SI、PI等等,能设计出一块带两片DDR3的FPGA开发板,就算通关了。具体的学习路线可以参考本博客的《如何学习硬件设计——理论篇》和《如何学习硬件设计——实践篇》。
! w' I* g5 V5 }. f
0 m& v9 z+ @% Q        十、学无止境。
8 w6 ]1 j6 X2 K/ E/ Y& K
" ]0 |3 }- U. F       能到这个境界,说明你已经很厉害了,但是还有很多东西要学的,因为FPGA常常要跟CPU交互,也就是说你得经常跟软件工程师交流,所以也得懂点软件方面的知识。比如ARM(Xilinx的ZYNQ和Altera的SOC会用到ARM的硬核,请参考本博客的《如何学习嵌入式软件》)、DSP、Linux、安卓、上位机(QT、C#、JAVA)都可以学一下,反正学无止境的。& `: Z% e( v8 J7 w& S

' u+ r7 X7 s( Q5 s        十一、其它问题。
  }  w( C3 G& H7 `5 h6 @# w
0 s3 M% G, \8 \8 ?/ b        a、为什么不推荐学习NIOS II和MicroBlaze等软核?( z( H( W: j( L2 ^; _, q

9 x1 I4 N6 \$ ]2 g
  u3 r  m* R  G3 C8 o      1、性价比不高,一般的软核性能大概跟Cortex M3或M4差不多,用FPGA那么贵的东西去做一个性能一般的CPU,在工程上是非常不划算的。不如另外加一块M3。
3 C. |" |, m4 \$ p! \2 j$ y: g
( r+ r5 i; v' B. e      2、加上软核,可能会影响到其它的逻辑的功能。这是在资源并不十分充足的情况下,再加上软核,导致布局布线变得相当困难。
, a0 x, g' S) l+ n
4 f' b/ U- ]: S      3、软核不开源,出现Bug的时候,不容易调试。
  b# I" T0 m7 M* g# g+ K: F
0 ^7 p) V1 C, F/ i% p      4、工程上很少使用,极有可能派不上用场。3 I" |! h  }! h+ N$ A" t
3 i5 |: }  c: h; x' r
b、为什么不推荐0基础学习ZYNQ或SOC?3 Q' z- h8 x! t! @% b" S
* ]3 T& K# u2 h: [0 x( ]0 `2 v
      1、容易让人有傍同心理。傍同心理是指一个人通过渲染与自己有亲近关系的人的杰出,来掩盖和弥补自己在这方面的不足,从而获得心理上的平衡。自己在学习很厉害的东西,然后也感觉自己很厉害,但这只是错觉而已。
; V0 N0 |3 A7 L( p9 q# I$ d- O# R. e* S3 C  i' B! `
      2、入门应该学习尽量简单的东西,要么专心学习ARM,要么专心学习FPGA。这样更容易有成就感,增强信心。
* Z, y! e& j. t/ \* _) e7 r  n2 D/ A- H0 H2 ^
      3、ZYNQ和SOC的应用领域并不广,还有很多人没听过这种东西,导致求职的不利。8 f' O0 Z$ I2 d% k3 R
0 ^0 h9 O1 A! U
      4、开发工具编译时间长,浪费较多时间。% V6 g! o" F; u- o

6 W4 y8 \- e) ^# b9 }" K      5、绝大多数工作,都只是负责一方面,也就是说另一方面,很有可能派不上用场。
9 E6 v3 V( O5 P9 R, B& ?! ^
1 J, F* n5 P% {" F) ?c、为什么已经存在那么多IP核,仍然需要写HDL?
6 T* _- D  W* C1 y7 z! w  ]  |0 o& J# t7 V+ _" A$ }
      1、问这种问题的,一般是学生,他们没有做过产品,没有遇到过工程上的问题。
! {  U1 J* d9 P( z6 H+ Q5 X/ E" Z( @6 {9 M7 c6 W2 m
      2、IP核并非万能,不能满足所有需求。1 i( `6 b' R) {; ^, [8 }* u3 I

0 i/ N/ {$ U1 `- j7 e      3、尽量少用闭源IP核,一旦出问题,这种黑匣子很可能让产品难产。
6 d9 S7 n" T- G: i) s
2 F1 z# S8 w  W8 g      4、深入理解底一层次,可以更好地使用高一层次。该法则可以适用于所有编程语言。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-29 13:01 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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