TA的每日心情 | 开心 2019-11-19 15:19 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FPGA:同步复位,异步复位以及异步复位同步释放1.同步复位(Synchronous Reset)来看一个简单的同步复位的D触发器,Verilog代码如下:
1 _# K/ r2 e( N: M1 c3 K" v; rmodule d_ff (
3 y' t/ l' i5 J% L3 H0 b" l clk,+ C9 Y# A3 Y8 d, Q8 `
rst_n,' i. y t! ?, T, C: a) j# n8 o, F
datain,2 k) G+ x; ]# c! |
dataout
: q K( G2 ?! z* m8 V9 N" C; I# C! C9 n );
" s0 `$ ]1 b0 f input clk;( y' O% Q& n* U7 U# Z
input rst_n;; [7 q& h% {' ^4 m
input datain;9 H; ]# [6 h" R
ouput dataout;
8 e$ D! [1 L" }1 w0 ?6 ^7 P \ reg dataout;
4 r0 F, k9 e- ^ {# |* f/ { always @ (posedge clk)
; f# k' W1 ^3 d* _2 g* e begin
% T! ?, }" L1 A6 ^" |8 \ m1 } if (!rst_n)
/ A1 S# F! r6 m7 }) [8 q I! M" M: _ dataout <= 1'b0;
5 u1 Q- k; b$ K; |2 v3 z9 V else
1 o# d- Q4 {$ R9 P1 N, a+ } dataout <= datain;5 Q& x$ T" c# d' \; q _2 G
end# k' T7 t3 G; A
endmodule( S+ m, d5 J6 o6 `& [( d9 h& K
综合后的RTL图表如下:
; w8 T5 M v6 S9 p![]()
7 q V6 _4 Z* g2 kAltera的MAXII系列的cpld中,register没有同步复位资源,所以同步复位信号需要通过额外的逻辑电路实现,上面的例子,QuartusII软件自带的综合工具使用选择器实现了同步功能,但是这不是确定的,有的综合工具综合成与门,如下图:6 h Z7 y9 \8 u! _9 X: d2 S
2 S' R9 ~3 M1 L6 Y: b
同步复位的优点:
/ z. R5 u6 D$ t# H1). 抗干扰性高,可以剔除复位信号中周期短于时钟周期的毛刺;, h$ L0 I$ ^% J# }$ Y# @/ P
2). 有利于静态时序分析工具的分析;; H& M3 ~4 i4 H0 w
3). 有利于基于周期的仿真工具的仿真。! H( x5 B7 S9 O2 M% D* f
同步复位缺点:9 C: G8 B4 X6 j% L2 K2 n4 s7 X3 ~$ ^
1). 占用更多的逻辑资源;
' g3 V% p, k( E2 A2). 对复位信号的脉冲宽度有要求,必须大于指定的时钟周期,由于线路上的延迟,可能需要多个时钟周期的复位脉冲宽度,且很难保证复位信号到达各个寄存器的时序;0 S$ f$ C5 Q2 h5 t
3). 同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。7 K! [0 m% y. D4 Y1 K- o. U
2. 异步复位(Asynchronous Reset)来看一个简单的异步复位的D触发器,Verilog代码如下:
1 Y& q, i- y- P( F7 ~6 O4 y+ b7 E; qmodule prac (
y1 v2 A$ ~7 d b clk,
! w+ e% _% z. n7 y' g rst_n,% |" J4 R" D. C0 R: p* F
datain,6 t, u# P* o7 w, K, ^- C
dataout9 T: T) N, A% {( F4 ?
);5 j9 B8 u/ Z$ M( p! t
input clk;
& k" N6 Z/ }$ u+ x6 O4 g# c) e input rst_n;
- i# x3 r7 \5 r5 z( T input datain;
9 S, f! M% O) j0 N! ~ output dataout;
. o5 X7 s" |' c% i reg dataout;
1 |2 g9 k3 }1 n+ O: j' }8 t always @ (posedge clk or negedge rst_n)1 D0 U# ]3 r: y
begin
: o7 O+ w% I: W3 t if (!rst_n)
/ o; E7 |( Y: L b& [ ]7 T% }* m3 s dataout <= 1'b0;
, V& B; _. R: W A# u$ O, m6 \1 j else3 m; t4 A( b% N, p
dataout <= datain;
- G) k5 R6 y: _3 r end
1 w: U& U8 ~5 t2 s# x0 Yendmodule; z4 O. v. |" L1 K4 @
综合后的RTL图表如下: w/ i# I; i8 r
7 C, s b: z! ~/ c
异步复位的优点:
, e; m' a% U* x/ h1). 无需额外的逻辑资源,实现简单,而且CPLD有针对复位信号的全局不限资源,可以保证复位管脚到各个寄存器的clock skew最小(注意不是到各个寄存器的延迟最小);
- E9 x' r5 `: u* B* e2). 复位信号不依赖于时钟。
9 l, C5 ?- t2 [/ ~9 I同步复位缺点:2 [5 L3 c! C3 s0 e# _1 V
1). 复位信号容易受到外界的干扰;
' s) L+ r7 ^8 v2). 复位信号释放的随机性,可能导致时序违规,使电路处于亚稳态,如下图。
K3 R2 U6 Q9 u3 M7 l A' a8 l- e9 r 4 L6 B/ u9 l6 e8 l! }
3. 异步复位同步释放(Asynchronous Reset Synchronous Release)这种复位方式在文献中还有一种称谓:Synchronized Asynchronous Reset,这种称谓应该在国外的技术人员中比较流行,与Altera的工程师交流过程中,他们一直使用Synchronized Asynchronous Reset这种称谓(当然也可能是个人的习惯)。: I3 A& { W, g+ t
来看一个Synchronized Asynchronous Reset例子,Verilog代码如下:
. z! v: _& M6 D; Cmodule prac (: o6 P ?) J1 E7 p
clk,8 C" Y1 o, X. a, u8 |
reset_n,
2 x% `' C# \8 c) q1 Q dataa,
+ `0 X& A% I9 T5 e datab,
5 q. O/ K3 s9 M( j/ v9 m outa,1 D* K- V) F* j! p: B( F( T
outb: r2 ~0 C# b- I
);" j; Z% i7 p7 k, B, {/ r: h
input clk;
1 {. g; B6 c6 G input reset_n;
) D% z: h, c/ {( e" R' e input dataa;
- b. E0 }3 L% z& {4 h input datab;/ W# o& N! E5 N) r- V$ d
output outa;
$ Y4 A, O. C1 [" A0 U) h output outb;+ ^" }* ]$ j: \5 k; R" t
reg reg1;
2 o0 J' f& z( D [; N reg reg2;- M7 r a1 N2 s4 K: I& M Z+ b! A
reg reg3;
5 T& P* o! u/ ` ^ reg reg4;
$ Y3 l, Y1 p9 _( Y4 m( x assign outa = reg1; \% H' Z/ n9 R3 }8 H) D
assign outb = reg2;0 `8 L8 X. l. G% X6 I
assign rst_n = reg4;
H8 |, Y( W! `- s. i always @ (posedge clk or negedge reset_n)* p$ G& j W/ ]
begin
) X- r- R7 t9 C- s if (!reset_n)9 \% M0 v3 U( r3 p+ q* O4 M) @8 ^
begin2 [; Y6 R" j9 B( a, q4 ^
reg3 <= 1'b0;3 \5 }1 w3 f8 w; \( J# t2 t3 V! P
reg4 <= 1'b0;2 o9 P: G8 j; B) p- f
end& h0 j" |' P4 i; I- z( n- k0 K
else$ A `% ^4 ]! h) P" i2 V
begin
}6 v5 [* q; k" i* ^6 N$ {% e, j reg3 <= 1'b1;1 K( |2 m: D, \2 x4 Q5 i
reg4 <= reg3;+ m, l( H7 H- W# ~+ ^
end% x, _0 ^4 I/ a: z2 R( i! q
end3 n4 O: r. S; n# r! @
always @ (posedge clk or negedge rst_n)
1 ^5 X0 k2 X/ o W2 g6 |& K+ z, R& K begin
- B5 }9 W' [/ m5 ^2 u+ O if (!rst_n)6 }' v) f# a$ J1 a+ d" H7 c2 C
begin6 ?" C6 [& E/ R1 W I) |( L, n: b
reg1 <= 1'b0;# S# j$ D5 [% y4 n8 }$ n P
reg2 <= 1'b0;3 G( F' o9 i/ j4 K6 {5 G" [
end, X& J3 H+ E6 \5 G" r) ]) k3 L
else
/ J% H# z" g0 b: c& r. I2 K/ @4 x begin
: k* v4 E! f9 Z& j: H reg1 <= dataa;7 |: |& x/ C: `
reg2 <= datab;
# S. [% a9 S% b) K0 H end
( B! [0 L( a- ?) k' B end
- @' T7 c/ Q* Mendmodule4 _! A; D1 e8 T( P* J4 d
综合后的RTL图表如下:
! ^$ O9 l( J1 A/ e * q2 d5 e6 b, D8 R0 x
此文来源于《Implementation and Timing of Reset Circuits in Altera FPGAs》,例子程序可能代码与源代码略有出入,RTL图是用QuartusII 8.1综合的,与原文也有出入。
; W9 z& U) S/ y- r, K, ~' \4 L- L( u
|
|