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

如何学习FPGA?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-1-27 13:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x

& ]) i! [/ r! J9 l2 v5 P+ m' ^/ W. E/ Z! h
一、入门首先要掌握HDL(HDL=verilog+VHDL)。
5 ~, E+ S+ @- h4 Z* Z& ~       第一句话是:还没学数电的先学数电。然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL。因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它。当然,你思维能转得过来,也可以选verilog,毕竟在国内verilog用得比较多。
7 G+ o7 U1 m6 e" _       接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器,常用的编译器有:Quartus、ISE、Vivado、Design Compiler 、Synopsys的VCS、iverilog、Lattice的Diamond、Microsemi/Actel的Libero、Synplify pro),然后再模仿着写,最后不看书也能写出来。编译完代码,就打开RTL图,看一下综合出来是什么样的电路。1 v9 _- Q# n$ M% y* l
       HDL是硬件描述语言,突出硬件这一特点,所以要用数电的思维去思考HDL,而不是用C语言或者其它高级语言,如果不能理解这句话的,可以看《什么是硬件以及什么是软件》。在这一阶段,推荐的教材是《Verilog HDL数字设计与综合》或者是《用于逻辑综合的VHDL》。不看书也能写出个三段式状态机就可以进入下一阶段了。% Y" X% Z& @8 p5 J
       此外,你手上必须准备Verilog或者VHDL的官方文档,《verilog_IEEE官方标准手册-2005_IEEE_P1364》、《IEEE Standard VHDL Language_2008》,以便遇到一些语法问题的时候能查一下。  }. p0 Q) ~1 D2 [5 S
       为什么不推荐学习NIOS II和MicroBlaze等软核?$ X6 g$ [$ J, ^" C: w' Y

8 }. X; R% u/ U4 ?+ B      1、性价比不高,一般的软核性能大概跟Cortex M3或M4差不多,用FPGA那么贵的东西去做一个性能一般的CPU,在工程上是非常不划算的。不如另外加一块M3。
# k  N7 I( A$ D      2、加上软核,可能会影响到其它的逻辑的功能。这是在资源并不十分充足的情况下,再加上软核,导致布局布线变得相当困难。
! v9 z7 ~4 [& x3 M) `$ C: K      3、软核不开源,出现Bug的时候,不容易调试。
# I7 n9 X& z: o% f/ u, R  T. ^) v二、独立完成中小规模的数字电路设计。
8 j3 X) h, m* p3 a3 i& Y       现在,你可以设计一些数字电路了,像交通灯、电子琴、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》。
% W  W5 [5 Y6 R8 T/ c* }! U
, K# L" F* D) K! {) D三、掌握设计方法和设计原则。8 g( Y' o" q& i, j6 V0 z2 O" f- `
       你可能发现你综合出来的电路尽管没错,但有很多警告。这个时候,你得学会同步设计原则、优化电路,是速度优先还是面积优先,时钟树应该怎样设计,怎样同步两个异频时钟等等。推荐的教材是《FPGA权威指南》、《IP核芯志-数字逻辑设计思想》、《Altera FPGA/cpld设计》第二版的基础篇和高级篇两本。学会加快编译速度(增量式编译、LogicLock),静态时序分析(timequest),嵌入式逻辑分析仪(signaltap)就算是通关了。如果有不懂的地方可以暂时跳过,因为这部分还需要足量的实践,才能有较深刻的理解。$ B: s8 q. ]+ n# D# s

4 C7 G: j8 D" M# T/ d0 W* l四、学会提高开发效率。* X' Y' }; j7 {/ @! w
        因为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语法手册》。
2 ^8 U: z2 N) N         掌握了TCL/TK之后,可以学习虚拟Jtag(ISE也有类似的工具)制作属于自己的调试工具,此外,有时间的话,最好再学个python。脚本,意味着一劳永逸。4 Q4 @8 T( n# v1 v

0 Q0 F' X, K, t' Q五、增强理论基础。" V+ w0 v0 ~2 a3 a: y4 d0 O
        这个时候,你已经会使用FPGA了,但是还有很多事情做不了(比如,FIR滤波器、PID算法、OFDM等),因为理论没学好。我大概地分几个方向供大家参考,后面跟的是要掌握的理论课。
) u' |6 j; F6 C2 W, p1、信号处理——信号与系统、数字信号处理、数字图像处理、现代数字信号处理、盲信号处理、自适应滤波器原理、雷达信号处理
  z  `4 m5 b- C  C+ I* F" K0 H$ E1 G- o0 }3 D8 F2 n% x
2、接口应用——如:UART、SPI、IIC、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G以太网接口)、SATA、光纤、DisplayPort- W, y$ s0 Z0 \, [

: F$ ~& S+ X; R7 s1 z& x3、无线通信——信号与系统、数字信号处理、通信原理、移动通信基础、随机过程、信息论与编码& U2 Y  R! r. N; y5 x( r/ d6 C
4、CPU设计——计算机组成原理、单片机、计算机体系结构、编译原理
1 \1 g7 f% E4 h0 c. |: h" `/ z6 `0 l6 o, M# j7 Q5 n
5、仪器仪表——模拟电子技术、高频电子线路、电子测量技术、智能仪器原理及应用, |% G' u# R2 V5 ^2 Q- i
6、控制系统——自动控制原理、现代控制理论、过程控制工程、模糊控制器理论与应用5 v9 ~4 f' |- D% E8 p0 \: O* J
7、压缩、编码、加密——数论、抽象代数、现代编码技术、信息论与编码、数据压缩导论、应用密码学、音频信息处理技术、数字视频编码技术原理
% q4 d( k8 ]4 q) g$ X. h! j
, v# T7 v% W/ q" v& [- c" R       现在你发现,原来FPGA会涉及到那么多知识,你可以选一个感兴趣的方向,但是工作中很有可能用到其中几个方向的知识,所以理论还是学得越多越好。如果你要更上一层,数学和英语是不可避免的。+ o( g) D: b% p4 Q' e; }- G( |' m( t, [
六、学会使用MATLAB仿真。) z# u1 f" `$ e6 w# w+ t
        设计FPGA算法的时候,多多少少都会用到MATLAB,比如CRC的系数矩阵、数字滤波器系数、各种表格和文本处理等。此外,MATLAB还能用于调试HDL(用MATLAB的计算结果跟用HDL算出来的一步步对照,可以知道哪里出问题)。推荐的教材是《MATLAB宝典》和杜勇的《数字滤波器的MATLAB与FPGA实现》。$ g, a+ C& G* t
七、足量的实践。
& e: ^. p6 @# n9 P8 P6 ^6 i) I* Y       这个时候你至少读过几遍芯片手册(官网有),然后可以针对自己的方向,做一定量的实践了(期间要保持良好的代码风格,增加元件例化语句的可读性,绘制流程图/时序图,撰写文档的习惯)。比如:通信类的可以做调制解调算法,仪表类的可以做总线分析仪等等。不过这些算法,在书上只是给了个公式、框图而已,跟实际的差距很大,你甚至会觉得书上的东西都很肤浅。那么,你可以在知网、百度文库、EETOP论坛、opencores、ChinaAET、Q群共享、博客上面找些相关资料(校外的朋友可以在淘宝买个知网账号)。其实,当你到了这个阶段,你已经达到了职业级水平,有空就多了解一些前沿技术,这将有助于你的职业规划。
6 b2 G$ l# c2 r' `        在工作当中,或许你需要关注很多协议和行业标准,协议可以在EETOP上面找到,而标准(如:国家标准GB和GB/T,国际标准ISO)就推荐《标准网》和《标准分享网》。' {# k) o0 h$ X' u

$ G0 ?  X8 ?3 l9 m& {8 g' W* B9 N八、图像处理。(这部分只写给想学图像处理的朋友,也是由浅入深的路线)) c7 T2 q# |. ^& q; M

9 Z/ ~3 p9 k5 C6 i2 D  v$ B1、Photoshop。花一、两周的时间学习PS,对图像处理有个大概的了解,知道各种图片格式、直方图、色相、通道、滤镜、拼接等基本概念,并能使用它。这部分是0基础,目的让大家对图像处理有个感性的认识,而不是一上来就各种各样的公式推导。推荐《Photoshop CS6完全自学教程》。
( k- m9 L9 w0 L$ X0 }3 ?- Q0 d
* M" F! R! D; `' B& y2、基于MATLAB或OpenCV的图像处理。有C/C++基础的可以学习OpenCV,否则的话,建议学MATLAB。这个阶段下,只要学会简单的调用函数即可,暂时不用深究实现的细节。推荐《数字图像处理matlab版》、《学习OpenCV》。- k* e& w8 _" w4 r: J
+ Q* a$ w3 [8 _, k& N4 X
3、图像处理的基础理论。这部分的理论是需要高数、复变、线性代数、信号与系统、数字信号处理等基础,基础不好的话,建议先补补基础再来。看不懂的理论也可以暂时先放下,或许学到后面就自然而然地开窍了。推荐《数字图像处理》。
0 Q, z$ x" U& q8 U* m: M
7 p6 E1 \7 |; Y) J4、基于FPGA的图像处理。把前面学到的理论运用到FPGA上面,如果这时你有前面第七个阶段的水平,你将轻松地独立完成图像算法设计(图像处理是离不开接口的,上面第五个阶段有讲)。推荐《基于FPGA的嵌入式图像处理系统设计》、《基于FPGA的数字图像处理原理及应用》。1 O7 e) `1 `; X( L7 |2 c
; X) X, M- {* d
5、进一步钻研数学。要在算法上更上一层,必然需要更多的数学,所以这里建议学习实分析、泛涵分析、小波分析等。6 v! \+ u  Y5 o6 U# k

" F4 K, p: ~+ o" z, p  U9 ?, R
! d2 c7 a* e% N4 p
$ J  d* D2 b$ U
' u3 p; U6 D) B7 H" e3 t& x& ~2 g$ [' {* g# |: V  j$ a, m

4 \- j% \2 @" k1 t6 Y8 v# N

该用户从未签到

2#
发表于 2021-1-27 13:33 | 只看该作者
建议使用Sublime text编辑器中代码片段的功能,以减少重复性劳动

该用户从未签到

3#
发表于 2021-4-26 22:11 | 只看该作者
学习了,感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-12 15:17 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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