我未失方向吧 关注:2贴子:56
  • 2回复贴,共1

同步复位与异步复位

只看楼主收藏回复

一楼梅


IP属地:上海1楼2013-04-27 11:41回复

      下面具体阐述一下同步、异步复位的区别,以及为什么要采用这种方式的原因。
      复位电路是每个数字逻辑电路中最重要的组成部分之一。
      复位电路有两个工作目的:
      1、 仿真的时候使电路进入初始状态或者其它预知状态;
      2、 对于综合实现的真实电路,通过复位使电路进入初始状态或者其它预知状态。
      一般来说,逻辑电路的任何一个寄存器、存储器结构和其它逻辑单元都必须要附加复位逻辑电路,以保证电路能够从错误状态中恢复,可靠地工作。
      常用的复位信号为低电平有效信号,在应用时外部引脚接上上拉电阻,这样能增加复位电路的抗干扰性能。
      复位方式大致分为两类,即同步复位和异步复位。这两种复位方式各有优缺点,其应用场合也各不相同。
    同步复位 异步复位
      所谓同步复位是指当复位信号发生变化时,并不立刻生效,只有当有效时钟沿采样到已变化的复位信号后,才对所有寄存器复位。同步复位的应用要点如下:
    指定同步复位时,always的敏感表中仅有时钟沿信号,仅仅当时钟沿采到同步复位的有效电平时,才会在时钟沿到达时刻进行复位操作。
      所谓异步复位是指当复位信号有效沿到达时,无论时钟沿是否有效,都会立即对目标(如寄存器、RAM等)复位。异步复位的应用要点如下:
    指定异步复位时,只需always的敏感表中加入复位信号的有效沿即可,当复位信号有效沿到达时,无论时钟沿是否有效,复位都会立即发挥其功能。


    IP属地:上海2楼2013-04-27 12:24
    回复

      module Rst_Circuit( Rst_n, Clk, D, Q ); input Rst_n; input Clk; input D; output Q; reg Q; always @(posedge Clk) //同步复位 begin if (~Rst_n) begin Q <= 1'd0; end else begin Q <= D; end end endmodule
      module Rst_Circuit( Rst_n, Clk, D, Q ); input Rst_n; input Clk; input D; output Q; reg Q; //如果没有写"or negedge Rst_n",将变成同步复位 always @(posedge Clk or negedge Rst_n) begin if (~Rst_n) begin Q <= 1'd0; end else begin Q <= D; end end endmodule
      如果目标器件或可用库中的触发器本身包含同步复位端口,则在实现同步复位电路时可以直接调用同步复位端。然后很多目标器件(如PLD)和ASIC库的触发器本身并不包含同步复位端口,这样复位信号与输入信号组成某种组合逻辑(比如复位低电平有效,只需复位与输入信号相与即可),然后将其输入到寄存器的输入端。为了提高复位电路的优先级,一般在电路描述时使用带有优先级的if...else结构,复位电路在第一个if下描述,其它电路在else或else...if分支中描述。


      IP属地:上海3楼2013-04-27 12:25
      回复