亚稳态问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在数字集成电路中,触发器要满足setup/hold的时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不满足上面这个要求,输出的值就不确定,并且在位置的时刻会固定到高电平或低电平,这个过程称为亚稳态。
亚稳态必定会发生在异步时钟电路中。
下面是一EETOP的一网友发表的言论:
个人认为,亚稳态不能叫消除,只能说减低发生概率,减低到工程可接受范围!!
措施无非就是:
1、2级缓冲
2、握手信号(总线或者从高频时钟域进入低频时钟域)
3、异步FIFO(利用Gray Code传输地址信号)
《异步时钟亚稳态及FIFO标志位》一文中认为:
亚稳态是不可避免的,但采用以下几种方法可以将其发生的概率降到一个可以接受的程度:1.格雷码编码:写地址/读地址采用格雷码。由实践可知, 同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率2.双触发器法:采用触发器来同步异步输入信号, 如图2 中的两级触发器可以将出现亚稳态的概率降低到一个很小的程度。
虽然两级触发器能有效地抑制亚稳态, 但增加了一
级的 D 触发器, 这和格雷码编码法一样会增加版图面积。这种方法在clka 与clkb 的采样周期相差不大的情况下比较适合。
module levesynchronizer(clk,clk2,data1,data2);
input clk,clk2;
input data1;
output reg data2;
reg q1,q2;
always@(posedge clk)
begin
q1<=data1;
end
always@(posedge clk2)
begin
q2<=q1;
end
always@(posedge clk2)
begin
data2<=q2;
end//其综合后的电路如下图所示
endmodule
`timescale 1ns/1ps
module test_synchronizer;
reg clk,clk2;
reg data1;
wire data2;
initial
begin
#0 clk=1'b0;
#0 clk2=1'b1;
#0 data1=1'b0;
end
always #5 clk=~clk;
always #8 clk2=~clk2;
always@(posedge clk)
begin
data1<=data1+1;
end
levesynchronizer syn(
.clk(clk),
.clk2(clk2),
.data1(data1),
.data2(data2)
);
endmodule
由modelsim仿真没有看出跨时域的亚稳态,倒是看出采样有问题3.结绳法