惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
T
Tailwind CSS Blog
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Proofpoint News Feed
D
Docker
Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
IT之家
IT之家
H
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
B
Blog
D
DataBreaches.Net

博客园 - longyue

[BF学院_卷1] -- 第30讲:mixTable() 总结 —— Mixer 完整控制模型 [BF学院_卷1] -- 第29讲:applyMixToMotors() —— 最终 Motor Output 生成 [BF学院_卷1] -- 第28讲:applyMixerAdjustment() —— 为什么 Mixer 需要重新分配控制权限 [BF学院_卷1] -- 第27讲:PID Output 如何进入 Mixer —— 从控制需求到 motorMix [BF学院_卷1] -- 第26讲:calculateThrottleAndCurrentMotorEndpoints() —— Mixer 如何确定油门基础范围 [BF学院_卷1] -- 第25讲:mixTable() 总览 —— Mixer 在控制循环中的位置 [BF学院_卷1] -- 第24讲:mixer_init.c —— 飞控启动时如何准备 Mixer [BF学院_卷1] -- 第23讲:Mixer 数学模型 —— motorMixer_t 如何形成 Motor Output [BF学院_卷1] -- 第22讲:Betaflight 如何描述 Mixer —— mixer.h 数据结构 [BF学院_卷1] -- 第21讲:四旋翼为什么可以通过电机控制姿态 —— Mixer 背后的物理基础 [BF学院_卷1] -- 第20讲:从 PID Output 到 Motor Command(电机指令)——为什么飞控需要 Mixer [BF学院_卷1] -- 第19讲:PID Controller(PID控制器)——飞控到底如何理解误差并控制飞机? [BF学院_卷1] -- 第18讲:PID Controller 的最后一环——为什么飞控还需要 Feedforward(前馈控制)? [BF学院_卷1] -- 第17讲:D Term(微分控制项)——飞控如何提前感知运动变化? [BF学院_卷1] -- 第16讲:I Term(积分控制项)——飞机为什么总是差一点? [BF学院_卷1] -- 第14讲:Rate Error(角速度误差)——PID 真正控制的到底是什么? [BF学院_卷1] -- 第15讲:P Term(比例控制项)——飞控是如何利用误差开始控制飞机的? [BF学院_卷1] -- 第13讲:Outer Loop 的终点——为什么还要读取 Current Angular Rate(当前角速度)? [BF学院_卷1] -- 第十二讲:Yaw Compensation(偏航补偿) [BF学院_卷1] -- 第12讲脚本 [BF学院_卷1] -- 第十一讲:Current Angular Rate(当前角速度)——飞控怎样知道飞机现在转得有多快? [BF学院_卷1] -- 第十讲:Angle Error(姿态角误差)如何变成 Desired Angular Rate(目标角速度) [BF学院_卷1] -- 第九讲:Current Angle(当前姿态角)遇见 Target Angle(目标姿态角) [BF学院_卷1] -- 第八讲:飞手打杆以后,飞控首先得到什么? [BF学院_卷1] -- 第七讲:为什么 Pitch Flip 只在 180° 看起来正确 [BF学院_卷1] -- 第7讲脚本 [BF学院_卷1] -- 第6讲:为什么 Pitch Flip 会骗人 [BF学院_卷1] -- 第6讲脚本 [BF学院_卷1] -- 第五讲:第一次修正——Pitch Flip 为什么看起来有效 [BF学院_卷1] -- 第5讲脚本 - longyue
[FPGA] 数字IC/FPGA 跨时钟域问题详解(1)同步与异步时钟
longyue · 2025-09-11 · via 博客园 - longyue

https://mp.weixin.qq.com/s?__biz=Mzk5MDkzNjU2OA==&mid=2247484247&idx=1&sn=a7a91e914b105e962e107743a4e0c651&scene=21&poc_token=HD4cwmijQS9EoxsA3rJWzMgcOC1XXd7RCbwMuydW

一、同步时钟还是异步时钟?

在数字系统中,时钟的属性包括:频率、相位及时钟源

因此,区分同步时钟还是异步时钟的关键点在于各时钟的频率及相位关系是否固定、时钟是否同源(具备可预知性)。

1.1 什么是同步时钟?

所谓同步电路,即整个设计都使用了同一时钟源,且时钟之间的频率和相位关系都是事先预知的,如下述时钟:

    • 同频同相 
    • 同频不同相(固定相位差)通常由时钟路径延迟导致的ClockSkew
    • 同源不同频(整数倍频率比):分频器或同一PLL输出的整数倍多路时钟

需要注意的是,某些情况(下文会详解)即使是源端和目的端属于同步时钟,也需要进行跨时钟域处理以确保数据被正确传输。

同步设计的优势在于,EDA工具能够很方便地对全同步设计进行时序检查;另一方面,同步设计具备时钟边沿采样的特点,能够避免毛刺传播至整个电路。

1.2 什么是异步时钟?

所谓异步时钟,即时钟不同源(两个PLL的输出或来自于不同晶振的输出),或者是时钟同源但频率比为非整数倍的两个时钟为异步时钟(非整数频率比会导致两个时钟的相位关系不固定),如下述时钟:

    • 不同源: 时钟由不同的晶振或PLL输出,相位关系不明确
    • 同源不同频(非整数倍频率比):分频器或同一PLL输出的整数倍多路时钟

二、为什么会出现异步设计?什么时候需要进行跨域处理?

一句话总结不得已而为之。

全同步设计的劣势主要体现在这两方面:

1、在功能复杂的数字设计中(如SoC系统),往往集成有各类低速模块(如Uart)与高速模块(如CPU、GPU),几乎不可能使用同一个时钟,多采用GALS(全局异步/局部同步)设计;

举个例子,某CPU内核的核心频率为1GHz,用于调试CPU内核的JTAG接口的频率一般不会超过20MHz,
因此必须在CPU和JTAG之间设计异步处理电路(使1GHz与20MHz这两个时钟域可以安全地交互调试信息)。

2、Clock Skew(时钟偏斜)问题,即时钟边沿到达各Flip-Flop的时间有所不同(如下图中clk1和clk2所示,CTS(时钟树综合)可解决该问题,但需要向低延迟的时钟路径插入延迟单元,不可避免地会增加面积和功耗);

11

3、同源不同频(整数倍频率比)情况,看起来没有跨时钟域。

然而,当出现下图所示的慢时钟采样快时钟时,快时钟过快反转导致慢时钟无法正确采样到快时钟的数据。这时候也需要进行处理,将快时钟信号展宽,使慢时钟域能够正确采样。

11

需要明确的是,跨时钟域处理的核心目标是保证数据能够正确从源端传输到目的端。

下一篇文章,我们将会围绕 亚稳态问题 进行讲解。