TA的每日心情 | 开心 2019-11-19 15:19 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FPGA:同步复位,异步复位以及异步复位同步释放1.同步复位(Synchronous Reset)来看一个简单的同步复位的D触发器,Verilog代码如下:, |( G+ [1 K, U2 ^6 z+ T0 C0 N
module d_ff (% t; j+ K2 P6 K+ l
clk, n' F% r! o$ |% g& v3 L" J
rst_n,
' B' n3 o3 S* T datain,
* l/ T( V# \7 X3 d- H# i# k dataout
6 }7 [5 c |5 o4 [7 \6 y' G4 R0 m );: C" S5 c# z1 k0 a8 @- n# \
input clk;& C+ @% w: M$ i' v5 T
input rst_n;. ^$ L" M& |0 B5 B" q
input datain;
% k; o J, O. i! y ouput dataout;6 y+ p6 C% s, f8 u
reg dataout;( O7 G+ w) D: [) S0 x- |
always @ (posedge clk)4 \0 ~+ q( y# D5 @( ~/ P( [
begin& N# r ]# L! b7 g6 o5 s
if (!rst_n)
' U2 P! [8 o1 P dataout <= 1'b0;$ W" r0 J' Y% ]
else
$ v3 E" W. e" H2 F/ q dataout <= datain;4 Y- t c& Z' L& d
end8 C1 Y+ `. L. q
endmodule
R8 X! Q- R5 n% O综合后的RTL图表如下:! [8 J6 |0 E7 L3 N8 \
, {5 \! c' `* f- @$ J2 M. T2 S
Altera的MAXII系列的cpld中,register没有同步复位资源,所以同步复位信号需要通过额外的逻辑电路实现,上面的例子,QuartusII软件自带的综合工具使用选择器实现了同步功能,但是这不是确定的,有的综合工具综合成与门,如下图:; _5 e- C H0 b6 O
![]()
+ W1 I( E" [' K$ C- d$ u1 `同步复位的优点:/ [/ |0 X# z# G: F2 D
1). 抗干扰性高,可以剔除复位信号中周期短于时钟周期的毛刺;
! K4 Z) X/ N; A6 j/ W2). 有利于静态时序分析工具的分析;
/ t0 \) y; D) t4 d v0 @3). 有利于基于周期的仿真工具的仿真。
4 V6 c- h/ X2 e' y$ U) e+ v8 v同步复位缺点:5 @! i; [0 A) s& y9 n2 Q
1). 占用更多的逻辑资源;0 {/ D$ [3 } L6 p$ |. u
2). 对复位信号的脉冲宽度有要求,必须大于指定的时钟周期,由于线路上的延迟,可能需要多个时钟周期的复位脉冲宽度,且很难保证复位信号到达各个寄存器的时序;6 x, G5 s7 f O+ p$ ^' u/ g/ j( P+ b& C
3). 同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。5 N$ n! i. \; c9 n0 f; \6 t5 ^
2. 异步复位(Asynchronous Reset)来看一个简单的异步复位的D触发器,Verilog代码如下:/ h& h; ~% |3 F% k
module prac (* X7 V5 m% J1 L6 i! U9 k; V
clk,
6 z, {+ @& h) F- a. n7 t( f rst_n,4 |/ L* w" a6 b* T5 e9 E+ A
datain,, w' ]9 ^: m( W0 f6 ~% u- Z
dataout; h: L/ K; u0 c& l& I0 J
);
4 I! p# R% E/ V: y6 ^ input clk;. @# l- C4 I# V
input rst_n;7 w/ |9 f2 {( F! M$ p
input datain;2 u- ^( W9 o6 ~4 r
output dataout;; H: k5 T5 @# N4 x
reg dataout;/ \( q. `$ }* L9 P" E3 S
always @ (posedge clk or negedge rst_n)) U# u0 ?6 _' f3 e
begin
/ ?7 d. m! r2 W m: n; t! E' }4 G if (!rst_n)4 P% L" t* ^3 P. L# U. v! l% M
dataout <= 1'b0;
2 H$ v2 S$ E0 ], @' H7 I q8 z3 ^ else$ R ]( Z* ^# |; N3 }" F4 ]
dataout <= datain;
0 `2 H7 p9 C0 }: Q end
$ Z. U9 | D$ T9 A7 G+ s- U/ Jendmodule. d' _( v0 I" \. B! G
综合后的RTL图表如下:
5 Y. \# c1 m' W" C/ b![]()
8 L- g, G0 B5 T6 \+ h. Q0 m异步复位的优点:$ N- B1 C( t2 v+ v' x
1). 无需额外的逻辑资源,实现简单,而且CPLD有针对复位信号的全局不限资源,可以保证复位管脚到各个寄存器的clock skew最小(注意不是到各个寄存器的延迟最小);. K z% k2 t% P
2). 复位信号不依赖于时钟。
* _- C' p# l; |1 d% P; I0 b* T同步复位缺点:
% P" A: {$ r: S* ]% W3 a1). 复位信号容易受到外界的干扰;+ p5 E7 Z# B& s
2). 复位信号释放的随机性,可能导致时序违规,使电路处于亚稳态,如下图。
) N! t3 \. D, R3 i6 J : ^$ X% E' Q7 }, O" O6 ~0 n9 P
3. 异步复位同步释放(Asynchronous Reset Synchronous Release)这种复位方式在文献中还有一种称谓:Synchronized Asynchronous Reset,这种称谓应该在国外的技术人员中比较流行,与Altera的工程师交流过程中,他们一直使用Synchronized Asynchronous Reset这种称谓(当然也可能是个人的习惯)。8 j' Z% a5 S# D. J( S7 @
来看一个Synchronized Asynchronous Reset例子,Verilog代码如下:3 F) q3 L1 @! [
module prac (0 o) c3 A3 | ^/ Z+ u" S6 T
clk,' A" t, ~' d4 f7 d6 Q# ?
reset_n, B. u q2 v+ {( a% ^
dataa,
7 z5 a) n( C& j8 Q! C( A datab,+ M% m5 @. r! O) F, k: L; i- g: f
outa,! z4 _4 F& O' k. \
outb; c; R- s4 |7 @: p
);
1 r# q9 p- u/ m7 L% _% J input clk;, y4 r- V j% Q, }
input reset_n;: W9 A. Z5 x* F$ L
input dataa;
: e+ s3 M2 z O* d: h1 ]. n input datab;- |3 ?5 l1 [: f+ y9 B
output outa;4 a. M D+ D# `! W# U
output outb;) ?& }) C! q/ X5 m1 U3 ~
reg reg1;
4 e) a! \: Q4 z' O3 ~ reg reg2;
! H1 T! l! R# p4 i9 D! B0 d reg reg3;! _5 P% H; J* H- ~
reg reg4;, n8 O7 T( G. K* @+ T6 F, b+ z
assign outa = reg1;
( y, e& r+ B8 z assign outb = reg2;
3 p6 P0 w9 ~2 p: ] assign rst_n = reg4; a/ U" V1 }* E, x6 t! X
always @ (posedge clk or negedge reset_n)! o2 ~1 n8 f6 J" I3 D. D
begin; N$ l) r* Z; t
if (!reset_n)3 n {0 u, C7 }7 s& |3 V
begin9 ]: C& K0 W7 D V
reg3 <= 1'b0;
* Z( y/ A) b0 M0 n( ? reg4 <= 1'b0;4 Y( g4 |/ S1 l; @/ X% r
end
& I+ m6 c2 a$ F+ A5 S3 x else
; k- C; f! x4 L `$ U/ d0 M begin
* {0 y3 g9 @) M9 u reg3 <= 1'b1;
1 g4 P/ L+ k5 g2 A, ] reg4 <= reg3;
" s% k) P- T- Z/ y" H- l9 U; e end' @4 b. q4 j, C* \3 g
end7 N0 n' ~( Y; ~2 C0 N
always @ (posedge clk or negedge rst_n)
& p/ y: r6 _, w6 X begin
7 y. J- B' f' p! u) q8 ~. Q7 ]7 a7 L if (!rst_n)
& D" @! W2 J1 `* P; X. A9 [1 ` begin( M, d; l! g9 Z6 x& A) m2 U1 c
reg1 <= 1'b0;' H" y' O% J: r# [2 n7 x$ x
reg2 <= 1'b0;
2 D0 O. J2 u$ w end6 B0 `: R- }; @4 T
else
' e2 X$ W6 Y! ^" H! z2 A- Y+ M begin
& |' I& A7 r4 E }& u reg1 <= dataa;
! s. V I. r% g! N reg2 <= datab;6 I, x- P5 q& I+ x$ j8 V/ `
end1 }4 v) G: J v3 P; C5 H
end
) R* l7 y" r& g* s- zendmodule7 @8 E6 s. I; A/ G
综合后的RTL图表如下:
* ^. ~" {0 ~8 ?* X% S' P5 I![]()
' Y0 @8 J, [. |% Z0 G$ b此文来源于《Implementation and Timing of Reset Circuits in Altera FPGAs》,例子程序可能代码与源代码略有出入,RTL图是用QuartusII 8.1综合的,与原文也有出入。
$ C) h) n" ` T7 i! w
9 l- B I9 `% a# x: X6 M |
|