多时钟域系统设计的基本策略

1、尝试在数据和控制路径上实施时序优化策略

2、尝试去定义和产生多时钟域的组

3、尝试在不同时钟域之间增加同步器传递控制信号

4、尝试使用数据同步器(fifo、缓冲器)

消除CDC(跨时钟域):

1、避免亚稳态

2、使用MCP(多方案路径)方案

跨时钟边界着重考虑因素:

1、控制信号必须使用多级同步器进行同步处理

2、控制信号必须是没有毛刺和竞争的

3、跨时钟域边界应该有单次转换

4、控制信号应该至少在一个时钟周期内保持稳定

3、使用fifo

4、使用格雷码计数器

5、设计分区:在多时钟域的设计中,使用时钟组的概念进行模块划分

控制信号路径和同步:

1、电平同步器:使用电平同步器的方式(两个或者三个触发器结构打拍)可以解决多时钟域之间交换数据的亚稳态问题。

2、脉冲同步器:脉冲展宽、两级同步、边沿检测

关键设计要点

  1. 脉冲宽度要求 :源时钟域的展宽后脉冲宽度必须大于1.5倍目标时钟周期,以确保能被稳定采样。

  2. 最小脉冲间隔:两个源脉冲之间需有足够间隔,等待前一个脉冲完成"同步-反馈"的整个握手过程,否则脉冲会丢失。

  3. 从慢时钟到快时钟:结构类似,但因目标时钟更快,采样更易成功,对脉冲间隔要求可能更低。

  4. 握手机制 :上述带反馈的结构本质上是一种握手协议,保证了可靠性,但引入了延迟。

3、MUX同步器: 解决多比特信号跨时钟域时可能出现的位偏移(Bit Skew)或采样不一致问题。在源时钟域用寄存器锁存待发送数据,在目标时钟域通过一个同步的控制信号来选择何时采样这组锁存的数据。

相关推荐
Y.9991 小时前
电脑黑屏只有鼠标能动
学习
架构师伯子明2 小时前
FFmpeg C++学习(一):编译和demo
开发语言·c++·学习
叼烟扛炮2 小时前
[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战
服务器·开发语言·网络·笔记·学习·langchain
程序员梅雨2 小时前
【从零开始学习数据仓库 | 第二篇】: 拉链表 & 数仓分层
大数据·数据仓库·学习
一木 之林2 小时前
Dify学习笔记 04 · 检索底座:Embedding、Rerank与向量数据库(第46-54集)
笔记·学习·embedding·dify
芯思路3 小时前
STM32开发学习笔记之十【AI部署】
笔记·stm32·学习
憧憬成为java架构高手的小白3 小时前
langgraph4j学习
学习
CCIE-Yasuo3 小时前
网络安全-学习web开发-列表、标签
前端·学习·web安全
旖旎夜光4 小时前
LeetCode 315: 算右侧小于当前元素的个数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法
海绵宝宝转agent5 小时前
LeetCodehot100题解
java·笔记·学习·算法·leetcode·深度优先