|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基础知识" d1 q& `. q* r' ^" b
FPGA即现场可编程门阵列(Field Programmable Gate Arry),与之对应的是FPAA现场可编程模拟阵列(Field Programmable Analog Array)。这是一种可以通过重新编程来实现用户所需逻辑电路的半导体器件1 N- K% ~5 c& Y
: m1 D7 V0 e. G- C9 Q% D
布尔代数
0 z9 v, |# X8 e8 R布尔运算是一种二值运算,在布尔运算中,运算数只有0或1,基本运算有与 ·、或 +、非 ~三种,可以通过这三种基本运算构造出异或、与非等等运算+ b/ q; k2 w4 p$ S) W6 p
{* D! E3 F3 _) X' o5 E! u布尔运算遵循的定理如下:
; x, ]3 u0 O% R) s u, q. }- M/ U9 O F% j& e' Q
零元:x·0=0,x+1=19 v. t; j- U* f* L
单位元:x·1=x,x+0=x
" K1 _- L5 ]3 c P; x8 [幂等律:x·x=x,x+x=x- R9 g5 N! G& p) D/ S; T
补余律:x·(~x)=0,x+(~x)=16 J: M f7 ~- J+ b' G, ` @
互反律:~(~x)=x
* g3 a. e- ]' E2 d; G常见的交换律、结合律、分配律' z% [0 l; _( k: j- e. y
吸收律:x+(x·y)=x,x·(x+y)=x% V r/ _7 M1 t ^. Y
德摩根定律:~(x+y)=(~x)·(~y),~(x·y)=(~x)+(~y). D$ J! ^# v7 m A0 Q. P
布尔代数中的函数用逻辑表达式来描述,描述同一逻辑函数的逻辑表达式可能有多个。逻辑表达式中,逻辑变量以原变量或反变量的形式出现,原变量和反变量统称字面量,字面量的逻辑与称为与项,与项的逻辑或运算叫做积之和,包含所有字面量的与项称为最小项,由最小项构成的积之和称为标准积之和(标准积),类似的存在或项(字面量的逻辑或)、和之积、最大项、标准和的概念' \4 n5 D+ U0 t; k1 A4 U
- u' f* F) X1 ^; C0 p2 }3 p7 D
逻辑函数还能通过真值表描述,针对逻辑函数所有可能的输入组合一一列出输出值就可以得到真值表。一个逻辑函数的真值表唯一,实现真值表定义的功能的电路称为查找表(LUT,Look-up Table),这就是FPGA的基本单元# I: i* B4 j: Q% f7 A y8 ]
# R2 A/ d* ~/ j% s写FPGA逻辑就是写其中的查找表逻辑
- V' p! `) T. {9 V( e; y* @. p- S4 Y q* b* T4 M) B; a
数字电路
3 m9 a4 ]( E5 T! h) @数字电路也可以叫做逻辑电路
, T' n& {: t, i& O: l L# V
7 g0 I3 P9 B5 U+ C本质是用电路描述数字布尔逻辑。: }! h+ ~- C/ G! x1 S* z+ y5 k
: j' E$ B9 T7 G8 O8 W% S所有逻辑电路都能用积之和表达式来描述; M8 z, Q: G* V
5 `" E/ g2 A0 F; G' F M- O组合逻辑电路# _: s, M& e6 ?9 V
不包含记忆元件,某时刻输出(逻辑函数值)仅取决于该时刻输入的数字电路就是组合逻辑电路/ Y* S" a. w5 }/ u: v8 y0 ?8 z
" F1 P5 K+ [4 Q' B* C: N! @使用与-或-非三种门电路组合成的组合逻辑电路可以实现任何逻辑函数。这种方式被称为与-或逻辑电路或者是与-或阵列
0 M, v& `$ r$ |+ u2 O8 G. D
/ W) y6 g9 |( n$ q8 I1 WPLA(可编程逻辑阵列Programmable Logic Array)就是使用与-或阵列
' G% n) T$ y6 q6 Q1 z4 J+ h% L, H$ L. r9 m' S, {6 O6 T
时序逻辑电路
6 N5 s4 c# ~: f含有记忆元件,某时刻输出取决于该时刻输入及系统过去的电路状态的逻辑电路就是时序逻辑电路3 w. z N2 g) Q4 m) {
! t$ `: y' J9 P$ W7 T; r时序逻辑电路分为同步和异步两种- n. }/ N$ _" V
6 F n2 d; z7 M" g0 g同步时序电路的输入状态和内部状态的变化由时钟信号控制同步进行,但异步时序电路不需要时钟信号
3 J. A+ \$ V+ W1 w+ Y
: {* P; s+ w$ i异步时序电路设计需要考虑临界资源、亚稳态等诸多因素,FPGA很少涉及异步时序电路。一般地,FPGA使用有限状态机模型来实现同步时序电路,同步状态机将会在之后的硬件算法部分介绍( \% L' p6 q$ s. J% i6 ?7 A
7 i3 Y+ P# U5 _; f1 n同步状态机分为Moore和Mealy两类,Mealy模型的状态数一般比Moore模型的少,电路规模一般也更小,但输入会立刻反映到输出,容易造成信号竞争导致非预期的错误输出,这种情况称为竞争冒险。Moore电路速度快且不易发生冒险,但是电路规模较大5 c p+ h3 p; I
# x; S) A4 a1 p% c; K( L: m* Z同步电路设计. A) ]7 Q$ W: u0 h2 T; J1 h9 Y1 q
同步电路让系统状态的变化和时钟信号同步,从而降低电路设计难度6 s/ x7 a2 |2 p' f: w( [
. r' b s% u8 n
同步电路设计是FPGA设计的基础
+ W: z- r; p; j, T5 `. v9 c# `
8 w2 X; f, Q3 T4 {触发器(Flip Flop,FF)是一种只能存储一个二进制位的存储单元,一般用作时序电路的记忆元件。FPGA内一般使用D触发器(D-FF)在时钟跳变沿将输入信号的变化传送至输出
* G# [6 i) B$ B/ e. K. d3 ?# b5 M* H0 l6 i
它的真值表如下所示2 ~; L+ }' k0 c
! W, i. n4 G& e% f: }& ]3 d, s& P; F输入 D 时钟 CLK 输出 Q 反相输出 Q
2 e6 r0 J' e6 _/ x% ux 0 保持之前状态 保持之前状态! k P9 n+ f3 [' f9 i+ O; u+ F' m
0 上升沿 0 1
: V' B8 t* {5 F9 g a! K. U0 w1 上升沿 1 0! U* x' s' |. u. g' s5 r
x 1 保持之前状态 保持之前状态 l" w6 i2 Q w! j( s7 k' M
x 下降沿 保持之前状态 保持之前状态
( T5 U, b. y2 H$ _; S无论输入如何 当且仅当上升沿时 Q<=D Q<=(~D)' s- z( F+ Q3 V' B1 i$ c3 o2 y
任何其他情况 保持之前状态 保持之前状态
5 u5 u" b# e, |; C% M3 iD触发器的局限性
& }& c) O' d$ s* [ Z7 K3 pCMOS工艺下,D-FF由传输门1、主锁存器、传输门2、从锁存器串联组成* f7 a. S' X& s& L* F* v; }( B
1 L% d6 v e$ y6 z. \+ t4 J
传输们起开关作用,会随CLK的状态变化切换开关,外部信号先被锁存在主锁存器,一个时钟周期后,信号会被再次锁存在从锁存器。这里传输门1和传输门2的时钟相位相反。
u" T' @' ^+ K0 b" ?( c- H8 s0 g9 I; i( g8 M3 \
然而由于寄生电容、寄生电阻的存在,在时钟信号变化过快时,如果读取到还没有稳定下来而是在0和1之间摇摆的中间电位就会导致读取错误,这被称为亚稳态。所以一般会通过建立时间(Setup Time)来约束在时钟上升沿到来前输入D保持稳定的时间
7 j M7 Q7 D3 w- p& m
7 P2 c5 p7 J8 W& u8 O! y/ n' E对于下降沿的情况下,若输入在传输门变为高阻态之前就发生变化也会出现反相器环路震荡的隐患,所以使用保持时间(Hold Time)约束
3 G3 W& N$ v% m8 l! r( B$ K: ~) |* P
5 W2 o {+ F- Z! K& j: p由于这两个约束的存在,时钟频率需要受到限制,FPGA设计中使用静态时序分析STA来评估性能,静态时序分析主要评估FPGA上设计电路的延迟是否满足时序约束。此外还需要使用DRC约束和DC约束来保证电路的结构无误+ g9 i( T! o* A, C0 i" H/ v! ^- m! P
8 X7 n, e; c) U0 `/ ESTA验证具有验证速度高的特点,但对电路结构有要求:
8 P+ E( P) }$ K$ A
" }0 g6 T$ Z' t D, o, m延迟分析的起点和终点必须是基于同一时钟的FF,从而能够通过累加延迟来计算、验证每条路径的总延迟
, j: A- k, |/ C7 ]# o n所以FPGA一般来说都会使用单相同步时钟来设计
! L1 Q' ^/ l5 \+ O/ `
* @. ?1 W+ ~& F) W! {8 r+ [5 b' d( c由于时钟信号驱动的负载(扇出数)、布线延迟等导致的时间差称为时钟偏移(skew)
& e+ [9 K' l4 N9 O
6 Y! `; m, j) y, @由于时钟振荡器或PLL器件的输出变形或信号变形导致时钟边沿偏离平均位置的情况称为时钟抖动(jitter)
, E, c' u; r' i4 r+ l
& W" E+ h+ d- S! R4 W9 \在实际ASIC设计中,需要控制时钟偏移和抖动在一定范围之内;FPGA上已经提前实现好了多层时钟树结构,并通过驱动能力强的专用布线(global buffer)将时钟低偏移地连接到全芯片的FF上,所以在时钟设计上比ASIC简便很多' q" v: G& ^" t( \9 s
9 t1 T1 q/ y N. V
cpld% L- V" o! r* |) ~* f( z5 O
所有可编程逻辑器件统称PLD,而其中有CPLD(Complex PLD)一个特殊的分支,与FPGA相反,它基于ROM技术制造,基本结构是乘积项。由与阵列和或阵列组成的与-或构造就称为乘积项形式,这一结构的特点就是成本低廉、掉电后不会丢失逻辑 |
|