standard cell library中的那些功能单元
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了standard cell library中的那些功能单元相关的知识,希望对你有一定的参考价值。
参考技术A Tie cell如果多晶硅栅极直接连接到 VDD 或 VSS 以获得恒定的高/低电平信号,那么如果电源出现任何浪涌/毛刺的情况下,会导致敏感的栅极氧化物损坏。为避免上述损坏,应避免将 VDD 或 VSS 直接连接到任何逻辑门的输入。TIE cell用于将任何逻辑的输入连接到 VDD 或 VSS。
TIE cell没有输入引脚,只有一个输出引脚。tie-high cell的输出始终为高电平,tie-low cell的输出始终为低电平。tie high cell和tie-low cell的示意图如图1所示。
图1 TIE cell
tie-high 和tie-low cell的工作原理相似。这从图 1 的 tie-high 单元可以看出,nMOS 的漏极和栅极短接。所以 Vg = Vd ;推导 Vgs = Vds;因此,Vds > Vgs -Vt;这表明 nMOS 将始终处于饱和区。漏极和栅极短路的 MOS 配置通常称为二极管连接晶体管。当 nMOS 在这里表现得像一个二极管时,pMOS 的栅极总是处于低电平,因此 pMOS 总是处于导通状态。当 pMOS 处于导通状态时,其输出漏极将始终为高电平。更重要的一点是,VDD中的突然尖峰不会传播到TIEcell的输出。
图2 MOS管饱和区示意图
Well tap
以反相器为例,说说预防闩锁。
为什么MOS管的源极有两个有源区(NMOS的源极多了一个P+,PMOS的源极多了一个N+)?应该是为了让衬底电压钳位到0或者钳位到1,防止产生闩锁效应。反相器寄生双极晶体管结构如图3所示。
图3寄生双极晶体管结构
为什么MOS管源区的源极两个有源区(重掺杂区)是不同类型的,例如NMOS的源极左侧的有源区是P+,而不是N+?他本身是防止闩锁的,如果都用N+,那么就会额外多形成一个寄生双极晶体管结构,没起到作用,反而会帮倒忙。
但是如果每个mos管都做一个钳位电极,那么standard cell的面积将会显著增大,不利于design的PPA;那么此时一种叫做”batch mode”(中文意思是“批处理”)的思想发挥作用了。能不能不要每个standard cell都做钳位电极,而是把钳位电极单独做成一个standard cell,然后让每隔一定距离的区间(常用的是50um)的standard cell共用一个钳位电极,这就是所谓的batch mode 思想。那么此时well tap应运而生。
Well tap用于防止 CMOS 设计中的闩锁问题。Well tap将 nwell 连接到 VDD,将 p well连接到 VSS,以防止闩锁问题。在well tap cell没有逻辑功能,因此well tap也是一种phyisical only cell。其基本结构如图4所示。
图4 Well tap的基本结构
End cap/Boundary cell
在芯片制造过程中,放置在边界处的标准单元的栅极很有可能被损坏。为了防止边界处的这种损坏,在standard cell库中有一种特殊的单元,称为end cap或者boundary cell。boundary cell保护边界处的栅极损坏,而且还有许多其他用途。
boundary cell放置在每个row的两端以终止该行。还被放置在block的顶部和底部行。一些standard cell库中也有corner boundary cell放置在block的corner。boundary cell在floorplan中是fix住的。
图5 boundary cell的放置示意图
Boundary cell放置在block中的作用:保护靠近边界的标准单元的栅极在制造过程中免受损坏避开边界处的基层DRC;与其他block正确对齐;一些设计中,boundary cell也用作decap cell。
图6 boundary cell版图示意图
Decap cell
Decap cell即去耦单元,是一种特殊的Filler cell,具体来说就是一种mos管组成的单纯的电容器。当电路中大量单元同时翻转时会导致冲放电瞬间电流增大,使得电路动态供电电压下降或地线电压升高,引起动态电压降,俗称IR-drop。为了避免IR-drop对电路性能的影响,通常在电源和地线之间放置由MOS管构成的电容,这种电容被称为去耦电容或者去耦单元,它的作用是在瞬态电流增大,电压下降时向电路补充电流以保持电源和地线之间的电压稳定,防止电源线的电压降和地线电压的升高。
图7 decap结构图
Filler cell
完成布局和布线后,通常会在floorplan中留下空白,空白处没有任何standard cell存在。Floorplan中不可能让每个standard cell紧密相连,因为这会导致routing congestion问题,而且也不利于timing。假设如果你有 70% 的利用率,你可以预期大约 30% 的区域没有被填充。如果现在进行 DRC 检查,可能会看到spacing rule violation,例如“未满足 NWell 最小间距”。这就是filler cell的用武之地。对于干净的版图,就需要 NWELL 的连续性。Filler cell没有任何逻辑功能,但其能延续像nwell一样的基础层,并像其他的standard cell一样的VDD/VSS引脚(就可以将出pin层的电源网络连接为一个整体)。
图8 filler cell示意图
原文链接:https://blog.eetop.cn/home.php?mod=space&uid=1738191&do=blog&id=6950158
module+standard library.py
#导入模块 import sys sys.path sys.path.append(‘D:\program files\Python34\PyWorks‘) #hello.py文件路径 #不用append PyWorks路径也可以,因为D:\program files\Python34在sys.path中 import hello #第一次导入会执行,路径增加.pyc文件 import hello #第二次不会执行 #执行第二次的方法(假如hello修改后需要再重新导入) import imp imp.reload(hello) ‘‘‘ #从模块导入函数: import somemodule from somemodule import somefunction from sommodule import function1,function2,functoin3 from somemodule import * import somemodule as module from somemodule import somefunction as functoin ‘‘‘ print(‘__name__ =‘,__name__) #__name__ = __main__ print(‘hello.__name__ =‘,hello.__name__) #hello.__name__ = hello hello.hello() #不修改sys.path导入模块的方法 #1,将模块放置在合适的位置 import pprint #如果数据结构过大,不能在一行打印完,可以用pprint pprint.pprint(sys.path) #解释器可以从这些目录中找到所需的模块 #site-packages目录是最佳选择,因为它就是用来做这些事的 #2,告诉解释器去哪里找 #不希望将自己的模块填满Python解释器目录 #没有在Python解释器目录中存储文件的权限 #想将模块放在其他地方 #编辑sys.path,这不是通用的方法。标准方法是在PYTHONPATH环境变量中包含模块所在目录 #包 #当模块存储在文件中时(扩展名为.py),包就是模块所在的目录 #为了让Python将其作为包对待,他必须包含一个名为__init__py的文件(模块) import PyWorks #只有__init__模块可用,hello,if_test不可用 import PyWorks.hello #hello模块可用,但只能通过全名PyWorks.hello 来使用 from PyWorks import if_test #if_test模块可用,可通过短名if_test使用 #dir函数 #查看模块包含的内容,所有函数,类,变量 print(dir(hello)) print([n for n in dir(hello) if not n.startswith(‘_‘)]) #__all__ #在模块内部设置的。from module import * 时可以屏蔽不想要的变量,函数,类 #还是可以通过from module import function 或module.function访问 #在模块内部被设置。 __all__=[‘a‘,‘b‘,‘c‘] #__doc__,help(module) #查看模块帮助 #__file__ #查看模块文件的位置 #标准库 #sys,os,fileinput,set,heap,deque,time,random #fileinput #>>>python some_script.py file1.txt file2.txt file3.txt #依次对fili1到file3文件中所有行进行遍历。 #函数file.input,filename,lineno,filelineno,isfirstline,isstdin,nextfile,close #shelve P188 #在文件中存储数据,当做字典用 import shelve db=shelve.open(r‘F:\test.dat‘,writeback=True) #shelve创建一定的是.dat文件 person={} person[‘name‘]=[‘a‘,‘b‘] person[‘age‘]=[1,2,3] db[‘1‘]=person db[‘2‘]=person print(db[‘1‘][‘name‘]) db[‘1‘][‘name‘].append(‘c‘) #这句不会写入shelve print(db[‘1‘][‘name‘]) tmp=db[‘1‘][‘name‘] tmp.append(‘c‘) print(tmp) db[‘1‘][‘name‘]=tmp print(db[‘1‘][‘name‘]) db.close() #re #参见regular文件夹
以上是关于standard cell library中的那些功能单元的主要内容,如果未能解决你的问题,请参考以下文章
Brief Tour of the Standard Library