- 版图的构成主要分为四部分。对于一般的电路来说,重点关注前三部分
- 第一部分是电路中所对应的mos管电容电阻这些基本器件,一般都是由工艺产商提供标准的元件版图,这部分是我们不需要太关心的。
- 第二部分是对器件进行连线
- 第三部分是衬底的连接,这些器件都是在一个衬底或者阱上的。对于CMOS工艺中,一般是采用P型作为衬底的。
- 第四部分,由于这个版图需要与外界进行接触,为了保护这些芯片不受外界环境的影响,比如被击穿了,我们需要加上相应的ESD,pad IO相应的组成部分去构成。
1. 器件位置初步摆放
- 首先,在原理图中打开Layout XL
- 在弹出的版图窗口中,先按e键,把网格点改成跟工艺库所要求的大小,设置为0.005um
- 从原理图中自动生成版图
- 取消pr boundary
- 然后在IO Pin中,选中所有的网络,然后将其pin引脚层设置为Metal 1 pin层,然后点击右侧的APPLY应用,这时候所有的pin脚都被修改为metal 1pin了。
- 然后pin 的label,全部设置为保持和pin名字一致
- 然后就把原理图的所有器件都进行导入了。
- 导入完成以后,我们需要对导入版图的子模块进行布局,主要根据原理图大致连线的走线。
- 这里点击单独选中器件,这五个管子是从下 往上的流向
- 我们在版图界面中,按住M键,按照其流向进行粗略的放置
- 这样就完成了粗略的布局了
2. 添加Dummy管
- 还需要在管子的周围加上dummy管,已达到更好的匹配性
- 创建dummy管常用的方式是在原理图中,新建一个mos管,四端同时接地
- 每个nmos管子左右两端都要加上dummy管子
- 将dummy的数量(multiplier)设置为4
- 其沟道长度可以设置为与源器件保持一致,但这样会占用很大的芯片面积。
- 第二种是将其沟道长度设置为1um这些比较短的,足够实现其功能的即可
- 对于这两个输入nmos晶体管,由于其相对于底下的nmos横向长度要少很多,因此其dummy管的沟道长度可以设置为跟其一样长。这样整体设计出来的版图就是长方形
-
接下来是上面四个晶体管,由于其横向长度较长,因此其dummy不能设置成与其原来一样的。
-
这里将其沟道长度设置为1um
-
由于这些管子是P管,所以对应的dummy管子也是p管,需要连接到VDD
-
为了容易区分,将这些Dummy管的名称都改为NM1_Dummy
-
在原理图中添加完Dummy管后,需要将其加入到版图layout中
-
选中这几个Dummy管,然后切换到layout窗口
-
这时候不能再点击All from source,因为其是将原理图中所有元件都导入进来,包括原有的连接关系,都会重新进行生成
-
现在只需要将这几个选择的dummy管添加进来即可
-
然后就发现这几个dummy管就会被添加进来
-
然后将这些dummy管放置在两端
-
现在摆放是比较随意的,为了更好的匹配性,希望这些摆放更加均匀。
-
我们可以使用对齐或者组合功能实现整理。
-
这里需要调出对齐的按钮,右键灰色菜单栏,选择Align
-
第一个勾是对齐方向的横向间距,第二个勾是对齐方向的纵向间距
-
但是这个间距是指有源区的距离
3. 器件的金属连接
-
在完成器件的摆放后,就需要去做器件之间的金属连接了。
-
连接顺序可以是从下到上,也可以是从下到上,看个人的需求。或者可以从核心模块,比如输入对管进行连接,然后再去完成其他模块的连接。
-
这里我们主要采用从下到上的连接顺序。
-
首先我们要把mos管的栅极,通过栅极到金属的通孔引出来。因为如果直接通过poly去进行连接mos管的栅极话,由于poly的自身的阻抗会比较高,可能会对电路的性能造成一定的影响。
-
由于前面将mos管进行组合了,所以这里为了方便,我们可以点击暂时隐藏组合,这样就可以选中单击内部的晶体管了,而且还是保留原有组合逻辑的。
-
然后按住键盘o键,通过poly到M1的通孔引到金属1层。
-
然后将通孔和mos管进行对齐
-
然后对这个mos进行衬底的包围,并添加guardring
-
guardring有不同的类型
-
一种方式是当所有子模块版图连接完成后,再最外层添加Guardring
-
另一种是对每个同类型的器件,都在其周围加一个小的guardring,一方面是可以防止噪声,珊锁效应,另一方面可以作为衬底连接GND或者VSS上
-
这里我们选中整个nmos管子及其dummy管,再按住键盘g键,加入guardring,由于这里是n管,是接在p-sub上,所以这里选择p-guardring,间距0.3,长方形
-
然后进行管子的电气连接,可以看到M101管子漏极向上与两个输入管的源极进行连接的
-
因此我们需要在版图中找到mos管的漏极
-
由于这里采用的是每个晶体管外加一层Guardring,所以我们需要使用到高层金属进行连接。
-
对高层金属的走线,我们会定义好,偶数层金属为横着走线,奇数层金属为竖着走线。这样连线的好处是后期走线是不会打架的,防止有短路的风险
-
由于我们已经定义好了奇数层走竖,所以创建一个M1-M3的通孔,然后对其这个nmos管的漏极
-
然后用M3金属走线引出来,并将其宽度改成与通孔大小一致,按住F3键修改走线属性
-
而对于其源极,连接到衬底上就好了
-
然后对输入管子进行连接
布局的小优化 -
这里进行一个小小的优化布局,如果对于这种电阻型的mos管,每边都是两个管子并联的,那么对应于版图上,其如果按照原理图上摆放位置就是AABB形式摆放
-
但是这样摆放的匹配性会不太好,因为对于左边两个A管,其重心/质心是比较偏左的,而右边的两个B管中心是偏右的,
-
这时候我们可以调整摆放的顺序,将其变为ABAB摆放顺序形式
-
或者可以采用交叉耦合的形式,但是这样的话走线可能会相对比较麻烦一些
-
这样无论怎么看,质心都是在中心点的
-
具体说明的文章如下
为改善电路性能在版图设计中应该考量到的内容
-
对于输入端的两个管子,栅极接到信号的两个输入端。
-
这里我们按住o键,创建通孔
-
然后将通孔对其
-
然后对同一行相同晶体管尺寸都同时加上通孔,由于他们尺寸对称位置相同,我们可以进行阵列复制,测量出他们相隔的mos距离为4.96um,所以
-
由于这里需要进行横着连线,所以需要打一个M1-M2的通孔,并与mos管进行对齐,在M2层进行金属连线
-
然后进行阵列复制
-
将连线的线宽改为0.38,与通孔大小保持一致
-
将引线分别引到左右两端
-
然后在外围加入P-Guarding
-
然后将下面晶体管的漏极引线与中间层的晶体管端口进行连接
-
由于这里是竖着走线的,因此采用M3金属层,走线宽度为0.5
-
然后再中间层的mos管添加通孔和引线连接到这个网络中
-
这里创建的stack,将M1-M3通孔拆分为了两部分,为M1-M2和M2-M3,因此我们需要将这两部分先进行组合,
-
然后通过M3金属层走线往下连,与网络走线相连
-
然后加入M2-M3通孔进行连接
-
将通孔复制到管子另一端
-
由于这一行的管子尺寸大小都类似,所以直接复制过去
-
在连接处都加入通孔,这样输入管的源极就和漏极连接在一起了
-
然后将底下的nmos的栅端引出来,创建M1-M2通孔,注意要与mos管居中对齐
-
然后连线引出,1.38um
-
然后我们回到原理图,把和pin脚相连相关的都打开
-
然后在版图中,把pin脚拉过来
-
这些pin脚不显示名称是因为还需要create pin
-
然后Apply之后就能显示出来了
-
然后修改pin名字所在的层,由于这里的引线都是M2层,所以选择M2 pin层
-
然后连接输入级晶体管的漏极网络端口
-
先造两条连接主路径M2层
-
然后晶体管漏端通过M3层走线往上走
-
在连接处加入过孔
-
同理复制到另一端
-
对于上面是P管,同样建立通孔
-
由于它们是P管,所以它们是建立在N-well里面的,guardring要选择N型
-
然后再画上面n管
-
由于是n管,所以用p型guarding,并把栅极引出去
-
对于源极和漏极,通孔最少使用两个,这样即使一个没连上,另一个也能连上
-
对于电容连接,在原理图中上极板是跟电源相连的
-
在版图中,电容上极板对应M6层,由于其面积比较大,将其线宽设置为6um
-
然后再设置M3-M6的通孔
-
加入pin名字
-
接下来就是dummy管和衬底的连接,由于它们都是VDD和GND,连接比较方便
-
设置M1-POLY的通孔
-
这里可以进行加粗连接到下面
走线宽度的考量
- 对于不同总线的宽度(有些是0.5,有些是0.38),主要基于两方面的考量
- 一方面是这个连线可以走多远,如果走线越长,则阻抗越大,相对应与宽度也要选择越大来去减小阻抗。
- 另一方面是走线会经过多大的电流,一般电流越大,走线的宽度也需要越大,避免IR的电压压降的存在。
- 现在每个管子的衬底都连接好了,接下来是相同衬底之间的连接
- 由于这里引出线都是VB
- 打个M2-M3的通孔2*2
- 走0.5um的线
- 然后将OS guarding层全部进行连接,直接走M1的线上去,可以直接与VB的走线重合。
- 因为VBN到VSS之间寄生电容反而是有利于PSR的
- 然后电容下极板是要接VSS地的
- 然后再来M1-M5的通孔
- 现在应该已经连完了,开启未完成连线查看有没有高亮的飞线存在
- 可以看到是没有未完成飞线的
- 接下来就是开始进行DRC验证了
- 点击这里添加DRC验证文件
- 第二个文件是放置DRC验证的生成文件位置
- 然后点击Run DRC
- 然后会弹出错误窗口
- 如果只想查看错误的话,点击Filter,选择只展示未解决的错误
- 第一个错误显示NWS.1
不同n-well间距小于1.4
- 对于错误的名称,我们可以进行复制,然后在design rule文件里面查看具体错误的细节
- 这个错误表示两个扩散区的间距太窄了,P到P区最小要到0.28
-
可以发现这个Psub确实小于1.4
-
然后我们仔细观察一下,因为这个地方是P管,都是接在一个衬底上的,所以我们可以使用很大的n-well把所有的p-sub给包围起来,去解决这个错误
-
剩余一些金属面积错误,可以不用去管
-
然后进行LVS检查
-
LVS验证要勾选上网表查看
-
然后输入电源和地的网络名称,帮助识别
-
然后就可以Run LVS了
-
出现下面的标志标识LVS通过了