常用对亚稳态消除有三种方式:
- 对异步信号进行同步处理
- 采用FIFO对跨时钟域数据通信尽心缓冲设计
- 对复位电路采用异步复位、同步释放方式处理
异步信号进行使用的时候,最好就是进行同步处理(异步复位也可以参考方式1),同步一般多用D触发器打拍的方法,比如用三级触发器对异步信号进行同步处理
上图是一级寄存器亚稳态,第二、三级寄存器消除亚稳态的时序图
Tmet是震荡时间(决断时间),Tmet有长有短,当Tmet时间长到大于一个采集周期,第二级寄存器就会采集到亚稳态,传播下去。
对于复位情况下的亚稳态,常常是由于恢复时间和移除时间不满足造成的,因此,最常用的处理方法是采用异步复位、同步释放。
同步释放:为了避免亚稳态,让拉高的复位信号打两拍,达到与时钟clk边沿同步的目的。
采用第二级寄存器(两个D触发器就够用了)输出作为全局复位信号输出
module asyn_reset (
input wire clk ,
input wire rst_n ,
output wire sys_rst_n
);
reg [ 1: 0] rst_r;
always @ (posedge clk or negedge rst_n)
if (rst_n == 1'b0)
rst_r <= 2'b0;
else
rst_r <= {rst_r[0], 1'b1};
assign sys_rst_n = rst_r[1];
endmodule