找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 454|回复: 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

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
2#
发表于 2015-12-21 14:58 | 只看该作者
你可以檢查每一個path的開始和結束位置,

点评

最近遇到的都是这类的问题,需要把原本没有顺序的但是能够首尾相连的小段串起来。。。。 但实在是没啥好的方法能够做到这一点啊。。。。  详情 回复 发表于 2015-12-21 15:07

102

主题

377

帖子

1158

积分

四级会员(40)

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

积分
1158
3#
 楼主| 发表于 2015-12-21 15:07 | 只看该作者
XYX365 发表于 2015-12-21 14:58
你可以檢查每一個path的開始和結束位置,

最近遇到的都是这类的问题,需要把原本没有顺序的但是能够首尾相连的小段串起来。。。。
但实在是没啥好的方法能够做到这一点啊。。。。

点评

只要寫成一個函數,這樣將處理完會回傳成path,可能會比較簡單  详情 回复 发表于 2015-12-21 15:11

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
4#
发表于 2015-12-21 15:11 | 只看该作者
361553894 发表于 2015-12-21 15:07
最近遇到的都是这类的问题,需要把原本没有顺序的但是能够首尾相连的小段串起来。。。。
但实在是没啥好 ...

只要寫成一個函數,這樣將處理完會回傳成path,可能會比較簡單

点评

比如一堆线段的首尾坐标分别是 ((1,1) (2,3)) ((3,2) (2,2)) ((2,3) (2,2)) ((4,5) (5,4)) ((0,2) (3,2)) ((5,4) (0,2)) 怎么串成首尾相连的?  详情 回复 发表于 2015-12-21 15:20
就是这个函数不好写,列表中的第一个并不是这些小段的起点,因为不是首尾相连的,所以也不能随便抓一个就当起点  详情 回复 发表于 2015-12-21 15:13

102

主题

377

帖子

1158

积分

四级会员(40)

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

积分
1158
5#
 楼主| 发表于 2015-12-21 15:13 | 只看该作者
XYX365 发表于 2015-12-21 15:11
只要寫成一個函數,這樣將處理完會回傳成path,可能會比較簡單

就是这个函数不好写,列表中的第一个并不是这些小段的起点,因为不是首尾相连的,所以也不能随便抓一个就当起点

点评

你所選取的Object是什麼? 如nets, clines, clinesegs  详情 回复 发表于 2015-12-21 15:17

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
6#
发表于 2015-12-21 15:17 | 只看该作者
361553894 发表于 2015-12-21 15:13
就是这个函数不好写,列表中的第一个并不是这些小段的起点,因为不是首尾相连的,所以也不能随便抓一个就 ...

你所選取的Object是什麼?

如nets, clines, clinesegs

点评

clines 我是获取到net,然后获取branches,获取children,然后child->objType == "path"来限定 procedure( BranchLength(@optional (net nil) (netType "XNET") ) prog( (BranchLength Net nets Branches  详情 回复 发表于 2015-12-21 15:22

102

主题

377

帖子

1158

积分

四级会员(40)

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

积分
1158
7#
 楼主| 发表于 2015-12-21 15:20 | 只看该作者
XYX365 发表于 2015-12-21 15:11
只要寫成一個函數,這樣將處理完會回傳成path,可能會比較簡單

比如一堆线段的首尾坐标分别是
((1,1) (2,3))
((3,2) (2,2))
((2,3) (2,2))
((4,5) (5,4))
((0,2) (3,2))
((5,4) (0,2))
怎么串成首尾相连的?

点评

如果是實際的Clines(path)的線段,裡面的segments是連續的,只要檢查第一個和最後一個startEnd位置 (prop nil bBox ((1774.63 -2311.29) (1830.37 -2092.43) ) readOnly t net dbid:126433736 o  详情 回复 发表于 2015-12-21 15:25

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

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
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
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
14#
 楼主| 发表于 2015-12-21 16:54 | 只看该作者
XYX365 发表于 2015-12-21 15:39
對,思路就這麼簡單

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

点评

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

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
谁画出这天地 又画下我和你
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-26 05:44 , Processed in 0.068192 second(s), 35 queries , Gzip On.

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

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

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