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

FPGA的入门积累

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FPGA不是单片机
$ F* R, b/ ?% ]) u! `2 c
" N- V5 }: b0 V8 q# q4 C- T关于这点,很多人反复强调,但遗憾的是,把FPGA当单片机玩的人仍前赴后继。笔者琢磨着有可能是入门方法有误。
3 t5 i, }0 `! n2 i4 L0 W
8 y7 @- n: A. O* L/ `2 `6 x回想一下我们是咋学单片机的?买一本教材,了解一下IO口和控制字,然后开始画流程图,用C编程,做各种经典实验。
& j9 {3 Z" k4 L. c0 L! o" \% Q. ~- c; }
而当转到FPGA时,很自然的会借鉴“单片机模式”,买一本HDL的书,发现Verilog和C长还挺像,很轻松的啃完HDL,然后就开始“编程序”。待编完后,一点按钮,一口气从综合做到PAR(ISE和QuartusII都能一个按钮跑整个flow),然后仿真。仿真OK?皆大欢喜。不OK?改code。咋改?不清楚。9 E+ Y( _# ^5 }% z- P7 }
1 m& J, F' v5 n: H
这个过程中最大的问题在于把FPGA最大的硬件本色当成黑盒处理:黑盒的输入是code,输出是仿真。
( `% y; a. u" _& F
& F2 Q# x0 }- j/ D) J# O当把黑盒漂白成白盒,大致知道这盒子里有些啥,干了些啥,那在笔者看来才算是入门了。漂白粉是啥同志们应该猜到了:FPGA的结构。' O  I* Z( a( }) ?5 b

! _7 C5 p9 T, \1 o推荐阅读:
  z# _& b0 q9 I7 A# J& B$ ~
- A) g1 a& R% j2 b' t; [6 Ea) 采用Cyclone与Cyclone-II系列器件进行设计.pdf
# p; X! j# ~) O8 {% B* A& s4 P, Z' w9 I4 N. N6 V
b) altera: Cyclone II Device Handbook.volume13 C3 K6 [0 j: i5 M) f
$ {  A' i: e0 M7 Z& Q
c) xilinx: ug380~ug389(spartan6)
. r) U# }, F" w" u9 K
- G2 I( D0 A) s5.HDL不是C,结构决定HDL2 D' k# }/ U: I& \1 q  x$ `

$ e$ {6 g, j6 g上面说到FPGA的结构是漂白粉,这节承接上文继续:2 v9 `* g9 n3 U

$ c5 |" T. G: R8 S  ~时序逻辑的敏感列表为啥只能有时钟和复位?如下:
: K1 z/ E4 Q7 X9 _; O* Q* d- s1 Q0 X9 H. }+ k0 P/ X, h% e
always@(posedge clk or negedge rst_n)# E& }! }# j6 n. p% A

9 e' Q7 k4 U% J5 ]而不能再加个使能:
: q' m6 m) @. \
" b' e0 O$ v- r- e. j7 |always@(posedge clk or negedge rst_n or posedge CE)' T5 k, h' g2 t+ {

0 ?- s5 g* A+ [' J1 c' Y6 v也不能双沿触发:/ O" O+ }9 J) J3 l3 P5 h) h& a6 N' N, F
/ S* m3 I5 U/ k+ v! j4 z' O. B0 ?% ?
always@(posedge clk or negedge clk)8 i9 W( x3 n+ y! X) o
; C  K  N" W- U8 `9 ~+ k
也不能沿触发 + 电平触发:
" R4 ~8 s7 \* U- ~0 ^! p2 P" q0 j6 b* |/ J. ]: ~; R
always@(posedge clk or gated_logic)
" V$ g) K! K- ?& T4 O
2 L! [$ V+ x# r, s这一切究竟是为啥呢。。
' F6 @0 j/ U+ `* c; T: c% h# I+ i: [5 W1 k
无他,结构如此。下图是cycloneII的一个基本单元LE(logic element):% g4 A" k1 V/ w. `/ E

- u& a9 P# _, J+ n3 f7 E: w  E) |. y. [

6 L9 H. I3 S2 S0 g5 B. z右下角那个寄存器看到了吧,单沿触发,异步复位,同步使能。所谓结构决定HDL也。; F# v" x, ^- g# H' f
0 S8 Q9 ]+ b! W: h7 H
顺便再看一下寄存器的复位端有个小圆圈,表示低电平复位,所以我们这样写:* L& E) v& D9 {8 ]* h

! r$ R1 ~' [# halways@(posedge clk or negedge rst_n)" C6 T9 v2 E" \, G) r* B9 ]

* d/ t8 d" J8 J) I7 w+ Z再截个spartan3E的:, _/ w; L' a: X) o/ W
8 ?' x3 j$ ~3 c1 c; H! E

  L1 @7 u9 f$ Y' p5 T' m( N$ \& ]
: M5 ?* ~' n( c看出点名堂了吧。xilinx的寄存器是高电平复位,所以如果你是xilinx用户,那就要这样写:
4 @- Z  i/ p1 g$ p
( D2 _  T- T% qalways@(posedge clk or posedge rst_n)/ l& C# \+ a# X6 R
. }3 q  ?$ `! X: R. u0 n+ J
再来说一个经典的模型:FSM。为什么FSM推荐使用one-hot编码?如果读者有兴趣,可以做一个实验,会发现one-hot的解码电路一般都是小于4输入,也就是能用一个4输入LUT搞定。假设FPGA中的LUT是100输入,那即使解码电路再复杂点也能hold住了不是。; B8 [+ T2 _& w& v5 x8 o9 S
3 t8 E1 \  S/ t7 ^( \2 m
推荐阅读:3 Y+ l% N5 u' k) O( \8 N' `' d! o

# d- m0 f8 m" c! x; Pa) 设计与验证:Verilog HDL。0 t6 }9 s1 `' E7 g) F2 Z! k

, m  y5 q: N0 ^! G7 tb) Verilog HDL 程序设计与应用 王伟编( c2 l" D- o& R  O1 }9 s/ B7 c

% E# ?6 h9 u$ G7 g8 I: qc) Clifford E. Cummings的论文,http://www.sunburst-design.com/papers/
8 z" p4 O" k% k, X
% L3 c2 e6 l: ?  ?$ {  Jd) 大唐电信FPGAcpld数字电路设计经验分享
0 S5 l) Y8 B+ H7 E* k% P3 z. R# h0 |9 i; f' L8 F( m
6.掌握主动权
! _* e- B2 H; s( g; U: A, F- a2 R% V( B
由于综合器的算法限制,只有当我们的HDL满足一定的coding style,才能映射出我们想要的东西,比如前面说的对寄存器的建模对敏感列表的限制和要求。而有些复杂元件要求的coding style则更复杂,比如memory、乘法器。- J( Q/ S& b  J8 q$ ~: L
$ A8 j" a6 x4 P! q& s" B- A
这时更好的选择是直接调用软件提供的各种module,altera使用megawizard,xilinx使用core generator。这样不但直接告诉综合器我想要的是什么,把解释权掌握在设计人员自己手里,而且由于这些module一般都是经过优化(基于器件)后的网表,性能上会比自己写的更好,更灵活。
( y' F! T$ k- i: X  o8 \* o# }1 {/ Y+ _! e) {
当然调用module也意味着在不同vendor之间转换将成为一个额外的问题。所以有些设计为了兼容各家的产品而故意不使用module。  T/ u% i/ a( U
+ ?3 v$ p0 [( K" h& m
到这里为止,经常是新人止步的地方,即所有的精力和视野都放在数字前端。要成为高手,后端的内容具有一票否决权。

0 Z$ y- L- x+ t$ J4 A0 i; ~

该用户从未签到

2#
发表于 2019-8-1 19:08 | 只看该作者
谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-16 21:24 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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