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

FPGA的入门积累

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FPGA不是单片机$ H( K8 ^5 b' E0 R
% @( f& k1 B! q, a- f7 ]# x
关于这点,很多人反复强调,但遗憾的是,把FPGA当单片机玩的人仍前赴后继。笔者琢磨着有可能是入门方法有误。" ?( W: w% `& N+ b* o

# m7 L5 u7 |- w! }0 R5 q7 B# M回想一下我们是咋学单片机的?买一本教材,了解一下IO口和控制字,然后开始画流程图,用C编程,做各种经典实验。
+ M; n4 {. J$ ~% C: r9 [: y' Q8 [' M; d6 m4 ?$ h
而当转到FPGA时,很自然的会借鉴“单片机模式”,买一本HDL的书,发现Verilog和C长还挺像,很轻松的啃完HDL,然后就开始“编程序”。待编完后,一点按钮,一口气从综合做到PAR(ISE和QuartusII都能一个按钮跑整个flow),然后仿真。仿真OK?皆大欢喜。不OK?改code。咋改?不清楚。
/ p/ b% ~% ?, d$ V; y% B; m% {1 ?, D* _$ K
这个过程中最大的问题在于把FPGA最大的硬件本色当成黑盒处理:黑盒的输入是code,输出是仿真。1 T! u5 Z/ u3 v0 h- o# A* B* L
( t, W4 `' o3 t* ^
当把黑盒漂白成白盒,大致知道这盒子里有些啥,干了些啥,那在笔者看来才算是入门了。漂白粉是啥同志们应该猜到了:FPGA的结构。, O9 [$ Y/ S( Q' @: v1 c

& q6 W: a* s$ g9 ~; d% j推荐阅读:) F' }! J- x; m, n

  Z4 w7 k7 e6 r6 G( ~a) 采用Cyclone与Cyclone-II系列器件进行设计.pdf
" n& v/ ^5 P& _: P9 H* B! e- S) E6 _6 \2 K) D5 ?! b
b) altera: Cyclone II Device Handbook.volume14 ^( \/ V) v& E4 a; r! r2 y8 p
6 @- r4 Y% n0 G/ f: A1 G" k
c) xilinx: ug380~ug389(spartan6)
2 c! y; t& s7 [) x
$ }; l* B9 K+ A9 {6 w, Q5.HDL不是C,结构决定HDL; g, H4 f0 t% z1 M$ L
3 r( E# v8 B9 h6 {7 G2 W
上面说到FPGA的结构是漂白粉,这节承接上文继续:. H* x" S) @/ ^3 q6 I' d
) @0 V8 U- S% c- s* ?5 p# K2 [
时序逻辑的敏感列表为啥只能有时钟和复位?如下:
+ \  n- L7 n7 T, r9 m/ `& y& L/ D+ G; e7 p# E) Y+ f7 |3 C
always@(posedge clk or negedge rst_n)8 V4 \, b3 A2 y5 `6 t" R, t6 I/ d$ a

1 C  G/ s* r9 _- A  `而不能再加个使能:
9 o& {/ x) T( z* C- q, P4 v1 U7 L. X
always@(posedge clk or negedge rst_n or posedge CE)
# p" Q/ F% {( c! I/ k: E: \9 m7 T  p
也不能双沿触发:
, k, v) w$ N0 [3 }  u8 W
: U8 Q& R+ f$ Y" u& I/ b  ]- ualways@(posedge clk or negedge clk)7 t4 Q/ }3 x9 K6 X
# d" @* a) \6 t
也不能沿触发 + 电平触发:
+ U/ y2 R/ V& k1 b* y. \+ Y' L/ f& ~7 H/ G  g, f
always@(posedge clk or gated_logic)
8 B* A! ?6 \3 C# {
/ C* W% @0 {8 y! {这一切究竟是为啥呢。。
: t! x' l  i! Z# P* r  ~; p
( \& v* x/ u( t3 P" l7 P( E无他,结构如此。下图是cycloneII的一个基本单元LE(logic element):  i  }/ j( B6 a6 r/ B) f: k: b
* f& z  v, Z2 `- o8 @( q
6 K( F! |8 P9 w& e/ M
" e3 y, Z) Z5 R5 M, i
右下角那个寄存器看到了吧,单沿触发,异步复位,同步使能。所谓结构决定HDL也。
5 x+ i8 ?9 P; J2 K$ F  e) N' \' y3 _2 N$ n  [& A3 q+ V0 U7 T3 I
顺便再看一下寄存器的复位端有个小圆圈,表示低电平复位,所以我们这样写:
- x5 ]& C  {0 ~+ H- d' i  S" G, `- H; u4 _( |8 B+ F% c' M7 M- P
always@(posedge clk or negedge rst_n)
) v- x. P& c/ T* l7 e9 s8 ]6 x% Z2 \  q1 M8 C& x/ c# L
再截个spartan3E的:$ H& k6 M+ f! V: S4 B

: r: J2 G/ E/ s: z9 z- }
% n8 {$ ]6 p8 M( w' R* U' u2 `7 w' a: A# {( h: `
看出点名堂了吧。xilinx的寄存器是高电平复位,所以如果你是xilinx用户,那就要这样写:
3 k' r0 c' F* r( U5 n- }
2 _2 a6 ?: r) w4 g  [3 @7 {+ zalways@(posedge clk or posedge rst_n)
% k$ r1 ^& K: O5 [! M0 c/ E5 x3 |/ [4 V+ M
再来说一个经典的模型:FSM。为什么FSM推荐使用one-hot编码?如果读者有兴趣,可以做一个实验,会发现one-hot的解码电路一般都是小于4输入,也就是能用一个4输入LUT搞定。假设FPGA中的LUT是100输入,那即使解码电路再复杂点也能hold住了不是。) t9 u1 I3 w$ {. {- t1 }) y

+ W: X3 ?8 _2 j- S推荐阅读:
# s. b3 }7 B# O6 A+ z, ]
/ {0 E' P' I2 {0 Xa) 设计与验证:Verilog HDL。
- x+ P- E) g( Q/ h0 b4 d; q  D# t! s' a0 Z# f6 l: n" X6 B2 T
b) Verilog HDL 程序设计与应用 王伟编
4 u. m; x5 e0 C" K- Y# k. Z: V8 _
c) Clifford E. Cummings的论文,http://www.sunburst-design.com/papers/; X/ R+ ^9 a0 O" x, L6 i, w
* N0 R; `) Q( I- ~) p3 Z$ z
d) 大唐电信FPGAcpld数字电路设计经验分享5 c" ^7 A9 s. {! J6 F% l8 f- t
: ^1 y9 ~0 F4 y7 y
6.掌握主动权
+ @! z0 p( A2 j1 @
0 s# W$ U3 `/ u由于综合器的算法限制,只有当我们的HDL满足一定的coding style,才能映射出我们想要的东西,比如前面说的对寄存器的建模对敏感列表的限制和要求。而有些复杂元件要求的coding style则更复杂,比如memory、乘法器。
# S0 k. h# j7 _$ P
4 N# Z5 D0 o7 M7 l2 i6 H6 `这时更好的选择是直接调用软件提供的各种module,altera使用megawizard,xilinx使用core generator。这样不但直接告诉综合器我想要的是什么,把解释权掌握在设计人员自己手里,而且由于这些module一般都是经过优化(基于器件)后的网表,性能上会比自己写的更好,更灵活。1 {4 q  y" {" U  P5 ~! Z# H9 Y

) C- g6 Y  T5 T* V当然调用module也意味着在不同vendor之间转换将成为一个额外的问题。所以有些设计为了兼容各家的产品而故意不使用module。
! O# N4 o8 a; r5 K5 a3 A/ T
" q! Q8 n8 ^/ d# z% D; w到这里为止,经常是新人止步的地方,即所有的精力和视野都放在数字前端。要成为高手,后端的内容具有一票否决权。

8 s: _1 s" ~4 l; r

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-12 07:22 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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