|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
有些新手一直不太明白,有什么好的办法,精准识别Net名称。
以下是我经过验证的版本 。
后面加上创建函数,即可进行查分对创建 。
dp.zip
(2 KB, 下载次数: 9)
(procedure zs_diffPiar_Create()
(prog (net_no_diffpair net_contan_Diff_p net_contan_Diff_n pnetNameList CharIndex i nNetNameList NnameName nNetID)
net_no_diffpair = setof(net axlDBGetDesign()->nets net->diffpair);这条代码执行完,前面的变量 net_no_diffpair存储的,就都是没有差分的Net。
net_contan_Diff_p = setof(net net_no_diffpair rexMatchp("" net->name)) ; 这条执行完,变量net_contan_Diff_p 存储的都是P的Net
net_contan_Diff_n = setof(net net_no_diffpair rexMatchp("N" net->name)) ; 这条执行完,变量net_contan_Diff_p 存储的都是N的Net
; 提前筛选出包含差分关键字的Net,这样后续进行循环的时候,计算量小很多。
;
(foreach pnet net_contan_Diff_p
pnetNameList = parseString(pnet->name "");把Pname拆分掉,形成一个 list序列
i = 1;定义一个变量用于控制循环
CharIndex = list();申请一个新的list,用于记录 P所在的位置
(while (i <= length(pnetNameList)) ;控制循环次数,意在循环到每一个字符
(when nthelem(i pnetNameList) == "" ;假设某一个字符刚好是P
CharIndex = cons(i CharIndex) ;把当前的数字记录起来.,这样就达到了记录P所在位置的效果了
);end when
i++ ;变量递增
);end while
j = 1
(while j <= length(CharIndex);从序号列表进行一次循环
indexN = nthelem(j CharIndex)
i = 1
nNetNameList = list();用于存放把NetName从P替换成N后的字符
(while i<= length(pnetNameList)
(if i != indexN then;当,循环变量不等于之前记录的值得时候,
nNetNameList = cons(nthelem(i pnetNameList) nNetNameList);就直接把原来的名字字符写进去
else;当循环变量和记录的P的位置的数字对应上了的时候
nNetNameList = cons("N" nNetNameList);写N进去,实现替换
);end if
i++
)
NnameName = buildString(nNetNameList "");将名称序列重组成Net名称
nNetID = setof(net net_contan_Diff_n net->name == NnameName);从之前筛选过的包含N的名称中,再次筛选出精确名称
(when nNetID ;假设筛选有结果,那么这时你就可以创建差分了 ..如果没有,那么自动进行下一次循环,也就是另一个位置的P的替换..如果都没有,说明不是差分.并不会处理
axlMsgPut("DiffNet_N : %A\nDiffNet_N : %A" pnet->name NnameName)
j = length(CharIndex)+1;跳出循环
);end when
j++
);end foreach
);end foreach
)
);end procedure |
|