基于并行算法的集成电路电阻抽取方法技术

技术编号:33994111 阅读:11 留言:0更新日期:2022-07-02 10:26
本发明专利技术涉及集成电路领域的线程处理方法,具体涉及基于并行算法的集成电路电阻抽取方法,该方法包括以下步骤;步骤一,读取版图信息,根据导体或过孔的坐标以及所属的层,把所有导体存储在对应单元里面;步骤二,首先,建立线程池对每个单元的每个导体层建立一个任务加入线程池;然后,根据用户配置的线程数启动线程,并对每个线程做如下操作:步骤二一,从线程池中取出一个任务;步骤二二,遍历这个任务里面所有导体,在和其他导体或过孔接触的地方创建节点;步骤二三,把创建的节点和节点对应的导体或者过孔返回给主进程;步骤三,所有线程运行至结束,把所有节点保存到导体的里面,并删除重复的节点。并删除重复的节点。并删除重复的节点。

【技术实现步骤摘要】
基于并行算法的集成电路电阻抽取方法


[0001]本专利技术涉及集成电路领域的线程处理方法,具体涉及一种基于并行算法的集成电路电阻抽取方法。

技术介绍

[0002]在集成电路电阻抽取过程中,需要找到电路的连接关系,然后根据电阻率算出电阻。随着电路规模的扩大,这一部分会比较费时,所以大规模电路要用多进程或者多线程。现有的工具的做法有几种:第一种做法是把电路切分成几个单元,每个单元用一个进程或线程。这个方法需要把跨过单元边界的导体切开,最后在把边界地方连接起来。这个方法在某些情况下很难处理。比如图2的情况。导体2会被切成4份,最后把电阻连接起来的时候会很麻烦,不准确。第二种做法是,每一层用一个线程。这个方法不会出现方法一的问题,但是线程数有局限。比如:如果一个电路有12层金属层(M1

M12),那这个方法最多可以用12个线程来处理。如果电路非常大,需要更多线程的时候,这个方法就不适用了。

技术实现思路

[0003]本专利技术所要解决的技术问题总的来说是提供一种基于多线程并行算法的集成电路电阻抽取方法。
[0004]为解决上述问题,本专利技术所采取的技术方案是:一种基于并行算法的集成电路电阻抽取方法,其特征在于:包括以下步骤;步骤一,读取版图信息,根据导体或过孔的坐标以及所属的层,把所有导体存储在对应单元里面;若导体跨过的边界,出现在不同的其他单元中,在每个单元保存一个导体的指针。
[0005]版图信息的格式一般有LEFDEF或者Calibre Connectivity Interface(CCI),本申请优选使用的是CCI接口,版图信息是GDS格式。里面的信息包括这个版图的所有导体层上面的导体和各个过孔层上面的过孔;步骤二,首先,建立线程池对每个单元的每个导体层建立一个任务加入线程池;然后,根据用户配置的线程数启动线程,并对每个线程做如下操作:步骤二一,从线程池中取出一个任务,为了方便,按照存储顺序取出;步骤二二,遍历这个任务里面所有导体,在和其他导体或过孔接触的地方创建节点,节点包括的信息是层数和坐标;步骤二三,把创建的节点和节点对应的导体或者过孔返回给主进程;由于一个导体可能在不同的线程里面操作,如果把创建的节点直接存入导体可能会导致不同的线程同时修改一个导体的情况,为了避免这种情况出现,等所有子线程结束后,再把节点写入导体,见步骤三;步骤三,等到线程池为空后,所有线程运行结束,把所有节点保存到导体的里面,每个导体都是一个类的对象,在类的成员里有一个list变量保存这个导体的所有节点,并
删除重复的节点;步骤四,首先,对每个单元,每个导体层,每个过孔层生成一个任务,并放到线程池中;然后,根据配置的线程数启动线程计算电阻;步骤五,所有线程运行结束后,输出计算出来的节点和节点之间电阻。
[0006]作为进一步改进,在步骤二二中,首先,检查每一个在当前单元的导体,如果导体与当前单元里其他导体有接触,则创建一个节点,节点的坐标就是接触的地方的中点位置;然后,检查在当前单元的每一个导体,如果导体与当前单元里的过孔有接触,则创建一个节点,节点的坐标是导体和过孔重叠部分的中点。
[0007]作为进一步改进,在步骤四中,针对每个线程,首先,从线程池中取出一个任务;然后,遍历本单元的本层的所有导体或者过孔,根据节点的位置和工厂提供的电阻率RHO,方块电阻RPSQ或者单位过孔电阻RPV,算出每两个相连节点之间的电阻;导体电阻公式:R=RHO*L/W/T、方块电阻R=RPSQ*L/W;其中,L:节点间的距离,W:节点间导体的宽度,T导体的厚度;过孔电阻公式:R=RPV/A;其中,A:过孔的面积。
[0008]作为进一步改进,在步骤一中,执行存储方法;首先,把整个电路平切成若干个单元,把所有导体根据坐标(x,y)存储在对应的单元里面;若导体跨过的边界,出现在不同的其他单元中,在每个单元保存一个导体的指针。
[0009]作为进一步改进,在步骤一、二、四中,首先,基于S1的存储方法,每个单元里面的每个导体层用一个线程运行,每个线程操作一个单元里的一个导体层上的所有导体,线程=单元
×
导体层数,通过遍历所有导体,在每个导体与当前单元里面的其他导体的接触点处创建一个节点;然后,在同一个单元里面寻找和过孔的接触点;在所有节点创建完成后,每个导体根据节点的位置和电阻率算出电阻;生成电阻网络;电阻网络通过节点和电阻把脚P1,P2,P3连接;其中,当同一个导体在不同的单元或不同的线程创建节点时,把每个线程创建的节点保存下来,在所有线程结束后,把节点分别存入导体。
[0010]本专利技术创造提供了更灵活的多线程方法,可以大大提高运行速度。也不会造成任何准确性的问题。对于现有技术难点,还有另外一个解决方案:检查每两个导体的时候,都看看它们是不是也同时保存在其他单元了。如果另外一个单元也保存了它们,只在其中一个里面做。这样就避免了重复创建节点的情况,也不用在主进程删除重复的节点。但是由于每两个导体都要检查是不是在其他单元也保存了,会花额外的时间。
[0011]程序启动的时候会有一个主进程,然后会根据用户的设置启动若干线程,每个线程完成任务以后,通过子线程和主进程之间的通信把结果传给主进程,这个是多线程通信的常规方法。
附图说明
[0012]图1是本专利技术的使用流程示意图。
[0013]图2是本专利技术的现有结构示意图。
[0014]图3是本专利技术的改进结构示意图。
具体实施方式
[0015]本专利技术创造采用一种新的方法,快速的找出电路的连接关系,算出电阻。既避免导体被切分后导致的准确性问题,也可以更加细化的进行并行计算。
[0016]S1,执行存储方法;首先,把整个电路平切成若干个单元,把所有导体根据坐标(x,y)存储在对应的单元里面;然后,若导体跨过的边界,出现在不同的其他单元中,在每个单元保存一个导体的指针;比如图3的例子:T1,V1会存在单元(0,0)里面,T2存在两个单元里(0,0)和(0,1),而T9保存在4个单元里面(1,1),(1,2),(2,1),(2,2)。
[0017]S2,执行并行算法;首先,基于S1的存储方法,每个单元里面的每个导体层用一个线程运行,每个线程操作一个单元里的一个导体层上的所有导体,线程=单元
×
导体层数;例如,在图3的例子中,里面最多可以用27个线程,(9个单元,3层导体),首先,遍历所有导体和所有相连的过孔;其次,在每个导体与当前单元里的其他导体的接触点处创建一个节点;再次,在同一个单元里面寻找和过孔的接触点,从而避免全局寻找接触的导体或者过孔,这样可以节省寻找的时间;最后,在所有节点创建完成后,每个导体根据节点的位置,根据电阻率算出电阻。这样就可以生成通过节点和电阻把脚P1,P2,P3连接起来的电阻网络了。
[0018]其中,当同一个导体在不同的单元或不同的线程创建节点时,把每个线程创建的节点保存下来,传给主进程(如图1所示),等所有线程结束后,主进程把节点分别存入本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于并行算法的集成电路电阻抽取方法,其特征在于:包括以下步骤;步骤一,读取版图信息,根据导体或过孔的坐标以及所属的层,把所有导体存储在对应单元里面;步骤二,首先,建立线程池对每个单元的每个导体层建立一个任务加入线程池;然后,根据用户配置的线程数启动线程,并对每个线程做如下操作:步骤二一,从线程池中取出一个任务;步骤二二,遍历这个任务里面所有导体,在和其他导体或过孔接触的地方创建节点;步骤二三,把创建的节点和节点对应的导体或者过孔返回给主进程;步骤三,所有线程运行至结束,把所有节点保存到导体的里面,并删除重复的节点;步骤四,首先,对每个单元,每个导体层,每个过孔层生成一个任务,并放到线程池中;然后,根据配置的线程数启动线程计算电阻;步骤五,所有线程运行结束后,输出计算出来的节点和节点之间电阻。2.根据权利要求1所述的基于并行算法的集成电路电阻抽取方法,其特征在于:在步骤二二中,首先,检查每一个在当前单元的导体,如果导体与当前单元里其他导体有接触,则创建一个节点,节点的坐标就是接触的地方的中点位置;然后,检查在当前单元的每一个导体,如果导体与当前单元里的过孔有接触,则创建一个节点,节点的坐标是导体和过孔重叠部分的中点。3.根据权利要求1所述的基于并行算法的集成电路电阻抽取方法,其特征在于:在步骤四中,针对每个线程,首先,从线程池中取出一个任务;然后,遍历本单元的本层的所...

【专利技术属性】
技术研发人员:马胜军孙玕孙延辉
申请(专利权)人:青岛展诚科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1