set_dont_touch 和 set_false_path 有什么区别
时间: 2025-08-01 08:41:59 浏览: 11
<think>我们正在讨论两个EDA工具中的约束命令:set_dont_touch和set_false_path。这两个命令在功能、使用场景和时序约束方面有显著区别。下面我将逐一解释。###1.set_dont_touch**功能**:-`set_dont_touch`用于告诉综合工具(如DesignCompiler)不要对指定的对象(如端口、网络、单元等)进行任何优化。这意味着工具不会改变这些对象的逻辑结构或插入缓冲器等。-当对一个网络设置`set_dont_touch`时,任何与该网络相连的门也会继承这个属性(除非使用`no_propagate`选项)[^2]。-例如:`set_dont_touch[get_portsdata_out]`会防止工具优化`data_out`端口[^1]。**使用场景**:-通常用于时钟网络,以防止综合工具在时钟路径上插入缓冲或进行逻辑优化,从而保持时钟树的纯净性[^2]。-也可以用于需要保留的特定逻辑或信号路径,比如手动设计的部分。**对时序的影响**:-它本身不是时序约束,而是物理/逻辑约束。它阻止优化,因此可能间接影响时序(因为优化被禁止,可能导致时序路径未被优化)。###2.set_false_path**功能**:-`set_false_path`是一个时序约束命令(通常用于SDC文件),用于告诉时序分析工具忽略特定路径的时序检查。-它表示指定的路径不需要满足时序要求(例如,异步路径、测试逻辑等)。**使用场景**:-异步信号路径:例如,跨时钟域的路径,这些路径不需要时序分析(因为数据同步通过其他方式处理,如同步器)[^5]。-测试模式或功能模式中不活动的路径。-例如:`set_false_path-through[get_pins{sync_reg*}]`可以用于忽略通过同步寄存器的路径(如果这些寄存器已用`ASYNC_REG`属性标记)[^5]。**对时序的影响**:-它直接影响时序分析:被标记为falsepath的路径不会被检查建立时间和保持时间,从而可能使设计更容易满足时序收敛。###主要区别|特性|set_dont_touch|set_false_path||--------------|------------------------------|--------------------------------||**类型**|物理/逻辑约束(综合阶段)|时序约束(时序分析阶段)||**功能**|阻止综合工具优化指定对象|告诉时序分析工具忽略指定路径||**使用阶段**|综合(synthesis)|静态时序分析(STA)||**影响**|保持对象不变,可能影响时序|免除路径的时序检查||**典型场景**|时钟网络、保留特定逻辑|异步路径、测试逻辑|###注意事项-两者可以同时使用:例如,一个异步路径可能既需要设置`set_false_path`(告诉STA不要检查时序),又需要设置`set_dont_touch`(防止综合工具修改同步器逻辑)。-`set_ideal_network`:与`set_dont_touch`类似,但更极端——它假设网络是理想的(零延迟、无电阻电容),并自动设置`dont_touch`,同时免除DRC约束[^3]。它通常用于时钟或复位网络,但要注意它会完全忽略物理特性。###示例假设一个设计中有一个跨时钟域同步链:-对同步链的寄存器设置`ASYNC_REG`属性(如Vivado中的`(*ASYNC_REG="TRUE"*)`)[^5]。-在同步链的输入端口设置`set_dont_touch`,以防止综合工具优化同步链的逻辑。-使用`set_false_path`约束从源时钟域到同步链的路径(因为这是异步路径)。§§相关问题§§1.在什么情况下需要同时使用`set_dont_touch`和`set_false_path`?2.`set_ideal_network`和`set_dont_touch`有什么区别?3.如何为异步跨时钟域路径设置约束?4.设置`set_dont_touch`后,是否还需要设置其他约束来保证时序?</think>### set_dont_touch vs set_false_path 详解
#### **1. 功能区别**
| 命令 | 核心功能 | 作用阶段 |
|--------------------|--------------------------------------------------------------------------|--------------|
| **`set_dont_touch`** | 阻止综合工具对指定对象(端口/网络/单元)进行**逻辑优化**或修改 | **综合阶段** |
| **`set_false_path`** | 指示时序分析工具**忽略特定路径的时序检查**(建立/保持时间) | **时序分析阶段** |
#### **2. 使用场景对比**
- **`set_dont_touch` 典型场景**:
- **时钟网络保护**:防止综合工具在时钟路径插入缓冲器或优化逻辑[^2]。
- **手动优化保留**:保护工程师预设计的电路结构(如定制逻辑模块)。
- **端口固定**:保持关键端口(如 `data_out`)的原始连接关系[^1]。
> 📌 注意:`set_dont_touch` 会**传播到相连逻辑**(如门电路继承属性)[^2]。
- **`set_false_path` 典型场景**:
- **跨时钟域路径**:异步信号路径(如时钟域A → 时钟域B)无需时序检查[^5]。
- **测试/调试路径**:生产测试模式(scan chain)或冗余逻辑的路径。
- **伪路径**:功能上永不触发的路径(如复位后无效的组合逻辑)。
#### **3. 对时序约束的影响**
| 属性 | 时序约束影响 |
|---------------------|----------------------------------------------------------------------------|
| **`set_dont_touch`** | 间接影响时序:禁止优化可能导致路径延迟未改善,但**不改变时序检查规则**。 |
| **`set_false_path`** | 直接影响时序:**完全免除路径的时序收敛要求**(STA跳过该路径检查)[^5]。 |
#### **4. 与其他命令的关联**
- **`set_dont_touch` 衍生命令**:
- `set_ideal_network`:更极端版本,强制网络零延迟且免除DRC约束(如max_capacitance)[^3]。
- `set_dont_touch_network`:专用于网络级保护(常用于时钟/复位)[^2]。
- **`set_false_path` 的替代方案**:
- `set_async_reg`:标记异步寄存器(如 `(* ASYNC_REG = "TRUE" *)`),暗示跨时钟域路径[^5]。
#### **5. 关键区别总结**
| 维度 | `set_dont_touch` | `set_false_path` |
|--------------|-----------------------------------|---------------------------------|
| **目标** | 保护物理结构 | 免除时序要求 |
| **工具阶段** | 综合(DC/Vivado综合引擎) | 时序分析(PrimeTime/Vivado STA)|
| **传播性** | 逻辑网络相连对象自动继承[^2] | 仅作用于指定路径 |
| **风险** | 可能导致时序未优化 | 过度使用会掩盖真实时序问题 |
> ⚠️ **典型错误示例**:
> 对跨时钟域路径**仅用 `set_dont_touch`** → 综合保留路径结构,但STA仍报时序违例。
> **正确做法**:需**同时设置**:
> ```tcl
> set_dont_touch [get_cells sync_cell] ;# 保护同步器逻辑
> set_false_path -to [get_pins sync_cell/D] ;# 免除时序检查[^5]
> ```
阅读全文
相关推荐



















