EDA365电子工程师网

标题: [求助]我需要统计所有Net不同线宽的总线长,应该用什么方式来储存这对数据 [打印本页]

作者: 361553894    时间: 2015-11-3 10:44
标题: [求助]我需要统计所有Net不同线宽的总线长,应该用什么方式来储存这对数据
目前获取到的List格式为
((width1 length1) (width2 length2)...(widthn lengthn))
然后根据widthn是否相同,将lengthn相加
这个需要怎么实现??
还有没有更好的方法来统计??

作者: betamelody    时间: 2015-11-3 13:08
以线宽为索引存到 table 中
作者: 361553894    时间: 2015-11-3 13:37
betamelody 发表于 2015-11-3 13:08
以线宽为索引存到 table 中

table应该怎么使用??这应该就是c语言中的指针吧?
在skill中不知道怎么使用

作者: 361553894    时间: 2015-11-3 13:57
本帖最后由 361553894 于 2015-11-3 14:30 编辑
betamelody 发表于 2015-11-3 13:08
以线宽为索引存到 table 中

TempList = nil
tmpList = sortcar(tmpList 'lessp)
temp = list(0,0)
foreach(tmp tmpList
    unless(car(tmp) == car(temp)
        TempList = append1(TempList temp)
        temp = list(0,0)
    )
    temp = list(car(tmp) cadr(temp) + cadr(tmp))
)
TempList = remove('(0,0) TempList)
这是我目前的做法,tmpList存储的是((width1 length1) (width2 length2)...(widthn lengthn))

发现问题了。。。最后一组不会添加到列表内。。。



作者: betamelody    时间: 2015-11-3 17:32
lw = makeTable("lw" 0)
lw[linedbid->width] = linelen+lw[linedbid->width]
作者: 361553894    时间: 2015-11-4 08:28
本帖最后由 361553894 于 2015-11-4 10:10 编辑
betamelody 发表于 2015-11-3 17:32
lw = makeTable("lw" 0)
lw[linedbid->width] = linelen+lw[linedbid->width]


可我的linewidth可能是浮点数,不是interger,array[index]不是要求index是整数么?
作者: 361553894    时间: 2015-11-4 10:13
betamelody 发表于 2015-11-3 17:32
lw = makeTable("lw" 0)
lw[linedbid->width] = linelen+lw[linedbid->width]

刚试了下,linedbid->width允许是小数,table好神奇啊。。。
作者: 361553894    时间: 2015-11-4 10:38
本帖最后由 361553894 于 2015-11-4 10:47 编辑

目前用的两种方法,都是可行的
  1. TempList = nil
  2. tmpList = nil
  3. foreach(child Children
  4.     when(child->objType == "path"
  5.         segments = child->segments
  6.         foreach(seg segments
  7.             if(axlVersion('version) > 16 then
  8.                 tmpList = append1(tmpList list(seg->width axlDBGetLength(seg)))
  9.             else
  10.                 tmpList = append1(tmpList list(seg->width wlGetSegLength(seg)))
  11.             )
  12.         )
  13.     )
  14. )
  15. tmpList = sortcar(tmpList 'lessp)
  16. temp = list(0,0)
  17. foreach(tmp tmpList
  18.      unless(car(tmp) == car(temp)
  19.            TempList = append1(TempList temp)
  20.            temp = list(0,0)
  21.      )
  22.      temp = list(car(tmp) cadr(temp) + cadr(tmp))
  23. )
  24. TempList = append1(TempList temp)
  25. TempList = remove('(0,0) TempList)
复制代码



  1. lw = makeTable("lw" 0)
  2. foreach(child Children
  3.       when(child->objType == "path"
  4.             segments = child->segments
  5.             foreach(seg segments
  6.                  if(axlVersion('version) > 16 then
  7.                      lw[seg->width] = axlDBGetLength(seg) + lw[seg->width]
  8.                  else
  9.                      lw[seg->width] = wlGetSegLength(seg) + lw[seg->width]
  10.                  )
  11.             )
  12.       )
  13. )  
  14. TempList = tableToList(lw)
  15. TempList = sortcar(TempList 'lessp)  
复制代码

作者: Projectaker    时间: 2016-1-5 18:09
支持一下




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2