EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
: ]) |9 W) O$ h: C# ^
, I/ ^+ ~7 R6 z9 F; D. M9 r3 F5 ]
异步复位同步释放首先要说一下同步复位与异步复位的区别。 / s% b( I2 ~. `- L3 L9 X
( n6 g4 M. i, o7 O" D% [3 E' F; m! Z同步复位是指复位信号在时钟的上升沿或者下降沿才能起作用,而异步复位则是即时生效,与时钟无关。异步复位的好处是速度快。 + g& Q/ Z/ X' y) W& U" c! U" d
再来谈一下为什么 FPGA 设计中要用异步复位同步释放。
* K2 ~+ K. Z. n8 ~6 {复位信号的释放是有讲究的: 我们知道,DFF 的 D 端和 clk 端之间时序关系是有约束的,这种约束我们通过 setup time 和 hold time 来 check。即 D 端的 data 跳变的时刻要与 clk 端的时钟上升沿(或者下降沿)跳变要错开,如果这两个跳变撞到一起,我们无法保证 DFF 能够 sample 到正确的 data,这时候不满足 setup/hold time 要求,就会发生亚稳态,我们 sample 到的 data 可能是不稳定的中间态的值,并不是我们原本想要的 data。 6 n& H! X# ^* C+ j( j9 a8 O+ d
4 H- x$ [7 S' L% b# R1 D与此类似,异步复位端与 clk 端之间也存在着类似的时序约束关系,为了准确稳定地 sample 到异步复位端的 reset 信号,我们要求 reset 信号在 clk 上升沿(或者下降沿)跳变的前后一段时间内保持稳定,不要跳变。clk 跳变沿之前必须保持稳定的最短时间叫做 recovery time,clk 跳变沿之后需要保持稳定的最短时间叫做 removal time。如果在此时间窗口内 reset 信号发生跳变,不确定 reset 到底有没有释放成功(类似 setup+hold 时间窗口内,data 跳变,发生亚稳态,sample 到的值是不稳定的中间态值)。在 IC 设计过程中我们是会 check recovery 和 removal time 的,如果不满足,我们会通过布局布线的调整(后端的调整)让电路满足这个条件(实质就是让 reset 跳变沿和 clk 跳变沿错开);但是对于 FPGA 设计而言,我们一般不采用异步释放的方法,因为 FPGA 的布局布线可以调整的空间不大,相对于 IC 设计,FPGA 后端的布局布线基本上是 tool 自己搞定,所以我们很难调整布局布线以满足这个条件,所以我们一般就会直接用异步复位同步释放的方法来让 reset 跳变沿和 clk 跳变沿错开。 4 o9 Q. J, |# d
) G! w' B( j2 W3 E( n3 w% H最后再说一下同步数字电路的 setup/hold timing check 的实质。 $ X9 j* L% p8 H; L
, T% E( t2 ?$ k) }# r4 C# _) p3 `同步数字电路的基本单元就是两级 DFF,中间是一堆组合逻辑,data 就是在 clk 一拍一拍的控制下,逐渐向后面传递,当然,在传递的过程中,通过组合逻辑实现数据的处理与转换;但是物理世界里面,组合逻辑一定是有毛刺的,比如说 data 通过一系列的处理之后准备通过 DFF 传递到下一个单元的时候,你怎么能保证第二级 DFF 采到的值是处理完毕稳定可靠的 data,而不是还处于中间态的 data?!(举个例子,假设我们这里的 data 是一个 8bit 的 bus 信号,处理之前是 1111_0000,通过组合逻辑处理完之后我们期望变成 1111_1111;我们知道后面 4 个 bit 由 0 变 1 是需要时间的,由于布局布线的缘故,这 4bit 不可能在同一个时刻齐刷刷的同时由 0 变 1,肯定是有的 bit 先变 1,有的 bit 后变 1;也就是在由 1111_0000 变成 1111_1111 的过程中,可能会存在 1111_1000/1111_1100/1111_1101/... 等等这样的中间态数据,我们不能在 data 还处于中间态的时候就去 sample 它,否则得到的不是我们预期的值,会引起整个芯片的逻辑错误)。 ' k8 d5 ^. e) h ]1 P
我们实际上是通过 setup/hold time 来保证的,即:如果电路中所有 DFF 的 setup/hold time 都能够满足,表示 data 到达 D 端的时间比 clk 跳变沿时刻超过了 setup 时间(反之,如果 data 在 setup+hold 时间窗口内还在变化,一定会有 setup/hold timing vio),这样,我们通过 check 所有 DFF 的 setup/hold timing 来间接地保证所有 DFF 采到的值都是经过组合逻辑处理并且处理完毕之后稳定可靠的值。(更确切的说,通过 hold timing check 来保证 sample 到的值是经过组合逻辑处理之后的值而不是上一笔的 data,通过 setup time 来保证 sample 到的是经过组合逻辑处理完毕之后并且稳定下来的值)
( L6 t& {! _" h5 w. K |