当您学习数字电路设计时,您会遇到 unate / non-unate 单元,起初您会想:"这有什么意义?"
Unateness 是 STA 的一个标准,旨在 "用简单的规则安全、单调地定义最坏情况"。这是为了降低运行时性能和悲观程度。
1) Unate / Non-unate:单线定义
- Unate 单元:输入转换(上升/下降)可以单调地确定给定输入引脚的输出转换方向。
→ STA 可以固定过渡方向并计算最坏情况。因此,需要计算的情况数量很少。

- 例如,AND 栅极要么会发生输入引脚转换,而输出引脚会发生同方向的信号转换,要么会保持先前的信号。
- 反之,如果输出引脚信号的移动方向与输入引脚相反,则称为负单向门。
- 非单向门单元:输出转换的方向可能因情况(不同的输入状态/条件)而异。
→ STA 无法固定转换方向,因此需要分割情况。

换句话说,"非单元分支计时弧/前例,并枚举不同的情况。(部分枚举)。"
2) 为什么 Liberty 的 timing_sense 非常重要
一个库(.lib)通常包含以下内容。
timing_sense:positive_unatetiming_sense:negative_unatetiming_sense:non_unate
这一行的作用很简单:
它允许像 PrimeTime 这样的 STA 引擎决定哪些时序弧是 "基于 单调性的可剪枝"。
Unate 侧:
- 相应引脚的过渡方向是固定的,因此
- 候选弧/案例较少。
Non-unate 侧:
- 可能的弧/案例范围更广,因此
- 运行时间↑ + 悲观↑的可能性更大。
3) 왜 “퍼포먼스 때문만”은 아닌가
맞다,
STA是一种非统一体,由于分支的存在,STA会减慢速度。
但更重要的是:
通过单调性假设,Unate 使 STA 很容易做出 "安全上界"(不会错过最坏情况的保守)。
非单调性打破了这一假设,迫使引擎变得更加保守(=悲观)。"
换句话说,单调性/非单调性不是 "引擎优化技巧",而是 STA 数学模型的假设条件。
4)为什么非单态单元在时序计算中令人头痛
(1) XOR:一个典型的 非统一运算
在 XOR 中,输入到输出的变化 "方向 "并不固定。
后果:
- 时序弧/情况增加
- 难以剪枝
- 可能在 STA 中验证比实际电路行为更悲观的行为
。