《硬件架构的艺术》笔记(一):亚稳态

同步系统中如果数据和时钟满足建立保持时间的要求,不会发生亚稳态(meastable)。

异步系统中数据和时钟关系不固定,可能违反建立保持时间,就会输出介于两个有效状态之间的中间级电平,且无法确定停留在中间状态的时间,或者过了一定的延迟后才能正常转换,这就是亚稳态。

亚稳态理论

亚稳态产生原因:违背了触发器的建立时间或保持时间。

现象:触发器的输出产生毛刺,或者暂时保持在不稳定状态且需要较长时间才能回到稳定状态

tsu:建立时间(setup)

th:保持时间(hold)

tco:时钟到输出的延迟(clock-to-output delay)

tMET:亚稳态输出恢复到稳定状态所需的超过tco的额外时间部分(settling time)

并非所有不满足建立时间和保持时间的输入变化都会导致亚稳态,还取决于生产工艺和外界环境。一般来说,触发器会在一两个周期返回稳态。

同步失败:信号再一个时钟域里变换,在另一个时钟域内采样,导致输出变成亚稳态。

亚稳态窗口

建立时间和保持时间共同决定亚稳态窗口的宽度,在窗口期间,输入信号应该保持不变,窗口越大,进入亚稳态的概率越高。一般来说,较新的器件的亚稳态窗口更小。

计算MTBF

MTBF(Mean/Average Time Between Failures,平均无故障时间),即故障率倒数.

公式成立条件:给定时钟频率,在该时钟周期内具有均匀概率密度的异步数据信号边沿的单级同步器。

两级同步器:

可以看出,增大同步级数可以显著提高MTBF。

避免亚稳态

以下条件中,信号可能违背时序要求。

亚稳态不能根除,但是可以减小亚稳态发生的概率。

最简单的情况下减小亚稳态概率的方法:确保时钟周期足够长,大于准稳态的解析时间以及通往下一级触发器路径上的逻辑延迟,但是会影响性能,并不实用。

另一种方法是使用同步器。

多级同步器

避免亚稳态最常见的方法:在跨时钟域的信号上加一个或多个同步触发器。

缺点:增加了观察同步逻辑输入的延迟。

用时钟倍频电路的多级同步器

多级同步器缺点:系统需要花较长时间去响应异步输入。

解决方法:使用倍频时钟作为两个同步触发器的时钟输入。Altera的FPGA中就具有这项技术。

这样不仅能让系统一个周期响应一个异步输入,而且改善了MTBF。然而倍频时钟会降低MTBF,这个影响比两个触发器引起的偏移量要大。

亚稳态测试电路

其中,FFB和FFC在下降沿触发。

当发生亚稳态时,异或非门会输出高电平,所以FFD捕捉到高电平就代表检测到亚稳态,时序图如下。

同步器的类型

一个异步信号不应被两个或者多个同步器所同步:一个信号扇出到多个同步器之后同步所需的时间不同,可能出现竞争冒险。

模式A

当异步输入信号比时钟周期大得多时最有效.

模式B

第一级触发器输入直接与Vcc相连,输入信号直接连触发器时钟。输入信号短脉冲把q1置为1之后,便会一直保持,直到两个时钟沿后输出高电平。

总结:

1、信号跨时钟,要采用同步器。

2、clk1<clk2,采用模式A,否则采用模式B。

理解:如果跨时钟域的数据宽度比时钟大的多,则使用模式 A,如果数据宽度比时钟小,这时候使用再用时钟去采的话会导致数据采样丢失部分,这时候采用模式 B 进行同步,根据之前所学的知识也可以知道,也可以使用 FIFO 或者握手机制的方式进行数据跨时钟域处理。

亚稳态建议

相关推荐
ZH15455891319 小时前
Flutter for OpenHarmony Python学习助手实战:Web开发框架应用的实现
python·学习·flutter
百锦再9 小时前
Vue高阶知识:利用 defineModel 特性开发搜索组件组合
前端·vue.js·学习·flutter·typescript·前端框架
CappuccinoRose10 小时前
JavaScript 学习文档(二)
前端·javascript·学习·数据类型·运算符·箭头函数·变量声明
A9better10 小时前
C++——不一样的I/O工具与名称空间
开发语言·c++·学习
小乔的编程内容分享站10 小时前
C语言笔记之函数
c语言·笔记
AI职业加油站10 小时前
职业提升之路:我的大数据分析师学习与备考分享
大数据·人工智能·经验分享·学习·职场和发展·数据分析
四谎真好看10 小时前
JavaWeb学习笔记(Day13)
笔记·学习·学习笔记·javaweb
ZH154558913111 小时前
Flutter for OpenHarmony Python学习助手实战:机器学习算法实现的实现
python·学习·flutter
承渊政道11 小时前
Linux系统学习【Linux基础开发工具】
linux·运维·笔记·学习·centos·编辑器
承渊政道11 小时前
C++学习之旅【C++中模板进阶内容介绍】
c语言·c++·笔记·学习·visual studio