FPGA跨时钟域设计
一、基本的概念
建立时间和保持时间
建立时间:建立时间(setup time)是指在触发器的时钟信号上升沿到来之前,数据稳定不变的时间。
保持时间:保持时间(hold)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间。
example
关于建立时间保持时间的考虑
题目:时钟周期为T,触发器D1的建立时间最大为T1max,最小为T1min。组合逻辑电路最大延迟为T2max,最小为T2min。
问:触发器D2的建立时间T3和保持时间T4应该满足什么条件?
建立时间容限 = Tclk - Tffpd(max) - Tcomb(max) - Tsetup,
由于建立时间容限>=0,可得:D2的 Tsetup =< Tclk - Tffpd(max) - Tcomb(max),
由于题目没有考虑Tffpd,所以 Tsetup =< T-T2max。
保持时间容限 + Thold = Tffpd(min) + Tcomb(min),
根据保持时间 >= 0,得到D2的Thold =< Tffpd(min) + Tcomb(min),
Thold =< T2 min。
关于保持时间的理解就是,在触发器D2的输入信号还在保持时间的时候,如果触发器D1的输出已经通过组合逻辑到达D2的输入端的话,将会破坏D2本来应该保持的数据。
结论
建立时间:触发器在时钟沿来到前,其数据输入端的数据必须保持不变的时间;决定了触发器之间的组合逻辑的最大延迟。
保持时间:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间,决定了触发器之间的组合逻辑的最小延迟。
主要内容
局部同步设计概念
跨时钟域的问题
亚稳态
同步失败
同步化
同步器
保持寄存器和握手
异步FIFO设计
为什么讨论多时钟域设计
全同步设计
一个时钟
全异步设计
没有时钟
全局异步,局部同步设计
多个独立时钟域,同一时钟域内同步
这是我们关心的多时钟域设计
不可避免,单一时钟不能满足设计需求、
亚稳态
什么是亚稳态?
亚稳态最终收敛于0或1或者振荡
引起亚稳态的原因
在数据跳变期间采样
建立时间或者保持时间不满足
亚稳态和跨时钟域有什么关系
跨时钟域的信号和同步时钟之间的关系不能确定
单一时钟域内工具确保建立保持时间,不出现亚稳态
亚稳态对系统可靠性的危害
同步失败
系统失败
按概率出现;发生概率可能达到可靠性要求无法接受的程度
如何减少亚稳态的风险
单一时钟域内信号
工具检查每个触发器的建立保持时间,确保其不出现亚稳态
跨时钟域的信号
没有工具可以保证其可靠性
静态时序分析其应该设置false path约束
只能靠逻辑设计来保证:同步化技术
同步化技术
根据时钟域信号的特点来选择同步化方法
同步器--控制信号
保持寄存器和握手--地址或数据总线信号
异步FIFO设计--数据总线信号
同步器(two-stage of flip-flops)
为什么使用两级寄存器(接收时钟域)
是一级寄存概率的平方,两级并不能完全消除亚稳态危害,但是提高了可靠性,减少其发生的概率
一级概率很大,三级改善不大
同步器延迟-1或2个接收时钟
同步器分类
电平同步器
边缘检测同步器
脉冲同步器
基本同步器--电平同步器
仅限于clock1和clock2是同一频率
边缘检测同步器--慢时钟域到快时钟域
脉冲同步器--快时钟域到慢时钟域
使用同步器需要注意的问题
1 原时钟域的寄存器和新时钟域的两个寄存器之间都不能有组合逻辑
2 快时钟域到慢时钟域
3 多位控制信号跨时钟域
4 总线信号跨时钟域
本文作者:大耳毛豆
本文链接:https://www.cnblogs.com/yjxmike/p/18723146
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期