1. 时序基础概念:时钟周期、上升沿、下降沿、建立时间、保持时间
做嵌入式这么多年,我见过太多工程师在低速总线上栽跟头。你可能会想,低速嘛,时序要求又不高,随便搞搞就行。嗯,我以前也这么想,直到有一次I2C通信死活不稳定,查了三天才发现是建立时间差了那么几纳秒。
说白了,时序就是数字电路的「交通规则」。信号什么时候出发、什么时候到达、什么时候采样,都得按规矩来。今天我们就从最基础的五个概念说起。
1.1 时钟周期
时钟周期,就是时钟信号重复一次的时间间隔。比如50MHz的时钟,周期就是20ns。这个很好理解,对吧?
但我要提醒你一点:时钟周期不是你想设多少就能跑多少的。它受限于整个路径上的延迟总和。我在一个项目中遇到过,明明芯片手册说能跑100MHz,结果实际板子上只能跑到80MHz,就是因为PCB走线太长,信号传输时间超了。
核心公式:
T_clk ≥ T_clk2q + T_logic + T_setup + T_skew
其中T_clk2q是触发器输出延迟,T_logic是组合逻辑延迟,T_setup是建立时间,T_skew是时钟偏斜。
1.2 上升沿与下降沿
上升沿,就是信号从低电平跳变到高电平的那个瞬间。下降沿则相反。大多数同步电路都在上升沿采样数据,但也有用下降沿的,比如DDR内存就用双沿。
你可能会问:为什么非要用边沿?直接用高电平或低电平不行吗?
其实早期确实有电平触发的电路,但问题在于:电平持续的时间太长,容易受到噪声干扰。而边沿只是一个瞬间,抗干扰能力强得多。我调试SPI总线时,就遇到过因为上升沿太缓导致采样错误的案例——信号从0到1花了将近10ns,结果接收端根本分不清边沿在哪。
实战技巧:
用示波器看时钟信号时,重点关注上升时间。如果上升时间超过周期的10%,就要小心了。比如20ns的时钟,上升时间超过2ns就可能出问题。
1.3 建立时间
建立时间,是指数据在时钟有效沿之前必须保持稳定的最短时间。为什么要有这个要求?因为触发器内部需要时间把数据「锁存」住。
我曾经调试过一个UART通信问题,波特率设得不高,但就是偶尔丢字节。用逻辑分析仪抓了波形才发现,数据在时钟上升沿前只稳定了1ns,而芯片要求的建立时间是5ns。说白了,数据还没「站稳」就被采样了,结果可想而知。
避坑指南:
我曾经在I2C总线上加了一个长走线,结果建立时间不够了。后来加了一个RC延迟电路才解决。记住:走线越长,建立时间越紧张。
1.4 保持时间
保持时间,是指数据在时钟有效沿之后必须保持稳定的最短时间。这个和建立时间是对称的——采样完成后,数据不能马上变,得让触发器内部完成锁存。
保持时间的问题往往更隐蔽。因为建立时间不够,你还能看到数据错误;但保持时间不够,可能只是偶尔出错,很难复现。我调试一个SPI Flash驱动时,读数据偶尔出错,查了整整两天,最后发现是FPGA输出的数据在时钟下降沿后只保持了0.5ns,而Flash要求至少1ns。
| 参数 | 含义 | 典型值(低速总线) | 常见问题 |
|---|---|---|---|
| 建立时间 | 时钟沿前数据需稳定 | 5-20ns | 走线过长、负载过重 |
| 保持时间 | 时钟沿后数据需稳定 | 0-10ns | 时钟偏斜、信号反射 |
1.5 建立时间与保持时间的关系
这两个参数其实是一对矛盾。你想想看:
- 建立时间要求数据提前到,所以希望路径延迟小
- 保持时间要求数据别走太快,所以希望路径延迟大
这就麻烦了。你优化了建立时间,可能就破坏了保持时间。反过来也一样。
我个人的习惯是:先保证建立时间,再检查保持时间。因为建立时间出问题,数据直接错;保持时间出问题,往往还能靠工艺余量扛过去。当然,这只是经验之谈,严格的项目两个都得算。
时序检查的两个基本不等式:
建立时间检查:T_data_arrival + T_setup ≤ T_clock_arrival + T_period
保持时间检查:T_data_arrival ≥ T_clock_arrival + T_hold
1.6 实际测量中的注意事项
纸上谈兵容易,真到示波器上测时序,你会发现一堆坑:
- 探头电容会影响信号——普通探头10pF的电容,对高速信号就是个大负载
- 地线要短——地线太长会引入噪声,我见过有人用10cm的地线夹,测出来的波形全是毛刺
- 触发要设对——测建立时间要用数据触发,测保持时间要用时钟触发
我的测量流程:
1. 先用示波器的光标测量时钟周期,确认频率准确
2. 放大到能看到上升沿,测量上升时间
3. 同时显示时钟和数据,测量建立时间和保持时间
4. 多测几个周期,取最差情况
好了,这就是时序的五个基础概念。你可能会觉得简单,但说实话,我见过太多工程师在这些基础概念上翻车。下次我们聊I2C总线的具体时序测量,到时候这些概念都会用上。
记住一句话:时序不是算出来的,是测出来的。仿真再完美,不上示波器看波形,你永远不知道实际板子上发生了什么。