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

同步系统中如果数据和时钟满足建立保持时间的要求,不会发生亚稳态(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 或者握手机制的方式进行数据跨时钟域处理。

亚稳态建议

相关推荐
li星野21 小时前
RAG优化系列:HyDE(假设文档嵌入)——让LLM先写答案再检索
python·学习
知识分享小能手21 小时前
Flask入门学习教程,从入门到精通,Flask智能租房——用户中心知识点详解(9)
python·学习·flask
魔法阵维护师21 小时前
从零开发游戏需要学习的c#模块,第三十一章(技能冷却系统 —— 范围爆炸)
学习·游戏·c#
都市放羊21 小时前
网络小白自学网工——因特网与网络互联技术
网络·笔记·自学
東隅已逝,桑榆非晚21 小时前
新手入门指南:认识 C 语言文件操作(上)
c语言·开发语言·笔记
暴躁小师兄数据学院21 小时前
【AI大数据工程师特训笔记】第08讲:集合运算与超级函数
大数据·笔记·sql·ai·postgresql
试剂界的爱马仕21 小时前
《古董局·终局5:潮生》第 4 章:藤田的棋局
人工智能·学习
searchforAI1 天前
我的Obsidian知识库,现在可以自动剪藏笔记到本地了
人工智能·笔记·学习·音视频·ai工具·obsidian·视频总结
周末也要写八哥1 天前
Visual C++6.0下载安装流程及PDF学习手册资源
c++·学习·pdf
坤坤藤椒牛肉面1 天前
C++学习--类和对象
学习