找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 13|回复: 0
打印 上一主题 下一主题

[硬件] 如何学习FPGA

[复制链接]

551

主题

1470

帖子

3万

积分

EDA365管理团队

Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

积分
39483
跳转到指定楼层
1#
发表于 2019-9-27 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

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

x
% ~0 G6 d5 j, l# ~

5 b( e9 d  x# p: s5 r  F    掌握FPGA可以找到一份很好的工作,对于有经验的工作人员,使用FPGA可以让设计变得非常有灵活性。掌握了 FPGA设计,单板硬件设计就非常容易(不是系统设计),特别是上大学时如同天书的逻辑时序图,看起来就非常亲切。但FPGA入门却有一定难度,因为它不像软件设计,只要有一台计算机,几乎就可以完成所有的设计。FPGA设计与硬件直接相关,需要实实在在的调试仪器,譬如示波器等。这些硬件设备一般比较昂 贵,这就造成一定的入门门槛,新人在入门时遇到一点问题或者困难,由于没有调试设备,无法定位问题,最后可能就会放弃。其实这时如果有人稍微指点一下,这 个门槛很容易就过去。  i" ^$ M( o! E9 s+ A: B( p# k
  我用FPGA做设计很多年了,远达不到精通的境界,只是熟悉使用,在这里把我对FPGA学习步骤理解写出来,仅是作为一个参考, 不对的地方,欢迎大家讨论和指正。
' k, Y  |- l$ y: }3 ?" D+ e
: `0 P6 k7 P8 v. p' a
; ?9 f* v/ F( ~8 e; f

8 y4 j: c1 ?9 {9 r
FPGA学习步骤1、工欲善其事,必先利其器。
1 b* |0 P  F$ U& ^1 y0 I$ }0 ]
' A. }, w, e5 E1 h
" [& X; @* R1 A# A( Y

" l6 Q6 h' ~& X; p7 s
计算机必不可少。目前FPGA应用较多的是Altera和xilinx这两个公司,可以选择安装quartusII或者ISE软件。这是必备的软件环境。

* N# i# l( P( J! |3 J! d
硬 件环境还需要下载器、目标板。虽然有人说没有下载器和目标板也可学习fpga,但那总是纸上谈兵。这就像谈女朋友,总是嘴上说说,通个电话,连个手都没 牵,能说人家是你朋友?虽说搭建硬件环境需要花费,但想想,硬件环境至多几百元钱,你要真的掌握FPGA的设计,起薪比别人都不止高出这么多。这点花费算 什么?
& g; {! W5 ^9 e0 [! ^( G
* W5 c" X: m% P: f9 G+ `$ T3 W( [
; L7 K1 C9 m' I. d- p6 [2 T$ b

% S* S5 @, o- q" x+ S6 y1 `
FPGA学习步骤2、熟悉verilog语言或者vhdl语言 ,熟练使用quartusII或者ISE软件。' T- {. T# H: `$ }  z
$ {0 C% m2 a$ O

  w- ?1 M5 K- I" x( F

- t4 C$ |! @- D7 A
VHDL和verilog各有优点,选择一个,建议选择verilog。熟练使用设计软件,知道怎样编译、仿真、下载等过程。

2 m  d& v) x% X. @  r0 e
起步阶段不希望报一些培训班,除非你有钱,或者运气好,碰到一个水平高、又想把自己的经验和别人共享的培训老师,不然的话,培训完后总会感觉自己是一个冤大头。入门阶段可以在利用网络资源完成。' M( g/ b- |% X2 M' Z+ {+ p0 i8 x
3 W; f! [' `1 a5 `* d
3 G5 U% i6 c6 m+ a0 y1 z& b

( j$ S5 @% P( l* V; p$ K
FPGA学习步骤3、设计一个小代码,下载到目标板看看结果5 ~% ~/ q5 @& E2 O( Q% N1 m6 d
0 n& P7 @) d. T

5 [% F* }! G: D5 V
1 k) }) j5 e# O4 {2 q
此时可以设计一个最简答的程序,譬如点灯。如果灯在闪烁了,表示基本入门了。如果此时能够下载到FPGA外挂的flash,FPGA程序能够从flash启动,表明FPGA的最简单设计你已经成功,可以到下一步。
8 Y( Y1 n7 G8 ~  O  K3 w* J7 q2 a4 {. z& x, t6 F
$ j+ m4 j7 N0 Z  k: U/ a8 R% L  g
$ S8 I$ J5 K3 G5 o
FPGA学习步骤4、设计稍微复杂的代码,下载到目标板看看结& b% d, W) y+ j  ?' q9 X* V6 J
& X9 u0 v  S. R  j& |7 H

4 a  o! y, J! y8 i* Q( J, \

: B8 e$ F$ [% l+ Z
可以设计一个UART程序,网上有参考,你要懂RS232协议和FPGA内置的逻辑分析仪。网上下载一个串口调试助手,调试一番,如果通信成功了, 恭喜,水平有提高。进入下一步。
5 m' `, ]; X6 K( n* f& p
* }) o, y6 d# J5 n# M- |( }: N' `" o$ ~2 i& s" |( Y0 K

: ~' ]5 ?( }: y; G% o1 @
FPGA学习步骤5、设计复杂的代码,下载到目标板看看结果。
$ W  P$ p+ p, D" U, o6 H# O- X
% Y5 x! e+ F. `* B8 Z
: `& G' L  T/ c0 r  M
% W% V0 U6 ^  u* T5 D: O5 a
譬如sdram的程序,网上也有参考,这个设计难度有点大。可用串口来调试sdram,把串口的数据存储到sdram,然后读回,如果成功,那你就比较熟悉FPGA设计了
# D5 ^, L+ `" P9 T. U  k# O; O/ Q" Y$ j' f6 k

& T' O6 a6 j- @6 @! ~1 P' x- u
, o  {  i! M. a1 k; J0 N
FPGA学习步骤6、设计高速接口,譬如ddr2或者高速串行接口
" P8 h3 w+ v' S& G& m* z  H  q: }" ?" P& u3 X- r

. f! j4 ^: J0 j. ~3 N# w$ B3 j8 g

% s  ^6 P* K+ }* B0 a. ?
这要对FPGA的物理特性非常了解,而且要懂得是时序约束等设计方法,要看大量的原厂文档,这部分成功了,那就对FPGA的物理接口掌握很深,你就是设计高手了' \4 U4 A" T0 u) Q; Z: o3 y5 N
* ?5 n" H( P: w# `1 M) Z
: \; z9 \. e2 D: ]
7 i: G/ m9 _/ W% _
FPGA学习步骤7、设计一个复杂的协议7 w, }# X5 o  T( D! E
5 E+ D7 \0 _; u

8 w: x* h6 s- Q

+ n- S8 W6 F, @4 N
譬如USB、PCIexpress、图像编解码等,锻炼对系统的整体把握和逻辑划分。完成这些,你就是一个一流的高手、3 F6 A; F3 A( k$ J

. n& W, n! }- W! o7 W$ |3 @9 K7 V. D9 ^. r  c; ]" \4 r

: n6 G7 k( P( o
FPGA学习步骤8、学习再学习
& ^6 Q3 ?# P6 N5 n8 p
; \4 E* R) j; ]' v/ I' V8 L  s+ p1 A2 h# }# V* p8 Q
5 X4 s  p$ k* E5 g) G# n8 j3 G
学习什么,我也不知道,我只知道“学无止境,山外有山”。
5 M3 V2 T! M+ r+ {" B! S
现在很多FPGA工程师,没找到合适,我觉得很多人从开始的时候就误入歧途了,对新手学习FPGA设计我也说一点看法吧。我认为要从基础开始做,基础牢,才有成为高手的可能。# j: I2 N2 C2 {4 w+ h5 v9 {4 C

/ }% Z! p9 ?) Q& X3 A$ \/ p/ G3 v' q6 S/ x
0 c" G6 L% ?, W, Z" m) o
我觉得FPGA学习有以下几步必须要走:
4 `. K" z+ Z/ ^2 _
第一步:学习了解FPGA结构,FPGA到底是什么东西,芯片里 面有什么,不要开始就拿个开发板照着别人的东西去编程。很多开发板的程序写的很烂,我也做过一段时间的开发板设计,我觉得很大程度上,开发板在误人子弟。 不过原厂提供的正品开发板,代码很优秀的,可以借鉴。只有了解了FPGA内部的结构才能明白为什么写Verilog和写C整体思路是不一样的。
8 c- d. r/ x2 B4 F, U+ o3 U% p4 J! M7 ~7 F  ]# R9 Y
, H3 T  t5 W' p, r9 Z5 O% p

1 |& T& F* Y* O2 }$ C) ]9 a# h
第二步:掌握FPGA设计的流程。了解每一步在做什么,为什么要那么做。很多人都是不就是那几步吗,有什么奇怪的?呵呵,我想至少有一半以上的人不知道synthesize和traslate的区别吧。

" {  J5 v, g5 c2 o
了解了FPGA的结构和设计流程才有可能知道怎么去优化设计,提高速度,减少资源,不要急躁,不要去在为选择什么语言和选择哪个公司的芯片上下功夫。语言只是一个表达的方式,重要的是你的思维,没有一个好的指导思想,语言用得再好,不过是个懂语言的人。
9 q# T6 c4 G1 d" o6 k0 ~1 t5 G# _; M
& m" @! l1 z" [) r8 m

  B& t! l. ~3 Q6 U: b6 A. u8 n
第三步:开始学习代码了。我建议要学代码的人都去Altera或Xilinx的网站上下原厂工程师的代码学习。不要一开始就走入误区。
7 D& Y% G; b; r+ Y4 A  |3 \
( ^! N. M6 Z, h3 S
& G/ ]  n0 |8 {: G. m$ P" U3 n

, U8 d. a3 _* A5 c1 x9 h+ ^  {2 w
第四步:template很重要。能不能高效利用FPGA资源,一是了解fpga结构,二是了解欲实现的逻辑功能和基本机构,三是使用正确的模板。FPGA内部器件种类相对较单一,用好模板,你的逻辑才能被高效的综合成FPGA擅长表达的结构)- E9 I4 z4 i6 R4 D) Z$ r

) M9 c& X9 A! w1 n% h/ U) j) a# F4 \$ C$ a1 }

* a; M  f; C: g- d* y
做FPGA主要是要有电路的思想,作为初学者,往往对器件可能不是熟悉,那么应该对于数字电路的知识很熟悉吧,FPGA中是由触发器和查找表以及互联线等基本结构组成的,其实在我们 在代码里面能够看到的就是与非门以及触发器,不要把verilog和c语言等同起来,根本就是不同的东西,没有什么可比性,在写一句程序的时候应该想到出 来的是一个什么样的电路,计数器选择器  三态门等等,理解时序,逻辑是一拍一拍的东西,在设计初期想的不是很清楚的时候可以画画时序图,这样思路会更加的清晰,还有就是仿真很重要,不要写完程序 就去往FPGA中去加载,首先要仿真,尤其是对比较大型一点的程序,想像自己是在做asic,是没有二次机会的,所以一定要把仿真做好,还有很多新手对于 语言的学习不知道选vhdl好还是verilog好,个人偏好verilog,当然不是说vhdl不好,反正写出来的都是电路,那当然就不要在语言的语法 上面花太多的功夫了,verilog 言简意赅assign always case if else  掌握这些几乎可以写出90%的电路了,上面是我对FPGA学习的一些愚见,希望对大家有所帮助。' S0 x; g: [0 S3 I
1 X" U  W9 D2 B4 C

2 U3 k) P# ?- T+ i4 y% o号外:香港应科院 LTE小基站基带核心技术发布会参观团召集——三重好礼等你拿!凡报名参加此次活动的前80位发烧友,我们将提供本届“中国电子信息博览会”(CITE)VIP嘉宾入场证,无需登记就可参观本届盛会!赶紧报名(微信报名回复“电子发烧友观展团+姓名+联系方式”或登录论坛报名)抢入场证啦!
# ^1 P* g3 C7 }7 f' h; F6 o- x3 a4 m& m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-3-7 10:32 , Processed in 0.055411 second(s), 32 queries , Gzip On.

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

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

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