Python用于网表处理
文章插图
来源:IC技能搬运工 作者:小目
在电路设计中有时会遇到需要处理电路网表的情况 , 使用脚本可以很好地完成这一过程 。 有了前面的「正则表达式基础」和「python re模块」的内容学习 , 编写python脚本完成这一过程应该很简单 。
编写脚本前的准备
下面是一个带隙基准电路的网表 , 假设由于设计需要现在要求按照以下内容对网表做出相应修改:
- 将器件尺寸(W和L)缩小为原来的0.9倍;
- 将NMOS模型由n33改为nch3, PMOS模型由p33改为pch3;
- 将电路中电阻的模型由rhrpo_3t_ckt改为rppo1rpo;
- 将电容模型由mim3_ckt改为mimcap;
1************************************************************************
2* auCdl Netlist:
3*
4* Library Name: ref_circuits
5* Top Cell Name: bgr
6* View Name: schematic
7* Netlisted on: May 20 22:40:47 2020
8************************************************************************
9
10*.BIPOLAR
11*.RESI = 2000
12*.RESVAL
13*.CAPVAL
14*.DIOPERI
15*.DIOAREA
16*.EQUATION
17*.SCALE METER
18*.MEGA
19.PARAM
20
21
22
23************************************************************************
24* Library Name: ref_circuits
25* Cell Name: bgr
26* View Name: schematic
27************************************************************************
28
29.SUBCKT bgr GNDA PD SUB VBG VDDA
30*.PININFO PD:I VBG:O GNDA:B SUB:B VDDA:B
31XMM1 net30 PDN net56 SUB n33 W=4u L=350n m=1
32XMM5 net29 net29 net28 SUB n33 W=4u L=1u m=1
33XMM11 net30 net29 net50 SUB n33 W=4u L=1u m=1
34XMM12 net36 net29 net49 SUB n33 W=4u L=1u m=1
35XMM19 VBG PDP GNDA SUB n33 W=4u L=350n m=1
36XMM16 net56 net19 GNDA SUB n33 W=4u L=350n m=1
37XMM3 net19 VBG GNDA SUB n33 W=2u L=350n m=1
38XMM6 net28 net28 GNDA SUB n33 W=4u L=1u m=1
39XMM22 PDN PD GNDA SUB n33 W=4u L=350n m=1
40XMM25 net50 net28 GNDA SUB n33 W=4u L=1u m=2
41XMM13 net49 net28 GNDA SUB n33 W=4u L=1u m=2
42XMM17 PDP PDN GNDA SUB n33 W=4u L=350n m=1
43QQ1 SUB SUB INP pnp33a4 M=1 AREA=4e-12
44QQ0 SUB SUB net55 pnp33a4 M=8 AREA=4e-12
45XR6 net54 VBG SUB rhrpo_3t_ckt M=1 W=2u L=14u
46XR3 net54 VBG SUB rhrpo_3t_ckt M=1 W=2u L=7u
47XR2 net51 net52 SUB rhrpo_3t_ckt M=1 W=2u L=7u
48XR5 net51 net52 SUB rhrpo_3t_ckt M=1 W=2u L=14u
49XR4 INP net51 SUB rhrpo_3t_ckt M=1 W=2u L=168u
50XR1 INN net54 SUB rhrpo_3t_ckt M=1 W=2u L=168u
51XR0 net55 INN SUB rhrpo_3t_ckt M=1 W=2u L=21u
52XMM18 net30 PDN VDDA VDDA p33 W=4u L=300n m=1
53XMM7 net22 net22 VDDA VDDA p33 W=2u L=1u m=1
54XMM14 net32 net30 VDDA VDDA p33 W=4u L=1u m=2
55XMM15 net29 net30 VDDA VDDA p33 W=4u L=1u m=1
56XMM23 net52 net30 VDDA VDDA p33 W=4u L=1u m=4
57XMM24 VBG net30 VDDA VDDA p33 W=4u L=1u m=4
58XMM20 net36 net36 VDDA VDDA p33 W=8u L=2u m=2
59XMM21 net30 net36 VDDA VDDA p33 W=8u L=2u m=2
60XMM4 net21 net21 net22 VDDA p33 W=2u L=1u m=1
61XMM8 net49 INN net32 net32 p33 W=12u L=1u m=2
62XMM9 net50 INP net32 net32 p33 W=12u L=1u m=2
63XMM0 net20 net20 net21 VDDA p33 W=2u L=1u m=1
64XMM2 net19 VBG net20 VDDA p33 W=2u L=1u m=1
65XMM26 PDN PD VDDA VDDA p33 W=4u L=300n m=1
66XMM10 PDP PDN VDDA VDDA p33 W=4u L=300n m=1
67XC0 net30 VBG mim3_ckt L=20u W=20u MR=1
68.ENDS
上下、左右滑动可以查看更多内容哦!
写脚本前首先对需要处理的内容有一定了解 , 从中找到规律 , 力求用最简单、快捷的方式实现功能 。
通过观察可以发现上面脚本的规律(实际上所有电路网表都很有规律 , 所以使用脚本处理电路网表很方便) 。
器件尺寸修改只需要在对应的参数后面乘一个系数;器件模型修改需要通过脚本查找到相应模型 , 然后做替换即可 。
python脚本处理电路网表
按照上面要求 , 可以编写以下python脚本处理网表 。 首先备份待处理的文件 , 防止出错时丢失源文件 , 之后文件信息从备份文件中读取 , 按行处理脚本 , 并写入目标文件 。
1importre
2importos
3
4# backup file first
5os.system('copy bgr.cdl bgr.cdl.bk') # for Windows
6# os.system('copy bgr.cdl bgr.cdl.bk') # for Linux
7
8withopen('bgr.cdl.bk', 'r')asread_file, open('bgr.cdl', 'w')aswrite_file:
9 forlineinread_file:
10 if"n33"inline:
11 r_line = re.sub(r'\bn33\b', 'nch3', line) # replace nmos model
- 优化|微软亚洲研究院发布开源平台“群策 MARO” 用于多智能体资源调度优化
- 输送|新时达:“用于机器人码垛的输送系统”获发明专利
- 用于|用于半监督学习的图随机神经网络
- 核磁共振|研发用于教研的核磁共振量子计算机,「量旋科技」还想在超导量子技术上取得突破
- 地面|莱茵金属公司推出,用于武装侦察的新型地面机器人
- 告诉|阿里大佬告诉你如何一分钟利用Python在家告别会员看电影
- Python源码阅读-基础1
- Python调用时使用*和**
- 如何基于Python实现自动化控制鼠标和键盘操作
- 解决多版本的python冲突问题