摘 要: 研究了Perl在ESD保护电路中的应用。基于Perl语言的强大功能,在海量的数字电路仿真数据中准确地抓取需要的数据,并生成文件报表。同时为数字仿真电路的验证提供了一种全新、快速、准确的方式。
关键词: Perl; ESD电路; 电路验证
在一款电子产品投入生产前,数字后端设计工程师会对数字仿真电路进行验证,对整个版图的线宽、间距、短路等情况进行检查,从而确保生产的产品都能够正常工作。这些仿真电路验证工作经常需要面对海量的电路数据进行筛选,识别出设计参数不合格的电路并进行改善[1]。
数字仿真电路的设计离不开仿真验证,仿真验证过程是一个不断重复的过程,它贯穿了整个仿真电路的设计。据统计,设计验证会占用设计人员 70%以上的精力,而且对于大型的电路,验证会更为繁琐,例如门级规模上亿的电路。
1 数字仿真电路验证方法分析
作为可编程逻辑器件,FPGA(Field Programmable Gate Array)相比于ASIC(Application Specific Integrated Circuit)可以重复擦写程序,通常用它来对现有的设计进行仿真验证。在数字 ASIC 的设计中,由于测试向量的不完备,设计中很有可能存在相应的Bug。因为每次 ASIC 的投片会花费较大代价,为规避风险,通常会对设计进行 FPGA验证,FPGA 验证无误后才进行投片、量产[2]。
目前FPGA数字后端验证的方法主要是基于人工的选择,通过Linux下的条件查找功能,逐个实现对电路参数的验证功能。要验证的电路数目和需要验证的电路参数个数都是海量的,而且需要验证的参数类型也是随时变化的,因此这种人工验证的方法,不仅效率低下,而且验证准确度难以确保。
本文将介绍一种新的利用Perl(Practical Extraction and Reporting Language)进行数字仿真电路验证的方式。
2 Perl介绍及其在ESD保护电路中的应用
2.1 Perl简介
Perl是解释型的脚本语言,它具有出色的处理文本能力,是Windows和Linux跨平台的编程语言,具备自主内存管理功能,没有内存泄漏问题,且具有强大便捷的模块化功能[3]。
Perl的解释程序是开放源码的免费软件,使用Perl不必担心费用;Perl能在绝大多数操作系统下运行,可以方便地向不同操作系统迁移;它可以作为用在不同系统环境编程的高级语言,为电路验证提供了一种新的解决方式;其高效、准确的特点给设计人员带来了很大的便利[4]。
2.2 ESD保护电路
静电放电ESD(Electrostatic Discharge)会给电子器件环境带来破坏性的后果,是造成集成电路失效的主要原因之一。
在正常工作情况下,NMOS横向晶体管不会导通。当ESD发生时,漏极和衬底的耗尽区将发生雪崩,并伴随之产生电子空穴对。一部分产生的空穴被源极吸收,其余的流过衬底。由于衬底电阻Rsub的存在,使衬底电压提高。当衬底与源之间的PN结正偏时,电子就从源发射进入衬底。这些电子在源漏之间电场的作用下被加速,产生电子、空穴的碰撞电离,从而形成更多的电子空穴对,使流过n-p-n晶体管的电流不断增加,最终使NMOS晶体管发生二次击穿,此时的击穿不再可逆,则NMOS管损坏[5]。
为了进一步降低输出驱动上NMOS在ESD时两端的电压,可在ESD 保护器件与GGNMOS之间加一个电阻。这个电阻不能影响工作信号,因此不能太大。画版图时通常采用多晶硅(poly)电阻R1和R2。如图1所示。
2.3 Perl在ESD保护电路验证中的应用
Perl在ESD保护电路验证中可以实现抓取所需要的数据信息并生成文件报表。图2所示为一款芯片的ESD保护电路报表中的一个小模块仿真电路,其整个报告有上千个格式相同而R1、R2数字不同的电路小模块。由图1所示的电路说明,要实现对芯片的ESD保护,需要限定:R1或者R2不能大于某一个限定值Rm。因此需要在这个文件报表中实现不满足此条件(即:R1或R2电阻值有一个大于3.5 Ω)的所有电路Location、Power和Ground的信息抓取。如果不用脚本程序,只能对电路模块的R1和R2数值信息一个一个分析比较,这样不仅准确率低,容易出错,而且耗费大量后端工程师的精力。但是现在可以通过一个Perl程序实现对此类文件报告进行条件抓取。这种方式不仅运行速度快,不会出错,而且大大减少了后端验证工程师的数据分析工作量。
运行这个Perl脚本后,只需要输入电源电阻所需要满足的条件,不同系列的芯片对R1和R2要求不一样。譬如,对于某一系列芯片需要查找出R1或者R2大于3.5 ?赘的所有电路location、power、ground信息(注:对于此系列芯片R1或者R2大于3.5 ?赘时的ESD保护电路都是不能通过检查的,需要重新设计参数)。Perl可以在Windows、Unix等多种平台下运行,以在Windows系统下运行为例[7],如图3所示。
最后的运行Perl脚本输出为一个result文件名的文件报表,结果如图4所示。
数字仿真电路验证是其数字后端设计中极其重要的一部分,是保证每款芯片品质的重要部分。Perl语言可以很好地实现所有不满足ESD保护电路设计的电路参数抓取,方便数字仿真电路设计后端查错。由此表明可以根据不同电路的实际仿真报告,用Perl编程实现不同数字仿真电路验证的后端查错,大大减少了验证者的工作量。可以预见,以后的硬件电路设计中会越来越多地见到Perl的身影[8]。
参考文献
[1] 余晓文,强英.Perl语言在电路设计中的应用[J]. 微型机与应用,2004, 23(1):24-25.
[2] 许川佩,唐海,胡聪.基于FPGA的NoC硬件系统设计[J]. 电子技术应用,2012,38(2):117-119.
[3] (美)施瓦茨. Perl语言入门(第6版)[M].盛春,译.南京:东南大学出版社,2012.
[4] (美)艾德尔曼.使用Perl实现系统管理自动化(第2版)[M].盛春,译.南京:东南大学出版社,2011.
[5] 孙可平,刘勇.我国电子行业ESD防治技术现状及对策[J].上海海运学院学报,1999(1):76-81.
[6] DEITEL H M. Perl编程金典[M]. 李晋宏,杨小平,译.北京:清华大学出版社,2002.
[7] 华胜华,刘伟平. PERL在IC设计中的应用[J].中国集成电路,2004(5):36-41.
[8] WALL L, CHRISTIANSEN T, ORWANT J. Programming Perl[M]. Third Edition, O′Reilly Media, 2000.