KiCad中文论坛

 找回密码
 立即注册
搜索
热搜: 教程
查看: 308|回复: 2

kicad 7.0.11自定义规则问题

[复制链接]

2

主题

3

帖子

32

积分

新手上路

Rank: 1

积分
32
发表于 2024-8-13 15:04:24 | 显示全部楼层 |阅读模式
kicad 7.0.11在自定义规则的时候 出现问提,请大佬指教,规则如下:

    (rule "DP 100R Outer"
(layer outer)(condition "A.NetClass == 'DP 100R' && AB.isCoupledDiffPair()")(constraint track_width (opt 3.30mil))(constraint diff_pair_gap (min 3.71mil) (opt 4.70mil))(constraint clearance (min 7.4mil)))自定义规则编译没有错误,但是实际使用时condition 条件不满足直接返回了,逻辑上想设定DP 100R 不同差分对的对间间隙,但是效果是不包括后面AB.isCoupledDiffPair()这部分时,规则可以使用,包含这部分时条件就不满足了,请问这个规则有什么问题,需要如何改


回复

使用道具 举报

27

主题

413

帖子

5255

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5255
发表于 2024-8-13 17:20:07 | 显示全部楼层
试试ChatGPT给的解决方法

在KiCad的设计规则文件中,自定义条件 `AB.isCoupledDiffPair()` 的使用有时可能导致预期外的行为。你的规则定义如下:

```plaintext
(rule "DP 100R Outer"
    (layer outer)
    (condition "A.NetClass == 'DP 100R' && AB.isCoupledDiffPair()")
    (constraint track_width (opt 3.30mil))
    (constraint diff_pair_gap (min 3.71mil) (opt 4.70mil))
    (constraint clearance (min 7.4mil))
)
```

### 问题分析

`AB.isCoupledDiffPair()` 这个函数的作用是检查两个网络 `A` 和 `B` 是否是耦合的差分对(Coupled Differential Pair)。但在某些情况下,KiCad可能无法正确评估这个条件,尤其是在结合其他条件(如 `NetClass` 检查)时。

另外,`AB.isCoupledDiffPair()` 检查的是两个网络 `A` 和 `B` 之间的关系。如果规则中的 `A` 和 `B` 是同一网络或者不满足差分对的条件,条件就会失败。你的规则意图可能是应用于“DP 100R”网络类中的所有差分对,但是 `NetClass` 和差分对的检查逻辑可能存在冲突。

### 可能的解决方案

1. **简化条件:**
你可以先尝试简化条件表达式,只检查是否是差分对,看看是否能起作用:

   ```plaintext
   (condition "AB.isCoupledDiffPair()")
   ```

   然后再逐步加入其他条件,看看是哪一个导致条件无法评估。

2. **拆分规则:**
考虑拆分规则,比如先检查 `NetClass`,然后再单独为差分对应用规则:

   ```plaintext
   (rule "DP 100R Class"
       (condition "A.NetClass == 'DP 100R'")
       (constraint track_width (opt 3.30mil))
   )

   (rule "DP 100R Diff Pair"
       (condition "AB.isCoupledDiffPair() && A.NetClass == 'DP 100R'")
       (constraint diff_pair_gap (min 3.71mil) (opt 4.70mil))
       (constraint clearance (min 7.4mil))
   )
   ```

   这样做可以帮助明确是哪个条件导致了问题。

3. **检查差分对定义:**
确保你的差分对在KiCad中正确定义。如果差分对没有正确设置,那么 `AB.isCoupledDiffPair()` 将永远不会返回 `true`,导致规则无法应用。

4. **更新KiCad版本:**
如果你使用的是较旧的KiCad版本,可能存在Bug,建议更新到最新版本。


### 调整后的规则示例

以下是一个可能的调整规则:

```plaintext
(rule "DP 100R Outer"
    (layer outer)
    (condition "A.NetClass == 'DP 100R'")
    (constraint track_width (opt 3.30mil))
)

(rule "DP 100R Diff Pair Gap"
    (layer outer)
    (condition "A.NetClass == 'DP 100R' && AB.isCoupledDiffPair()")
    (constraint diff_pair_gap (min 3.71mil) (opt 4.70mil))
    (constraint clearance (min 7.4mil))
)
```

通过拆分规则,你可以更好地调试并找出问题所在。

### 总结

你的规则在逻辑上可能因为条件的复杂性导致评估失败。尝试简化规则或分解条件可以帮助找到问题根源。另外,确保你在设计中正确定义了差分对。

回复 支持 反对

使用道具 举报

2

主题

3

帖子

32

积分

新手上路

Rank: 1

积分
32
 楼主| 发表于 2024-8-13 17:40:22 | 显示全部楼层
admin 发表于 2024-8-13 17:20
试试ChatGPT给的解决方法

在KiCad的设计规则文件中,自定义条件 `AB.isCoupledDiffPair()` 的使用有时可 ...

好的 感谢大佬 我试一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|KiCad中文论坛

GMT+8, 2024-11-21 16:53 , Processed in 0.024835 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2022, Tencent Cloud.

快速回复 返回顶部 返回列表