IC设计高级003:异步复位导致的亚稳态

1、异步复位同步释放也会导致亚稳态

如在如下两种情况下,异步复位同步释放可能会在异步复位的时候产生亚稳态,并且会造成比较严重的影响。

情况1:同时钟域,前级reg有异步复位,后继reg没有复位信号

情况2:同时钟域,前后级reg均有异步复位,但仅仅前级reg复位,后级不复位。

异步复位rst_n有效时刻可能会发生在data_in的setup时间范围内,导致前级寄存器输出不稳定状态,而后级reg采用时未恢复到不稳定状态,导致亚稳态传递。

2、异步复位亚稳态的危害

情况1:同时钟域,前级reg有异步复位,后继reg没有复位信号

情况2:同时钟域,前后级reg均有异步复位,但仅仅前级reg复位,后级不复位

这两种情况都会导致亚稳态传递,可能会发生以下情况

1)下游通路震荡:下流通路有反馈电路,反馈的是本来不会发生的数据,导致震荡

2)状态机卡死:状态机在某一个状态,本来是有正确条件可以跳转的,结果此时有亚稳态,导致条件不成立,卡死在某一个状态。

3、如何避免异步复位亚稳态

避免复位亚稳态发生就是避免在reg输入数据跳变的时候复位,可采用的方法是:

在复位时之前就保证上游模块出口数据处于某一个稳定状态。

如下所示:在always@(posedge clk or rst_n)代码里面添加clear信号,在复位之前,使得clear有效,将数据置为无效状态。

always @ (posedge soc_clk or negedge soc_rst_n) begin
    if(!soc_rst_n)begin
        data_out     <= 1024'b0;  
        data_vld     <= 1'b0 ;
    end 
    else if(cfg_rst_n_clear)
		begin
        data_out     <= 1024'b0;  
        data_vld     <= 1'b0 ;
    end 
	else begin
        data_out     <= data_out_w;  
        data_vld     <= data_vld_w ;
    end 
		

使用步骤如下:

  1. 在复位之前,将cfg_rst_clear置为1
  2. 开始异步复位
  3. 将将cfg_rst_clear置为0
  4. 异步复位释放

 

 

 

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值