找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 456|回复: 20
打印 上一主题 下一主题

[求助]请问怎么获取到一条net原有的path???

[复制链接]

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
跳转到指定楼层
1#
发表于 2015-12-21 14:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
关键是要获取到net原本首尾相连的path
发现branch->children获取到的所有的path并不是按照原有的顺序排序的,好像是按照dbid排序的
对这种不封闭的首尾相连的小段怎么连接成一长串,是个比较麻烦的问题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
推荐
 楼主| 发表于 2015-12-21 15:22 | 只看该作者
本帖最后由 361553894 于 2015-12-21 15:24 编辑
XYX365 发表于 2015-12-21 15:17
你所選取的Object是什麼?

如nets, clines, clinesegs

clines
我是获取到net,然后获取branches,获取children,然后child->objType == "path"来限定
  1. procedure( BranchLength(@optional
  2. (net nil)
  3. (netType "XNET")
  4. )
  5. prog( (BranchLength Net nets Branches Children Len segments)
  6. BranchLength = nil
  7. if(stringp(net) then
  8. Net = car(axlSelectByName(netType net))
  9. else
  10. Net = net
  11. )
  12. unless(Net return(nil))
  13. Children = nil
  14. if(Net->type then
  15. nets = Net->groupMembers
  16. else
  17. nets = list(Net)
  18. )
  19. foreach(Net nets
  20. Branches = Net->branches
  21. foreach(Branch Branches
  22. Children = append(Children Branch->children)
  23. )
  24. )
  25. foreach(child Children
  26. when(child->objType == "path"
  27. Len = 0.0
  28. segments = child->segments
  29. foreach(seg segments
  30. if(axlVersion('version) > 16 then
  31. Len = axlDBGetLength(seg) + Len
  32. else
  33. Len = wlGetSegLength(seg) + Len
  34. )
  35. )
  36. BranchLength = append1(BranchLength list(child->layer Len))
  37. )
  38. )
  39. return(BranchLength)
  40. ))
复制代码

6

主题

220

帖子

3571

积分

五级会员(50)

Rank: 5

积分
3571
推荐
发表于 2015-12-24 09:18 | 只看该作者
在下的概念是
將path座標拷貝到一組暫存座標
做三個迴圈
上層做整個path數量的迴圈,此層是因為沒有排序,會有連接線段出現在判斷座標前的狀況
中間層是分岔計數,當相同座標出現多次時,此迴圈數量增加
內層再做一次path迴圈,此層是主程式的層面,使用先前建立的暫存座標,將已判斷的線段StartEnd成無連接,例'((a a)(a a))避免重複判斷
有幾個遇到問題的經驗
1. 注意pin與StartEnd座標雖然相同,但pin是SMT, path在內層,不應連接需判斷,就要判斷pin的層面(SMT TOP/Bottom或是穿孔,甚至有些零件是雙面,mirror時的判斷也要注意)
2. via狀況相同,出現盲埋孔的時候,是否有連接線段,所以要判斷via層面
不過樓主提到Cline閉合,避開高速信號的走法,此狀況的確可能存在於佈線,而我當初並沒有處理這種狀況,我的思路應會導致其中一段無法判斷到終端
樓主題到是要做等長,是要做phase check嗎?Allegro好像有內建計算,但詳情不太清楚,只知道layout 工程師有做檢查。

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
推荐
发表于 2015-12-21 15:25 | 只看该作者
361553894 发表于 2015-12-21 15:20
比如一堆线段的首尾坐标分别是
((1,1) (2,3))
((3,2) (2,2))

如果是實際的Clines(path)的線段,裡面的segments是連續的,只要檢查第一個和最後一個startEnd位置

(prop nil bBox
    ((1774.63 -2311.29)
        (1830.37 -2092.43)
    ) readOnly
    t net dbid:126433736 objType "path"
    segments
    (dbid:129656432 dbid:130232228 dbid:134918884 dbid:134927376 dbid:134926660
        dbid:128182208 dbid:132272396
    ) isEtch t nSegs
    7 hasArcs nil isSameWidth t
    branch dbid:134732740 layer "ETCH/BOTTOM" symbolEtch
    nil parent dbid:134732740 parentGroups nil
)

点评

这里的连续的我知道的,关键是上一级的并不是连续的  详情 回复 发表于 2015-12-21 15:27

7

主题

174

帖子

609

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
609
21#
发表于 2017-6-9 18:18 | 只看该作者
好复杂,学习中

7

主题

351

帖子

348

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
348
20#
发表于 2017-6-9 18:00 | 只看该作者
学习中。。。。。。

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
18#
 楼主| 发表于 2015-12-22 10:43 | 只看该作者
deargds 发表于 2015-12-21 20:30
先取一个线段,再循环找到下一个有一个共同端点的线段,一直循环找到同时和第一个线段另一端一样坐标的线 ...

是Cline不是line,所以不可能闭合的
其实是要做差分对分段等长,利用Net->branches->children来获取到所有的"path",但是这些获取到的path并不是首尾相连的(获取到的children应该是根据dbid排序的,所以如果线路有增删,path就不是首尾相连的了)
所以需要重新排序
现在的做法是选取零件,所有的net都是从这个零件的pin出发,这样,方向不成问题了,遇到分支再考虑吧。。。。

117

主题

2352

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
13799

最佳敬业奖

17#
发表于 2015-12-21 20:30 | 只看该作者
361553894 发表于 2015-12-21 18:59
这种排序用代码实在不知道该怎么处理
①先得找到单独的那一端,用setof匹配只能找到符合条件的,不符合 ...

先取一个线段,再循环找到下一个有一个共同端点的线段,一直循环找到同时和第一个线段另一端一样坐标的线段,过程中注意排除重复项,当然前提是用户选择的线段是首尾闭合的,另外你可以允许一个适当的GAP,在判断坐标是否符合条件时采用axlDistance函数就可以了。

点评

是Cline不是line,所以不可能闭合的 其实是要做差分对分段等长,利用Net->branches->children来获取到所有的"path",但是这些获取到的path并不是首尾相连的(获取到的children应该是根据dbid排序的,所以如果线路有  详情 回复 发表于 2015-12-22 10:43
谁画出这天地 又画下我和你

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
16#
 楼主| 发表于 2015-12-21 18:59 | 只看该作者
deargds 发表于 2015-12-21 17:48
遇到分支或不连续的地方就把坐标Report出来,由用户来修正。

这种排序用代码实在不知道该怎么处理
①先得找到单独的那一端,用setof匹配只能找到符合条件的,不符合条件的反而有困难
②得知道配上的哪一端是唯一的,然后将另一端跟其他的去匹配
③如果遇到不能全部匹配完的(分支),要尽可能配出最长的方案,把剩下的留在最后
数据库内获取到的都是按照dbid排序的,所以如果不进行排序,如果有增加或者删除内容,每次出来的内容也都是不一样的

点评

先取一个线段,再循环找到下一个有一个共同端点的线段,一直循环找到同时和第一个线段另一端一样坐标的线段,过程中注意排除重复项,当然前提是用户选择的线段是首尾闭合的,另外你可以允许一个适当的GAP,在判断坐  详情 回复 发表于 2015-12-21 20:30

117

主题

2352

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
13799

最佳敬业奖

15#
发表于 2015-12-21 17:48 | 只看该作者
361553894 发表于 2015-12-21 16:54
又发现问题了。。。分支怎么办。。。

遇到分支或不连续的地方就把坐标Report出来,由用户来修正。

点评

这种排序用代码实在不知道该怎么处理 ①先得找到单独的那一端,用setof匹配只能找到符合条件的,不符合条件的反而有困难 ②得知道配上的哪一端是唯一的,然后将另一端跟其他的去匹配 ③如果遇到不能全部匹配完的  详情 回复 发表于 2015-12-21 18:59
谁画出这天地 又画下我和你

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
14#
 楼主| 发表于 2015-12-21 16:54 | 只看该作者
XYX365 发表于 2015-12-21 15:39
對,思路就這麼簡單

又发现问题了。。。分支怎么办。。。

点评

遇到分支或不连续的地方就把坐标Report出来,由用户来修正。  详情 回复 发表于 2015-12-21 17:48

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
13#
发表于 2015-12-21 15:39 | 只看该作者
361553894 发表于 2015-12-21 15:36
首先得找到单独的那一头,把它的尾和其他的依次首尾相连
思路就这么简单,但一开始写就觉得无从下手

對,思路就這麼簡單

点评

又发现问题了。。。分支怎么办。。。  详情 回复 发表于 2015-12-21 16:54

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
12#
 楼主| 发表于 2015-12-21 15:36 | 只看该作者
XYX365 发表于 2015-12-21 15:31
那就寫個回路檢查,並重新將正確的順序一個一個放到list裡面

首先得找到单独的那一头,把它的尾和其他的依次首尾相连
思路就这么简单,但一开始写就觉得无从下手

点评

對,思路就這麼簡單  详情 回复 发表于 2015-12-21 15:39

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
11#
发表于 2015-12-21 15:31 | 只看该作者
361553894 发表于 2015-12-21 15:27
这里的segments是连续的我是知道的,关键是上一级的并不是连续的

那就寫個回路檢查,並重新將正確的順序一個一個放到list裡面

点评

首先得找到单独的那一头,把它的尾和其他的依次首尾相连 思路就这么简单,但一开始写就觉得无从下手  详情 回复 发表于 2015-12-21 15:36

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
10#
 楼主| 发表于 2015-12-21 15:27 | 只看该作者
XYX365 发表于 2015-12-21 15:25
如果是實際的Clines(path)的線段,裡面的segments是連續的,只要檢查第一個和最後一個startEnd位置

(pro ...


这里的segments是连续的我是知道的,关键是上一级的并不是连续的

点评

那就寫個回路檢查,並重新將正確的順序一個一個放到list裡面  详情 回复 发表于 2015-12-21 15:31
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-26 07:34 , Processed in 0.068986 second(s), 36 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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