亚稳态的产生:所有的器件都定义了一个信号时序要求,只有满足了这个要求,才能够正常的在输入端获取数据,在输出端输出数据。正常的数据传递是:在触发时钟沿前必须有一小段时间(Tsu)用来稳定输入信号(0 or 1),触发时钟沿之后需要有一小段特定的时间(Th)再次稳定一下,最后再经过一个特定的始终到输出延时(Tco)后才有效。如果数据的传递过程违反了这个时间约束,那么寄存器输出就会出现亚稳态,此时输出的诗句是不稳定的(在0和1之间游荡)。但是这种现象并不是绝对的,但是我们在实际设计中应当尽量避免这种现象。
同步时钟系统由于是同步的,没有两个异步的触发信号对信号的输入输出干扰,所以亚稳态的几率很小。
异步时钟系统:先举个例子,如下:
always @(posedge clk or negedge rst_n)
begin
if(!rstn)
m<=1;
else
m<=0;
end
这是异步的,rst_n的触发和clk的触发各自不相干(造成的亚稳态概率较高)。
always @(posedge clk)
begin
if(!rst_n)
m<=1;
else
m<=0;
end
这是同步的,rst_n在clk上升沿的时候才产生影响,此时造成的亚稳态概率低很多。