lanpad 发表于 2012-12-11 10:47:26

请问复位中有关“异步确立同步释放”的问题

本帖最后由 lanpad 于 2012-12-11 10:54 编辑

看了很多资料,都推荐“异步确立同步释放”的方式,代码如下:

    assign    outa    = reg1;
    assign    outb    = reg2;
    assign    rst_n    = reg4;

    always @ (posedge clk or negedge reset_n)
    begin
      if (!reset_n)
            begin
                reg3    <= 1'b0;
                reg4    <= 1'b0;
            end
      else
            begin
                reg3    <= 1'b1;
                reg4    <= reg3;
            end
    end

    always @ (posedge clk or negedge rst_n)
    begin
      if (!rst_n)
            begin
                reg1    <= 1'b0;
                reg2    <= 1'b0;
            end
      else
            begin
                reg1    <= dataa;
                reg2    <= datab;
            end
    end

都说异步复位的主要缺点是:在复位信号释放(release)的时候容易出现问题。(具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。)

可搞不明白:所谓的“异步确立同步释放”方式,上文第一个always模块不还是异步复位方式么?释放时(上文代码红字部分)还是会出现亚稳态的呀?
页: [1]
查看完整版本: 请问复位中有关“异步确立同步释放”的问题