找回密码
 注册
楼主: kevin890505
打印 上一主题 下一主题

[原创]根据ECS里面的CLASS/BUS来自动创建PINPAIR以及对应的MATCHGROUP

  [复制链接]

该用户从未签到

107#
发表于 2022-3-22 16:24 | 只看该作者
贡献不够怎么办呀

该用户从未签到

108#
发表于 2022-3-26 22:20 | 只看该作者
谢谢楼主

“来自电巢APP”

  • TA的每日心情
    开心
    2025-1-18 15:49
  • 签到天数: 68 天

    [LV.6]常住居民II

    109#
    发表于 2022-3-27 23:49 | 只看该作者
    111111111111

    该用户从未签到

    110#
    发表于 2022-3-31 12:59 | 只看该作者
    为撒我的为王欧洲那个是不够

    该用户从未签到

    111#
    发表于 2022-5-2 16:35 | 只看该作者
    弄个积分太难了

    该用户从未签到

    112#
    发表于 2022-10-19 17:33 | 只看该作者
    本帖最后由 digitzing 于 2022-10-19 17:44 编辑
    kevin890505 发表于 2021-6-19 22:00
    要有BUS或者CLASS才可以   忘了做防呆   如果没有 就会出现这情况

    我帮你修改了,改成英文,并支持allegro 17以上,没有BUS也不会一条细线无法退出



    1. /*
    2. ├─
    3. │ ├─        程序名称:Quick_pinpair.il
    4. │ ├─        程序功能:快速创建选择BUS/CLASS对应的pin pair
    5. │ ├─        创建时间:2014年10月31日
    6. │ ├─        作    者:kevin wong
    7. │ ├─        Q      Q:263350809
    8. ├─


    9. 1,2014.10.31开始构建主函数思路;
    10. 2,2014.11.07完成初步功能,测试通过;
    11. 3,2014.12.31修改添加部分按钮,提示;
    12. 4,2019.07.31修改增加分列显示功能,以避免超出屏幕范围
    13. 5,2019.07.31修改多30整除情况下的界面布局,以避免空白列
    14. 6,2019.09.01修改再3个以上器件时候,只显示位号不容易区分,以REF+VALUE的形式展示,
    15.                         并增加新建的MG添加约束,点对点为5mil,菊花链为20mil
    16. 7,2022.10.19 修改width为0时,from显示问题 by digitzing
    17. */


    18. axlCmdRegister( "quickpinpair" 'Quick_PinPair)

    19.   ; load("Quick_pinpair.il")



    20. defun(Quick_PinPair ()
    21.       let( (one allclass)
    22.           allclass = axlDBGetDesign()->netclass
    23.           alleleclass_name =  list()
    24.       foreach(one allclass
    25.                   if(one->electrical
    26.                              then
    27.                                  alleleclass_name = cons(list(one->name one) alleleclass_name)
    28.                                  )
    29.                           )
    30.           if(allbus = axlDBGetDesign()->bus
    31.              foreach(one allbus
    32.                          alleleclass_name = cons(list(one->name one) alleleclass_name)
    33.                          )
    34.                  )
    35.                 classnum = length(alleleclass_name)        ;class 数量         
    36.                 if(classnum <= 30
    37.                         then
    38.                         hig = classnum*2+6
    39.                         else

    40.                         hig = 30*2 + 6                ;>30个时高度固定,增加宽度
    41.                         )
    42.                 ;----------修改部分
    43.                 if(mod(classnum 30) == 0
    44.                 then
    45.                 width = ((classnum/30) + 0)*30 ;项目过多时加宽列数,整除 列宽=列数*30
    46.                  else
    47.                 width = ((classnum/30) + 1)*30 ;项目过多时加宽列数,有多余的,不整除 列宽=(列数+1)*30
    48.                  )
    49.                 if(width == 0
    50.                 then
    51.                         width = 31
    52.                         axlUIWPrint(displayform "No Class was found!")
    53.                 else
    54.                         nil
    55.                  )
    56.                  ;----------修改部分
    57.       Quick_pinpairform()          
    58.           ))
    59.           

    60. defun(Quick_pinpairform ()
    61.         let( (curclass)
    62.                 Formfile = axlTempFile()
    63.         ;Formfile = "./pinpairform.form"
    64.                 formport = outfile(Formfile "w")
    65.                 fprintf(formport "FILE_TYPE=FORM_DEFN VERSION=2\n")


    66.                 if(axlVersion('version)>17
    67.                 then       
    68.                         fprintf(formport "FORM \n")
    69.                 else
    70.                         fprintf(formport "FORM toolwindow\n")
    71.                 )                                

    72.         fprintf(formport "FIXED\n")
    73.                
    74.                 fprintf(formport "PORT %d 1\n" width)
    75.         fprintf(formport "HEADER \"Create PinPair - kevin\"\n")
    76.         fprintf(formport "TILE\n")
    77.                
    78.                 fprintf(formport "\n")
    79.                 fprintf(formport "TEXT \"1.Please creat BUS/CLASS first\"\n")
    80.                 fprintf(formport "TLOC 2 1\n")
    81.                 fprintf(formport "ENDTEXT\n")       
    82.                
    83.                 fprintf(formport "\n")
    84.                 fprintf(formport "TEXT \"2.Please select blew BUS/CLASS\"\n")
    85.                 fprintf(formport "TLOC 2 2\n")
    86.                 fprintf(formport "ENDTEXT\n")
    87.                
    88.         x =2
    89.                 y = 4
    90.                 foreach(curclass alleleclass_name
    91.                          fieldname = car(curclass)
    92.                 fprintf( formport "FIELD %s\n" fieldname)
    93.                 fprintf( formport "FLOC %d %d\n" x y)
    94.                 fprintf( formport "CHECKLIST \" %s\"\n" fieldname)               
    95.                 fprintf( formport "ENDFIELD\n\n")
    96.                 y = y+2
    97.                 if( y >= 64        ;大于30行就切换下一列
    98.                 then
    99.                 y = 4               
    100.                 x = x+30
    101.                 )       
    102.                
    103.                        )
    104.                           
    105.         fprintf(formport "FIELD sel\n")
    106.         fprintf(formport "FLOC 2 %d\n" hig)
    107.         fprintf(formport "MENUBUTTON \"Select All\" 10 3\n")
    108.         fprintf(formport "ENDFIELD \n\n")       
    109.                
    110.         fprintf(formport "FIELD desel\n")
    111.         fprintf(formport "FLOC 14 %d\n" hig)
    112.         fprintf(formport "MENUBUTTON \"Deselect\" 10 3\n")
    113.         fprintf(formport "ENDFIELD \n\n")

    114.         fprintf(formport "FIELD create\n")
    115.         fprintf(formport "FLOC 2 %d\n" hig+2)
    116.         fprintf(formport "MENUBUTTON \"Creat\" 10 3\n")
    117.         fprintf(formport "ENDFIELD \n\n")       
    118.                
    119.         fprintf(formport "FIELD cacel\n")
    120.         fprintf(formport "FLOC 14 %d\n" hig+2)
    121.         fprintf(formport "MENUBUTTON \"Exit\" 10 3\n")
    122.         fprintf(formport "ENDFIELD \n\n")
    123.                

    124.                 fprintf(formport "ENDTILE\n")
    125.         fprintf(formport "ENDFORM\n")
    126.         close(formport)
    127.                
    128.                 displayform = axlFormCreate((gensym) Formfile '(ne inner) 'createpinpairact t)
    129.                 axlFormDisplay(displayform)
    130.                
    131.                 foreach(curclass alleleclass_name
    132.                     axlFormSetField(displayform car(curclass) t)
    133.                                 )

    134.                 if(width == 31
    135.                 then
    136.                         axlUIWPrint(displayform "No Class or Bus was found!")
    137.                 else
    138.                         axlUIWPrint(displayform "Kevin Wong")
    139.                  )       
    140.                 deleteFile(Formfile)               
    141.      )
    142.         )
    143. defun(createpinpairact (displayform)
    144.           let( (membersel curclass onecl one alldp2net)
    145.           allclass = axlDBGetDesign()->netclass
    146.           alleleclass_name =  list()
    147.       foreach(one allclass
    148.                   if(one->electrical
    149.                              then
    150.                                  alleleclass_name = cons(list(one->name one) alleleclass_name)
    151.                                  )
    152.                           )
    153.           if(allbus = axlDBGetDesign()->bus
    154.              foreach(one allbus
    155.                          alleleclass_name = cons(list(one->name one) alleleclass_name)
    156.                          )
    157.                  )
    158.           
    159.           membersel = displayform->curField
    160.       case(membersel
    161.                ("sel"
    162.                         foreach(curclass alleleclass_name
    163.                     axlFormSetField(displayform car(curclass) t)
    164.                                 axlUIWPrint(displayform "Select All")
    165.                                 )                  
    166.                    )
    167.                    ("desel"
    168.                         foreach(curclass alleleclass_name
    169.                     axlFormSetField(displayform car(curclass) nil)
    170.                                 axlUIWPrint(displayform "Deselect All")
    171.                                 )                  
    172.                    )
    173.                    ("create"
    174.                     axlUIWPrint(displayform "Create the pinpair of selected BUS/Class")
    175.                     foreach(onecl alleleclass_name
    176.                             alldp2net = cadr(onecl)->groupMembers
    177.                                   foreach(one alldp2net
    178.                                           if(one->type == "DIFF_PAIR"
    179.                                                      alldp2net = append(remove(one alldp2net) one->groupMembers)
    180.                                                          )
    181.                                                   )
    182.                        
    183.                                if(axlFormGetField(displayform car(onecl))
    184.                                 then
    185.                                  curMGname = strcat("MG_" car(onecl))
    186.                                      allpinslist = list()
    187.                                      foreach(one alldp2net   
    188.                                          allpinslist = append1(allpinslist axlPinsOfNet(one 'pin))
    189.                                                  )

    190.                                  get_min_pinlist(allpinslist)  
    191.                                      if(length(result) == 1
    192.                                               then
    193.                                                   axlUIConfirm(strcat("there is some thing wrong with the BUS/Class " car(onecl)))
    194.                                             else
    195.                                                   if(length(result) == 2
    196.                                                     then
    197.                                                     get_main_pinlist()
    198.                                                         Creat_Match_Group()
    199.                                                         else
    200.                                                         if(length(result) >= 3
    201.                                                         then
    202.                                                         axlClearSelSet()
    203.                                                         axlSetFindFilter(?enabled list("noall" "COMPONENTS") ?onButtons list("all"))
    204.                                                         axlSingleSelectName("REFDES" result)
    205.                                                         resultdbid = axlGetSelSet()
    206.                                                         resultref = nil
    207.                                                         foreach(ref resultdbid
    208.                                                         resultref = append1(resultref strcat(strcat(ref->name "_") ref->deviceType))
    209.                                                        
    210.                                                         )
    211.                                                           choice = axlUIMultipleChoice("Please select a main CPU"
    212.                                                                                resultref strcat("Please select branch" car(onecl)))
    213.                                                           maindev = nth(choice result)
    214.                                                         get_main_pinlist()
    215.                                                             Creat_Match_Group()                                                          
    216.                                                           )
    217.                                                        
    218.                                                         )
    219.                                                 )
    220.                                  )
    221.                                  )
    222.              axlUIWPrint(displayform "Create the pinpair successfully!")                         
    223.                         )
    224.                    ("cacel"
    225.                         axlUIWPrint(displayform "Exit")
    226.                 axlFormClose(displayform)
    227.                 deleteFile(Formfile)                  
    228.                    )          
    229.                   
    230.                )

    231.                  ) )      
    232.           
    233.                   

    234. defun( get_min_pinlist (allpinslist)
    235.       let( (one mlist pin2netlist i j curlist okflag)
    236.            mlist = list()
    237.               foreach(one nth(0 allpinslist)
    238.                           mlist= cons(one->component->name mlist)   ;list(U1 U2)
    239.                                   )          
    240.        result = mlist   
    241.            foreach(pin2netlist allpinslist
    242.                      curlist = pin2netlist
    243.                                  
    244.                                  i = 0
    245.                     while( (i < length(mlist))
    246.                                     j = nth(i mlist)
    247.                      okflag = 0       
    248.                                           foreach(one curlist  
    249.                                                           if(j == one->component->name
    250.                                                              okflag++
    251.                                                              )
    252.                                                           )
    253.                                                           
    254.                                         if(okflag == 0
    255.                                                result = remove(j result)   
    256.                                                )
    257.                                           i++
    258.                                           )  
    259.                                           
    260.                            )  
    261.                          ))
    262.                   
    263. defun( get_main_pinlist ()       

    264.              let( (curcalcu pinid containflag)       
    265.          pinneedres = list()       
    266.      foreach(curcalcu allpinslist
    267.                         curcalcu = car(allpinslist)
    268.                         allpinslist = remove(curcalcu allpinslist)
    269.                           foreach(pinid curcalcu
    270.                                          containflag = 0
    271.                                           foreach(one result
    272.                                                   if(pinid->component->name == one
    273.                                                              containflag++
    274.                                                             )
    275.                                                           )
    276.                                              if(containflag == 0
    277.                                                 curcalcu = remove(pinid curcalcu)        )       
    278.                                          )
    279.               if(length(result)>=3
    280.                  then                         
    281.                                  foreach(one curcalcu
    282.                                          if(one->component->name == maindev
    283.                                                     
    284.                                                         curcalcu = cons(one remove(one curcalcu))
    285.                                                         )
    286.                                                  )
    287.                               pinneedres = append1(pinneedres curcalcu)
    288.                               else       
    289.                           
    290.                               pinneedres = append1(pinneedres curcalcu)
    291.                           )
    292.                           )
    293.           ))

    294.           
    295.           
    296. defun( Creat_Match_Group ()
    297.       let( (lastpinlist onepinlist lastpins onespin onelist curpinpair ref one onepin)
    298.           lastpinlist = list()
    299.           foreach(onepinlist pinneedres
    300.                       lastpins = list()
    301.                       foreach(one onepinlist
    302.                               onespin = strcat(strcat(one->component->name ".") one->number)
    303.                                                   lastpins = append1(lastpins onespin)
    304.                                      )
    305.                            lastpinlist = cons(lastpins lastpinlist)
    306.                           )
    307.           if(length(result) == 2
    308.              then
    309.                  axlMatchGroupDelete(curMGname)
    310.                  axlMatchGroupCreate(curMGname)
    311.                  
    312.                  foreach(onelist lastpinlist
    313.                          curpinpair = axlPinPair(car(onelist) cadr(onelist))
    314.                                  axlMatchGroupAdd(curMGname curpinpair)
    315.                                  axlMatchGroupProp(curMGname curpinpair strcat(curMGname ":G:::0 mil:5mil"))
    316.                                  )
    317.                  else   
    318.                  if(length(result)>=3
    319.                  then
    320.                  groupneedsuf = remove(maindev result)
    321.                  foreach(ref groupneedsuf
    322.                          axlMatchGroupDelete(strcat(strcat(curMGname "_") ref))
    323.                          axlMatchGroupCreate(strcat(strcat(curMGname "_") ref))
    324.                                  )  
    325.                                  
    326.                  foreach(one lastpinlist  
    327.                          pinpre = car(one)  
    328.                                  pinsuflist = cdr(one)
    329.                                  
    330.                                  foreach(onepin pinsuflist
    331.                                                  curpinpair = axlPinPair(pinpre onepin)
    332.                                                  ; car(parseString(onepin "."))
    333.                                                  lastname = strcat(strcat(curMGname "_") car(parseString(onepin ".")))
    334.                                                  axlMatchGroupAdd(lastname curpinpair)
    335.                                                  axlMatchGroupProp(lastname curpinpair strcat(lastname ":G:::0 mil:20mil"))
    336.                                                  
    337.                                                  )
    338.                                  )
    339.                  
    340.                  
    341.                    )
    342.                  )

    343.           ))
    344.        
    345.        




    复制代码


    点评

    你好,加载后报错怎么回事啊 *Error* eval:unbound variable - displayform  详情 回复 发表于 2023-6-1 08:33
  • TA的每日心情

    2024-12-30 15:17
  • 签到天数: 150 天

    [LV.7]常住居民III

    113#
    发表于 2023-1-16 13:44 | 只看该作者
    咨询个问题,我设置了BUS了,可以用这个skill, 但是设置了class就不能用。版本17.4的

    该用户从未签到

    115#
    发表于 2023-4-27 13:41 | 只看该作者
    谢谢分享!

    “来自电巢APP”

    该用户从未签到

    116#
    发表于 2023-6-1 08:33 | 只看该作者
    digitzing 发表于 2022-10-19 17:33
    我帮你修改了,改成英文,并支持allegro 17以上,没有BUS也不会一条细线无法退出

    你好,加载后报错怎么回事啊
    *Error* eval:unbound variable - displayform
  • TA的每日心情
    开心
    2025-5-29 15:05
  • 签到天数: 379 天

    [LV.9]以坛为家II

    117#
    发表于 2023-6-7 17:10 | 只看该作者
    谢谢楼主分享,赞赏楼主的精神!
  • TA的每日心情
    奋斗
    2024-3-18 15:56
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    118#
    发表于 2023-8-11 15:16 | 只看该作者
    误差可以选择自己填不,不要做成死的,20mil

    该用户从未签到

    119#
    发表于 2024-2-4 17:53 | 只看该作者
  • TA的每日心情
    奋斗
    2025-4-23 15:54
  • 签到天数: 170 天

    [LV.7]常住居民III

    120#
    发表于 2024-2-5 15:02 | 只看该作者
    学习学习,谢谢分享
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-2 10:02 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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