TA的每日心情 | 开心 2019-11-19 15:19 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FPGA:同步复位,异步复位以及异步复位同步释放1.同步复位(Synchronous Reset)来看一个简单的同步复位的D触发器,Verilog代码如下:# U ?# Z$ c2 M- X( b' h
module d_ff (1 h! T" ]: g4 X4 v
clk,- a0 Y+ Q0 y" ]; W+ a
rst_n,
2 a* E/ l# ^( d datain,, Z. D# E- d! X5 _ n) x0 p0 K
dataout
- l. s' @" P0 ^+ p5 S3 J! [" u$ w% x );
3 Y0 X' v. q0 j2 ^' \ input clk;0 I8 ~& W$ N4 D/ B
input rst_n;7 g3 q9 `2 f7 l4 H8 I4 i
input datain;0 f6 Z0 H5 E0 X$ m2 Z
ouput dataout;
! f" I0 Q0 x5 g reg dataout;
) ^' Q. C( d X$ l always @ (posedge clk)& M" q& p# p7 b0 u6 Q8 p7 N
begin: W2 H; L# b s& L# m0 `
if (!rst_n)$ w. W6 p5 @5 ^, ]
dataout <= 1'b0;
! M) J: }) g& ^: c else
( ]3 V) X. Z+ s5 i dataout <= datain;. A0 ]# r6 x! I a0 A
end% n# {/ f. `; q! t
endmodule, T' j5 v' S# F) u7 `. {! \
综合后的RTL图表如下:
% u% b( u7 ]( U0 @# d![]()
" ?" R+ S7 d* w6 cAltera的MAXII系列的cpld中,register没有同步复位资源,所以同步复位信号需要通过额外的逻辑电路实现,上面的例子,QuartusII软件自带的综合工具使用选择器实现了同步功能,但是这不是确定的,有的综合工具综合成与门,如下图:
- U+ j% D5 t* k2 G4 n. R: C , e3 T* ^$ I. u8 C; ?7 C+ }
同步复位的优点:9 `* n i' W2 b, i
1). 抗干扰性高,可以剔除复位信号中周期短于时钟周期的毛刺;8 }' l' U% g) a9 q8 z( Z! X/ j* w4 ?' I
2). 有利于静态时序分析工具的分析;0 j \2 |* p: y- u
3). 有利于基于周期的仿真工具的仿真。
7 l5 c$ h* I2 a同步复位缺点:
- \4 S& W2 d2 E1). 占用更多的逻辑资源;
" ~+ X8 x+ w p1 _2). 对复位信号的脉冲宽度有要求,必须大于指定的时钟周期,由于线路上的延迟,可能需要多个时钟周期的复位脉冲宽度,且很难保证复位信号到达各个寄存器的时序;
, }1 J) w/ M4 F3). 同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。
* g/ c5 b' \0 g8 N2. 异步复位(Asynchronous Reset)来看一个简单的异步复位的D触发器,Verilog代码如下:
! d0 C8 v/ e4 ^module prac (6 r( y! l) s* g/ r5 {3 J& L
clk,
) c8 E+ @% ?. X/ `: A9 v rst_n,$ v0 w4 g' M9 Z8 O% T
datain,2 p; F E& n0 d" p7 ^4 e$ r
dataout
5 e' ]; s$ I; S6 S );6 x U0 M6 L% g
input clk;
' }' u6 v- [% j* p+ \* r" N9 Q input rst_n;- E$ s3 f9 F1 ]# ?0 T
input datain;
% ]' ~ e. E& `# S% ?* E, N" Z output dataout;0 \* y; f0 O3 _) F( K
reg dataout;8 G$ E0 l/ ]" J) j8 i7 e6 L- ~
always @ (posedge clk or negedge rst_n)
* |3 ]) \- P S begin
5 i! W2 Q# ]8 r8 X4 }2 l if (!rst_n)$ Z, v: f! ]2 f) m2 t5 m9 F
dataout <= 1'b0;. |' G9 w6 B: M+ t4 J( m
else+ t Y" u. M3 ~; {9 A- K, r+ N
dataout <= datain;
9 S8 E& p7 j1 G; j1 V end. S# ^0 m, f) s# B0 l9 {
endmodule
+ ~) M& r9 H' u% j综合后的RTL图表如下:* l0 l1 z, e. l' r6 m/ @; B
![]()
8 } P' D8 W( t9 o异步复位的优点:
2 M$ Q3 S v* h1). 无需额外的逻辑资源,实现简单,而且CPLD有针对复位信号的全局不限资源,可以保证复位管脚到各个寄存器的clock skew最小(注意不是到各个寄存器的延迟最小);& U1 z0 p4 G. v
2). 复位信号不依赖于时钟。
- ]$ s! v0 o9 c3 y/ ?8 @7 x8 j同步复位缺点:
' ^* X% l) X( _1). 复位信号容易受到外界的干扰;
+ t @: X7 l c& F" R; y2). 复位信号释放的随机性,可能导致时序违规,使电路处于亚稳态,如下图。- X$ n0 `( l+ }* {" T2 b
![]()
) _/ N3 i7 E G' ~$ @3. 异步复位同步释放(Asynchronous Reset Synchronous Release)这种复位方式在文献中还有一种称谓:Synchronized Asynchronous Reset,这种称谓应该在国外的技术人员中比较流行,与Altera的工程师交流过程中,他们一直使用Synchronized Asynchronous Reset这种称谓(当然也可能是个人的习惯)。
1 N1 o5 f) S+ G4 |/ B5 F2 x来看一个Synchronized Asynchronous Reset例子,Verilog代码如下:
: m5 ]0 s q4 g1 \9 X9 E5 emodule prac (
9 E/ ]( F4 D4 X7 E/ R. t5 _" Z& O clk, S7 v; j" n. O8 p9 H. p9 s* ]
reset_n,
$ Y8 U8 O) T+ W( \) Z) \6 S dataa,' n* W2 C- P" N3 M: ^' G8 n
datab,
# |$ u. \; G. K. L1 Q4 @3 M& o% L outa,4 m: A$ B5 W; [2 T
outb# a: L8 k2 L: k. f7 ] r7 S
);. U8 z# {8 u* q
input clk;
* B' g+ H' v, k! \ input reset_n;8 u( O0 ~( w- c9 ~4 y2 n- m
input dataa;
0 @; ?9 R: Z3 U5 I+ ?/ D/ S input datab;0 m; c! {+ G3 }3 c& p
output outa;: x% E; r+ ]" t* Q/ I, W# i+ L! ^2 M
output outb;6 S& } R1 e+ @9 [
reg reg1;
! S6 w$ \# i; i5 E reg reg2;7 v; j, V2 Q. T2 x8 p# @1 O! i
reg reg3;
0 A! M7 V0 {: V% i reg reg4;
7 ?$ F o! u8 a$ ?1 N& L1 a3 x assign outa = reg1;. K) G' o& t( z# W8 A O& E
assign outb = reg2;
0 p0 y. w5 \& b6 `$ b& u assign rst_n = reg4;
6 V9 t4 Z8 D% N4 r' v& A; r3 j always @ (posedge clk or negedge reset_n)$ e8 I' | ]8 s2 F% N+ c
begin
6 M; M$ o& B6 o" Q. G if (!reset_n)+ v' q! y9 R4 h4 M+ [- g
begin
* E! a8 x" |& y. t reg3 <= 1'b0;! [' W z& @7 ^8 o
reg4 <= 1'b0;
6 A, b! m, r( _" A; M/ X& @" B end
, m1 f" Y: F3 _0 G: y$ `+ e else+ _5 G0 t0 m( s5 g
begin* C) l k8 K! @
reg3 <= 1'b1;
* g2 g* I, g0 E l# a reg4 <= reg3;: E% s7 s- W/ Z4 b' _9 o B/ b. h; H
end
, Q k/ s& z a$ y! g end
% _* L% ?& G! l" E! W always @ (posedge clk or negedge rst_n)
2 x3 V$ ?% u5 {2 x" w$ _ begin
5 G/ W& w3 \/ J0 k1 ?& _ if (!rst_n)% ]. n. A+ V5 z/ J F1 ~3 N- o2 S( o
begin b: @/ [3 m$ c K7 J/ @
reg1 <= 1'b0;( E5 v0 f2 \, b J- ]3 `3 Z/ Z
reg2 <= 1'b0;
5 x) S' _6 ?! i5 d end3 \- i4 @: D0 v6 P' @
else9 N1 P8 Y- o7 b' w
begin. X* u4 P+ \" v6 V1 m# K# b
reg1 <= dataa;) `; }: X, b! K; V. z% e/ c
reg2 <= datab;
3 `4 z: ]# G& D; ~ end6 \) p0 D# l! Q" J8 {' G
end# P% w3 m$ l% R0 _, H
endmodule" P q# ~; s) w, w f
综合后的RTL图表如下:4 j- a- ^" b+ V4 Q5 A2 B
![]()
* q, S- X- K$ G9 C0 a7 v此文来源于《Implementation and Timing of Reset Circuits in Altera FPGAs》,例子程序可能代码与源代码略有出入,RTL图是用QuartusII 8.1综合的,与原文也有出入。+ ~* `2 ~2 C0 g" g. `
s. g5 g( N; ? U4 P8 L
|
|