# 内核的时序优化-优化到233MHz的秘密

## 什么是时序问题
### 理想的数字逻辑设计
在理想的数字逻辑设计模型中，器件表现出以下特性：  
- 触发器输出无延迟
- 组合逻辑单元无延迟
- 线网信号传输无延迟
- 触发器在有效时钟沿的前一瞬间(0-)采样，在有效时钟沿的后一瞬间(0+)输出
![触发器和反相器](/doc/图库/小教程/时序优化/触发器和反相器.svg)  
以一个触发器和一个反相器为例，触发器的输入输出不断翻转，电路的理想波形如下所示：  
![触发器和反相器的理想波形](/doc/图库/小教程/时序优化/触发器和反相器的理想波形.svg)  
由于是理想元件，所有的延迟`Txx`都无限趋向于0，建立时间/保持时间根本不存在，不会发生任何的时序问题。  

### 现实的数字逻辑设计
理想的数字逻辑设计模型只是一种抽象的问题分析工具，现实的数字电路需要考虑更多“模拟”的问题：  
- 触发器输出存在延迟Tc2q
- 组合逻辑单元存在延迟Tcomb
- 线网信号传输存在延迟Twd1,Twd2
- 触发器采样需要满足建立时间Ts和保持时间Th的要求
  
同样是一个触发器和一个反相器的电路，实际波形会呈现更加真实的特性：  
![触发器和反相器的现实波形](/doc/图库/小教程/时序优化/触发器和反相器的现实波形.svg)  
其中，`Q1`为触发器的输出端Q，`Q2`为反相器的输入端，`D1`为反相器的输出端，`D2`为触发器的输入端D。  
如图所示，`D2`信号经过了线网和组合逻辑，相对于`CLK`的触发沿已经延迟了1/3个周期，这是理想元件无法产生的现象。  
这不禁让人思考：**如果触发沿到`D2`的延迟继续扩大，接近甚至超过一个周期，电路是否还能正常工作？**  

### 建立/保持时间
聪明的同学应该可以看出，如果触发沿到`D2`的延迟超过一个周期，电路无法工作。   
**那么，是不是只要延迟小于一个周期，就能正常工作了？**  
也不是哦，还需要考虑建立时间和保持时间。  

- 建立时间：时钟触发沿之前，数据需要保持稳定的最小时间，以便数据能够被时钟正确的采样。
- 保持时间：时钟触发沿之后，数据需要保持稳定的最小时间，以便数据能够被电路准确的传输。
- 通俗解释：时钟触发沿前后，数据需要在一小段时间内保持不变，这个时间窗口就是建立时间和保持时间。

建立时间与保持时间是相互制约的。

时序逻辑设计，电路必须满足建立/保持时间的要求。  
静态时序分析(STA)，检查电路是否满足建立/保持时间。  
如果电路不满足建立/保持时间的要求，那么就有概率产生亚稳态现象，导致数字系统无法稳定运行。

### 解决时序问题的方法


