本次教程主要讲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项目完成!