本次教程主要讲array和bus的用法。
英文原文在这里。
原理图
仍然直接从inverter这个项目复制过来
新建一个cellview
放置我们之前设计的反相器,注意这里有几种方法来放置一个阵列:
- 直接放置的时候在属性中写30列
- 放置后复制为一个阵列,注意要选中inverter以及vdd和gnd,复制的快捷键是c
然后将首尾连接,同时添加label
- 使用总线bus,首先编辑inverter的属性(q),修改如下属性,代表这个对象是一个阵列。
然后画bus(快捷键是shift+w,菜单目录为create --> wire(Wide)),按照下图添加label,代表:
I0<1>的输入是osc_out,输出是out<1>
I0<2>的输入是out<1>,输出是out<2>
……
I<31>的输入是out<30>,输出是osc_out
原理图仿真
启动ADE,添加model library,设置瞬态仿真,输出为osc_out
其中因为在现实生活中的电路会有噪声,初始状态等,所以我们要设置仿真的初始状态,不然震荡器不会起振。菜单目录在Simulation --> Convergence Aids --> Initial Condition
。在原理图中勾选osc_out这个label,然后node voltage为0。
netlist and run
电路已经起振!
版图
首先新建一个layout
放置我们之前设计的inverter的layout view
并排两个放置
用metal1讲ntap,ptap还有前一个inverter的输出与后一个的输入连起来
将第二个inverter删除后,复制第一个为阵列
在I0和I31旁放置M1_M2
然后用metal2将首尾相连
放置vdd!
, gnd!
, osc_out
这几个pin,注意前两者是inputoutput,后者是output
DRC LVS
这时候会发现LVS不成功
这是因为我们在layout中使用了ocs_out
这个pin,但原理图中没有添加这个pin,进入原理图更改
check and save,发现仍然有错误
发现在bus与pin之间必须添加label
再次check and save, extract, LVS
ring oscillator项目完成!