|
应用场景:
1.之前已经布局过的电路单元,再次画板时希望复用;
2.同一电路模块有非常多的通道,布局相同,不需要每个通道重复布局;
使用方法:
选中已经布局好的器件,运行script,输入偏移坐标,输入替换的器件标号,得到新的PIK文件,
选择用PIK文件place,未布局的器件现在已经布局完毕了。由于AD的布线文件可以直接复制,
故布局相同情况下,再利用本文脚本可以快速高效进行layout。
参考:
1.AD的DelphiScript例程;
2.LC的PnPcustom脚本.
另外贴个前期用python实现的类似功能的代码:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# add author here
__author__ = 'spcm'
import os
import sys
import re
if __name__ == "__main__":
file_name = input("输入坐标文件:> ")[:-4]
file_pick_old = open(file_name + '.txt',mode='r')
content = file_pick_old.readlines()
print(type(content))
component_num = len(content) - 3
print("器件数量:%d"%component_num)
file_pick_new = open(file_name + '.PIK',mode='w')
file_pick_new.writelines(content[0])
file_pick_new.writelines(content[1])
offset_x = float(input("输入偏移坐标X="))
offset_y = float(input("输入偏移坐标Y="))
designator_old = input("输入需要替换的器件序号=").upper()
designator_new = input("输入替换之后的器件序号=").upper()
while designator_old != 'Q' and designator_new != 'Q':
for index in range(2,component_num):
info_old = re.split(" +", content[index])
designator = info_old[0]
if designator == designator_old :
print("器件序号替换:%s->%s"%(designator_old,designator_new))
mid_x_str_old = re.findall(r'-?\d+\.?\d*e?-?\d*?', info_old[2])
mid_x = float(mid_x_str_old[0])+offset_x
mid_x_str_new = str(mid_x)
print("器件坐标更新X:%s->%s"%(mid_x_str_old[0],mid_x_str_new))
mid_y_str_old = re.findall(r'-?\d+\.?\d*e?-?\d*?', info_old[3])
mid_y = float(mid_y_str_old[0])+offset_y
mid_y_str_new = str(mid_y)
print("器件坐标更新Y:%s->%s"%(mid_y_str_old[0],mid_y_str_new))
info_new = content[index]
print("before replace:\n"+info_new)
info_new = info_new.replace(designator_old,designator_new,1)
info_new = info_new.replace(mid_x_str_old[0],mid_x_str_new,1)
info_new = info_new.replace(mid_y_str_old[0],mid_y_str_new,1)
print("after replace:\n"+info_new)
file_pick_new.writelines(info_new)
designator_old = input("输入需要替换的器件序号=").upper()
designator_new = input("输入替换之后的器件序号=").upper()
#write a \n at last line
file_pick_new.writelines(content[len(content)-1])
file_pick_old.close()
file_pick_new.close()
if input("All component changed! Continue?\n>") != 'y':
quit()
后记:从06年开始画板写程序,从阿莫电子邮购部买器件,一转眼过去好多年了。现在除非项目需要,基本不想再画板子了,即便画也是想快速准确完成,
所以比较关注这些eda软件的二次扩展功能,用cadence时候skill插件非常高效,最近才发现AD也可以用delphi脚本。这个贴子算是个例子吧。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|