CN102809711B - 一种测试fpga单长线及连接开关的扩展布线方法 - Google Patents
一种测试fpga单长线及连接开关的扩展布线方法 Download PDFInfo
- Publication number
- CN102809711B CN102809711B CN201210108006.1A CN201210108006A CN102809711B CN 102809711 B CN102809711 B CN 102809711B CN 201210108006 A CN201210108006 A CN 201210108006A CN 102809711 B CN102809711 B CN 102809711B
- Authority
- CN
- China
- Prior art keywords
- clb
- grouping
- wiring
- line
- group
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
本发明公开了一种测试FPGA单长线及连接开关的扩展布线方法,步骤包括:设置轮回行并初始化参数,快速分组,线序预估,二次过滤,线序拼接,回退判定,拆除重布,结果扩展,结果验证。其优点是:依据层次式FPGA的结构特点,提出了一种基于布通率的高可靠、高适应性、高效率的布线算法;该算法能快速进行资源配置和有效配置资源图的生成,对单长线及连接开关的资源覆盖率较高,且与具体硬件结构无关;该算法的实施极大地增强了自动化布线和测试能力,有效减少后期布线工作量,节约测试成本,提高测试效率,缩短测试周期,降低开发风险,有一定的应用和参考价值。
Description
技术领域
本发明实现了一种测试FPGA单长线及连接开关的扩展布线方法,属FPGA自动化布线范畴。
背景技术
FPGA芯片是一种布线资源数量庞大、种类繁多、可重复编程的超大规模集成电路,在实际应用中,发生于互连资源上的故障率远大于其它器件的故障率,那么为了解决发生于互连资源上的故障,尤其为了测试单长线及互连开关的连接情况,并快速有效地对故障进行查找、定位和解决,这里采用了一种FPGA单长线及直连开关的测试方法(专利申请号201110125752.7)。
在对该测试方法进行实施验证的过程中发现,由于手工费时费力且错误率高以及机时有限且极其昂贵等系列原因,极需一种更高效的布线算法来进行快速的资源配置和有效配置资源图生成以进行连续无间断的测试。
近年来,各国学者提出过许多相关布线算法,其中迷宫算法是一种比较成熟的算法,其它如蚁群算法、全局寻优算法等都有一定的用途和群众基础,然而,这些算法在实施的过程中不是针对性不强,如单长线资源的覆盖率问题,就是理论到实践验证转换有一定难度,可操作性不强,另外有的算法在布线效率上的表现也不是很令人满意。
发明内容
为了解决现有布线方法的不足、针对性不强以及其它如手工布线效率低下等问题,本发明依据层次式FPGA的结构特点,提出了一种测试FPGA单长线及连接开关的扩展布线方法,是一种基于布通率的高可靠、高适应、高效率的布线方法。
按照本发明提供的技术方案,所述测试FPGA单长线及连接开关的扩展布线方法,步骤如下:
步骤一、设置轮回行并初始化参数:确定轮回行的数目为2,并为后续布线搜索到的链路中间结果准备存储空间,准备完成后进入步骤二;
步骤二、快速分组:依据分组算法依次将CLB和单长线进行分组,获取轮回行所有CLB分组和第一组CLB分组对应单长线起始组合点;分组完成后进入步骤三,如果失败则退出算法,返回失败代码;
步骤三、线序预估:在选取完第一组CLB分组连接点后,通过获取轮回行所有关键布线CLB分组连接点的方法获取轮回行所有CLB分组的起始连接点,然后分别对这些连接点进行测试验证,测试该分组是否合适,是否可以选出最优线序;测试的方法是:依据宽度优先算法搜索并选取该CLB布线在最大链长下的所有可布通的线网,如能布通则表示该分组暂时可行,并分别记录CLB1、CLB2、CLB3、CLB4可布通的组合序号以便在后续回退时调整该组合序号选出相应线序组合;当预估完成后进入步骤四,否则,如果所有组合测试后均未发现可布通的线序组合则回退至步骤二重新分组;所述CLB1、CLB2、CLB3、CLB4分别指每个CLB分组的第一个CLB、第二个CLB、第三个CLB和第四个CLB;
步骤四、二次过滤:经过步骤3预估过滤后,确定了所有关键布线CLB分组的起始连接点和所有可行的线序组合后,再做进一步进行过滤排除:从第一个CLB分组的CLB1和CLB2开始,依次选取相邻下个分组的CLB1和CLB2,在选取CLB1和CLB2的过程中过滤水平六长线的占用,并同时采用线序选优的策略选取最优线序组合,以降低CLB1和CLB2分别对CLB4和CLB3布线线网的影响;在选取CLB1、CLB2、CLB3和CLB4的过程中,考虑相互之间水平六长线和行间单长线的占用影响,当过滤完成后进入步骤五,否则失败回退至步骤二重新分组;
步骤五、线序拼接:在完成所有关键布线CLB分组的布线后,需要对相邻关键布线CLB分组的布线进行拼接来完成整个线网的布线,在拼接过程中,依据单个CLB在线序预估阶段选出的可行线序索引进行,当拼接成功则进入步骤八,否则当某个CLB在重试完所有的可行线序索引后均未拼接成功,则进入步骤六进行回退判定;
步骤六、回退判定:在线序拼接失败后,进行布线CLB回退位置的选择,首先选择拼接失败CLB的顶部CLB,调整顶部CLB选取的线序组合对底部CLB布线有影响的占用集合,同时测试底部CLB是否可以布通;如果可以则记录该线序索引值,进入步骤七进行拆除重布;如果调整完所有线序索引仍未布通,则回退至该拼接失败CLB的上一相邻关键布线CLB分组内具有相同组内索引的CLB,同样重试该CLB选出的可行线序索引进行,同时测试是否可以布通,如是,则记录该线序索引值,进入步骤七进行拆除重布,如果重试完所有的可行线序索引后仍未布通,则继续按照上述方法循环回退,直至回退位置为首行的首个分组为止;如果仍未成功则回退至步骤二重新分组;
步骤七、拆除重布:对已布线网进行部分拆除,拆除部分为布线失败CLB位置至回退CLB位置,拆除这之间所有已布的线网,并在拆除过程中分析造成失败的冲突占用点和线序索引,为回退重布提供依据,拆除完成后根据回退CLB位置记录的可行线序索引值进行资源重建即重布,重建完成则回退至步骤五,从该回退CLB位置开始继续未完成的线序拼接;
步骤八、结果扩展:完成拼接后的链路即为完整链路,即已完成了轮回行布线,覆盖了轮回行的所有CLB;此时轮回行以外的CLB部分,将搜索到的链路中间结果按照行奇偶对应的原则扩展至整个芯片,在扩展的过程中严格遵守XDL的描述规则;
步骤九、结果验证:扩展完成后,即实现了整个FPGA的布线,将此时的中间结果直接导出为XDL格式文件,然后利用XDL命令,将导出文件转化为NCD网表进行结果验证。
具体的,步骤二中所述的CLB和单长线分组方法,在型号为XCV1000的芯片上,其CLB分组、CLB分组大小、单长线分组大小和单长线分组计算方式分别为:
CLB分组:从公式
(列宽96×轮回行大小2)/(CLB分组大小+CLB被测分组大小)
得到分组数目,再根据输入的分组偏移量分别获取所有分组所包含的CLB的具体行列值,所有这些分组称为关键布线CLB分组,每组又都包含CLB1、CLB2、CLB3、CLB4四个CLB;将第一行的首个CLB分组作为第一个CLB分组,然后第一行按从左至右,第二行按从右至左的顺序依次将所有分组编号;而组序号从小到大相邻的CLB分组中有相同组内序号的CLB为起始和结束链路布线关系,第一组CLB的CLB1为第二组CLB的CLB1的起始链路布线CLB,第二组CLB的CLB1为第一组CLB的CLB1的结束链路布线CLB,同时第二组CLB的CLB1为第三组CLB的CLB1的起始链路布线CLB;
CLB分组大小:单长线数目24 / 输入线序数目6 = 4;
单长线分组大小:单长线数目24 / 输入线序数目6 = 4;
单长线分组:使用组合算法,将24根单长线每次选出6根,分四次选出分成四组,每组包含6根单长线起始连接点,然后将选出的四个分组编号,当后续检测到失败回退需要重新分组时,将当前分组编号加1继续选取下个分组;分组后的单长线依次分别对应到首个CLB分组的四个CLB上,作为相应CLB布线起始连接点。
步骤四所述的线序选优的策略是:依据单链长最短、总链长最短、稀缺资源占用最少、单长线垂直底部占用连接点Sx或单长线垂直顶部占用连接点Nx最少的原则判定最优;其中,在进行第一行布线时考虑单长线垂直底部占用连接点Sx,当进行第二行布线时考虑单长线垂直顶部占用连接点Nx;x为0~23的任意整数值。
步骤五所述对相邻关键布线CLB分组的布线进行拼接是将第一组的CLB1、第一组被测CLB分组和第二组的CLB1进行拼接,第二组的CLB1、第二组被测CLB分组和第三组的CLB1相拼接,并依次完成所有相邻CLB分组的CLB1的拼接,同理完成CLB2、CLB3和CLB4的拼接。
步骤五所述的线序拼接是将相邻关键布线CLB分组的链路头、链路体和链路尾这三个部分依据连接对应关系进行对接,并最终形成完整的布线轨迹。
本发明的优点是:本方法能快速进行资源配置和有效配置资源图的生成,对单长线及连接开关的资源覆盖率较高,且与具体硬件结构无关;本方法的实施能极大地增强FPGA的自动化布线和测试能力,有效减少后期布线工作量,节约测试成本,提高测试效率,缩短测试周期,有一定的应用和参考价值。
附图说明
图1是水平单长线测试整体结构示意图。
图2是算法涉及基本概念示意图。
图3是本发明的流程图。
图4是CLB内部连接关系图。
具体实施方式
为了进一步说明后续的实施步骤,这里结合附图从资源的抽取抽象、模型的建立、到算法理论基础、涉及的基本概念,再到算法流程所涉及的算法核心和布线策略,分别做简要陈述;涉及到的概念大致如下。
1、 资源等价描述
在设计FPGA布线算法前期,算法设计者需要从FPGA硬件设计者手中获取该芯片的结构描述文件,对文件中所描述的硬件结构及连接关系进行逻辑等价、逻辑抽象,并将中间结果存入数据库,以便在后续搜索路径的过程中依据该结果进行FPGA结构的重建,得到计算机可以识别的单元、图或树的结构,完成整个芯片的布线流程。
这里需要进行等价描述的逻辑资源有:1)CLB(可配置逻辑模块)、IOB、BRAM等逻辑单元块;2)各个逻辑块的输入输出引脚连接度;3)连接线之间的驱动方式;4)单长线、六长线、长线等布线资源;5)其他相关布线资源。
2、 依据设计模型
本方法依据的设计模型和理论基础,即配置完成FPGA芯片单长线及其直连开关的布线方法详见专利文献——一种FPGA单长线及直连开关的测试方法(专利申请号201110125752.7)。
模型如图1所示,包括:CLB 1;IOB 2;第一级CLB分组3;被测试的CLB 4;整张图表示了水平单长线的整体布线架构,为了测试单长线及互连开关的连接情况,这里要求被测的CLB要么用直向单长线互连要么用斜向单长线互连,且每次布图只允许用其中一种连接方式。
3、 算法理论模型
在基础数据库搭建完成后,我们需要对搜索算法的基本概念作一了解,依据设计模型,在24根D0信号进入第一组CLB后,需要分别连接到水平或者垂直的单长线连接点上,接着CLB的输出线通过GRM的内部互连线连接到外部资源,然后通过下一组的CLB的内部互连线连接到CLB,形成完整的单条线网;在整个过程中,最重要的有两个环节,一个是从CLB引出线网的过程,一个是在CLB中结束线网的过程;这两个过程,这里我分别称作为链路头布线和链路尾布线,剩下的从CLB横穿的部分我称之为链路体布线,最后,我们将链路头、链路体和链路尾拼接形成整条线网;行首/尾采用蛇形或者反蛇形布线方式连接。
如图2所示,图中序号分别代表的资源为:轮回行5(将在标题4说明);链路头6,链路的起始部分;第一组CLB分组7;链路体8,链路的横穿部分;链路尾9,链路的结束部分;第二组CLB分组10;行首/尾连接方式11,连接方式包括蛇形和反蛇形连接;第N-1组CLB分组12,第N组CLB分组13(以下标题8中将详述分组目的和方法);横穿CLB的单长线互连方式 14,横穿的方式有直线和斜线两种方式,分别为了测试直向和斜向开关。
4、 轮回行
轮回行即有一定轮回周期的行,连接点在从起始连接点经过一个轮回行周期的布线变换后,重又回到起始的连接点,这里变换所需要经过的行即为轮回行,为了规范期间,这里通过特殊变换使得轮回行大小为2,且连接起始点均从奇数行开始;至于轮回行大小设置为2的原因,见以下标题7。
5、 最大搜索链长
在依据宽度优先算法对单线网布线的过程中,由于不考虑驱动和时延等因素的影响,搜索链长是无节制增长的,为了控制增长,控制算法复杂度,这里需要引入最大链长的概念,以限定单条链路的搜索长度,即CLB内部单链长的最大长度不能超过设置的最大链长值,这里我们控制的最大链长值为10,初始值为5,后期在搜索线网失败的情况下将逐步放宽该初始化值至最大值,直至布线完成。
6、 算法流程
本方法的特色为采用了轮回行扩展模式布线,下面将算法流程的核心大致做一描述,首先将整个芯片结构按轮回行模式进行划分,接着按照一定算法完成轮回行布线,由于是多线网问题,所以轮回行布线实际包含两个部分:单线网布线和整体布线。前者采用宽度优先搜索算法完成对单线网布线,后者在调用前者的基础上通过综合选优完成所有线网布线。在整个布线过程中,我们采用快速分组、线序预估、多点布线、二次过滤、线序选优、线序拼接、回退判定、拆除重布及结果扩展等一整套布线方法和策略,有效降低后期布线资源的冲突和拥挤,并尽量避免线序对布线质量的影响,充分保证布通率。在完成轮回行布线后,依据奇数行和偶数行相照应的原则进行扩展,最终完成整个芯片的布线。
如图3算法流程图所示,分别说明了算法的流程和关键步骤,由于只是为了说明算法的大致流程,故对其中某些步骤作了合并简化处理,对某些策略也未作标示。
7、 设置轮回行
由于所实施的系列FPGA结构和市面上大部分商用FPGA结构均采用层次化对称式结构,经研究发现,在该系列FPGA结构下,前两行已基本具备了整个FPGA结构的特征,如CLB内部布线,换行布线,链路体组装,水平单长/六长线的占用排除等;唯一要解决的就是垂直六长在后期布线的资源冲突问题(由于仅为了测试单长线开关的连通性,所以排除了长线资源),只要解决了该问题轮回行的条件就能满足;办法有两种:1)、后续行依次进行组合调整;2)、在前两行就排除掉可能引起冲突的占用点;第一种方法可行但相对耗时,第二种方法在考虑到六长线的隔6进入CLB的特点,那么可能引起冲突的后续奇数行仍然对应奇数行,偶数行对应偶数行,所以只要保证自身S、N的对应数字不同时存在相同值就可以了。在分析完可行性之后,我们决定采用效率较高的第二种方法。
8、 快速分组
由于我们采用的是整组线序布线策略,那么在轮回行设定完成之后,首先要面对的就是分组;分组有两种:第一种是CLB分组,目的是为了便于组间回退、线网拼接及多点布线;第二种是水平单长线分组,目的是为了便于控制线序和选取最优;CLB分组相对简单,分组的大小和个数依据芯片的宽度、输入节点个数等通过一定的公式计算得来,以XCV1000为例(以下举例均以该设备为例),这里我们要求输入点的个数必须被24整除且商为偶数,我以6作为输入点个数,那么其计算方式分别为:
CLB分组:从公式
(列宽96×轮回行大小2)/(CLB分组大小+CLB被测分组大小)
得到分组数目,再根据输入的分组偏移量分别获取所有分组所包含的CLB的具体行列值,所有这些分组称为关键布线CLB分组,每组又都包含CLB1、CLB2、CLB3、CLB4四个CLB;将第一行的首个CLB分组作为第一个CLB分组,然后第一行按从左至右,第二行按从右至左的顺序依次将所有分组编号;而组序号从小到大相邻的CLB分组中有相同组内序号的CLB为起始和结束链路布线关系,第一组CLB的CLB1为第二组CLB的CLB1的起始链路布线CLB,第二组CLB的CLB1为第一组CLB的CLB1的结束链路布线CLB,同时第二组CLB的CLB1为第三组CLB的CLB1的起始链路布线CLB;
CLB分组大小:单长线数目24 / 输入线序数目6 = 4;
单长线分组大小:单长线数目24 / 输入线序数目6 = 4;
单长线分组:使用组合算法,将24根单长线每次选出6根,分四次选出分成四组,每组包含6根单长线起始连接点,然后将选出的四个分组编号,当后续检测到失败回退需要重新分组时,将当前分组编号加1继续选取下个分组;分组后的单长线依次分别对应到首个CLB分组的四个CLB上,作为相应CLB布线起始连接点。
单长线分组和CLB分组具有一定的内在联系,首先,它们的组大小相同,且单长线的分组序号对应CLB的组内序号;其次,每个关键布线CLB分组内的CLB布线均是针对有对应分组序号单长线的初始或变化的线序进行布线的。
9、 线序预估
在选取完第一组CLB分组连接点后,我们依据整体获取轮回行所有关键布线CLB分组连接点,获取的方法如下(以第一个CLB分组的CLB1上的水平单长线起始点W0为例):
根据是测被测CLB的直向开关还是斜向开关分情况获取,如果要测直向开关则只有横穿CLB一种,如果要测斜向开关则分斜向上和斜向下两种,一共分三种情况,这里的三种情况又都包含CLB内部布线和CLB相邻布线,由于CLB相邻布线的连接关系无非是Ex->Wx或者Wx->Ex(x为0~23之间的可能值)的情况,三种情况的规律一致,不做过多讲述。这里把重点放在CLB内部布线上:a、直向,这种情况和外部情况类似,W0到相邻CLB分组的CLB1,连接起始点还为W0;b、斜向上,E0在第一个CLB中的连接情况为W0->Nx->Ey(x、y为0~23之间的整数值,该值取决与前面对单长线内部互连关系的抽象),到相邻CLB分组中CLB1的起始点为上边Ey经CLB相邻布线得到Wy(y值为0~23之间的整数值,该值为W0依据数据库中的单长线互连关系变换获取);c、斜向下跟斜向上基本类似,不同的是CLB内部W0->Nx->Ey需要变为W0->Sx->Ey(x、y为0~23之间的整数值,该值取决与前面对单长线互连关系的抽象),其它同斜向上情形。其中,Ex(Ey)表示单长线水平右边占用的一个连接点,Wx(Wy)表示单长线水平左边占用的一个连接点,Sx表示单长线垂直底部占用的一个连接点,Nx表示单长线垂直顶部占用的一个连接点。
通过上述方式可以获取第一分组CLB1的W0经过变换后到第二个分组的连接初始值,依次可以获取第一分组CLB1的其它连接点到第二个分组的连接起始点,通过相邻获取的方式获取所有关键布线CLB分组中CLB1、CLB2、CLB3、CLB4的连接起始点。
所以在确定是以上3种情况的任意一种时,就可以获取所有关键布线CLB分组下的所有起始连接点。然后进行分组测试验证,测试该分组是否合适,是否可以选出最优线序,如不合适则回退到第8步进行快速分组调整;测试的方法就是搜索并选取最大链长下的所有可能线网,如能布通则表示该分组暂时可行,否则调整分组继续测试直至可行,然后分别记录第一组、第二组、第三组的组合序号以便在后续回退时调整该序号选出相应分组。这个过程我称之为布线预估阶段。
10、 多点布线
在线序预估阶段我们依据CLB分组,获取了所有关键布线CLB分组连接点线序,然后同时对多个分组关键点同时进行预估和布线,这里提到的多点是轮回行在CLB分组后具有相同组内序号的关键布线CLB分组;通过对这些关键布线CLB分组进行同时布线预估可以更快速的判定劣质线序并进行淘汰,以便高效高质量的进行线序分组。后期同样依据这些关键布线CLB分组进行布线和拼接,提高布线效率。这里提及的多点预估和多点布线统称为多点布线。
11、 二次过滤
二次过滤是对线序预估后选取的线序进行第二次过滤淘汰,即行间和CLB间占用冲突问题,包括水平六长占用和垂直单长占用等;由于冲突是相互的,那么调整谁改变谁呢?
在CLB分组后,每组的CLB我按照先后给定了序号,第一行按从左至右排序,第二行从右至左排序,每组都从1开始。如分组大小为4,则第一行第一组为CLB1_R1C1、CLB2_R1C2、CLB3_R1C3、CLB4_R1C4,第二行最左边一组为CLB4_R2C1、CLB3_R2C2、CLB2_R2C3、CLB1_R2C4(注:CLBm_RxCy,CLBm代表某个分组内的第m个CLB,m为CLB组内序号,x和y分别代表行和列的序号),由于第一行的CLB1、CLB2、CLB3、CLB4分别和第二行的CLB4、CLB3、CLB2、CLB1一一对应,这里我们固定CLB1和CLB2,分别调整CLB3和CLB4,在选取CLB3和CLB4的过程中过滤行间单长线冲突;当CLB的横穿数目大于6时,则不考虑水平六长占用冲突,否则需要在排除完行间冲突后再进行水平六长占用的排除,如果在排除过程中发现有布不通的情况则同样需要回退至快速分组阶段重新选取线序;由于选取CLB1和CLB2的结果直接影响到CLB3和CLB4的分组和选优,所以在选取CLB1和CLB2过程中需要对结果进行判优,那么如何选取最优呢?
12、 线序选优
在线序预估阶段,为了判断水平单长线组合的可行性,我们采用了全排列算法依次对线序进行预估,并依次记录可行线序;前期线序的选取直接影响后续线序的选取,特别是CLB1和CLB2分组的线序选取,为了给这些线序评优,这里我们引入评分选优策略:依据单链长最短、总链长最短、稀缺资源占用最少、单长线垂直底部占用连接点Sx或单长线垂直顶部占用连接点Nx最少的原则判定最优;其中,在进行第一行布线时考虑单长线垂直底部占用连接点Sx,当进行第二行布线时考虑单长线垂直顶部占用连接点Nx。
依据该策略分别对每组可行线序进行打分,并按照分值越高越优秀的原则对所有线网排序,这个综合评优的过程还要兼顾链路头和链路尾的总分值进行。
13、 线序拼接
在完成连接点线序选优、预估和二次过滤后,我们已对分组关键布线CLB分组下的单个CLB分别提取了所有可布通的线序集合,但单个CLB的布通不代表整个链路是可行的,这时的布线是不完整的,依据算法模型,完整的链路同时包括链路头、链路体和链路尾,所以这时需要对相邻关键布线CLB分组的组内和组间的CLB进行布线拼接,拼接的过程中随时都有布不通的可能性,那么在这种情况发生时,就需要考虑回退和拆除重布,把搜索节点从当前点回退到回退点,并拆除这之间的已布线网。
线序拼接就是将相邻关键布线CLB分组的链路头、链路体和链路尾这三个部分依据连接对应关系进行对接,并最终形成完整的布线轨迹,其具体拼接方法为:将第一组的CLB1、第一组被测CLB分组和第二组的CLB1进行拼接,第二组的CLB1、第二组被测CLB分组和第三组的CLB1相拼接,并依次完成所有相邻CLB分组的CLB1的拼接,同理完成CLB2、CLB3和CLB4的拼接。
14、 回退判定
在线序预估阶段,我们记录了关键布线CLB分组内的CLB下所有可行的排序索引值,当在失败CLB重试完所有的排序索引值都没有完成拼接时,我们即认为需要回退;关于回退位置,我认为有两个,第一个:上级CLB,因为上一个相邻关键布线CLB分组内具有相同组内序号的CLB直接影响该失败CLB的选取,比如第四组的CLB1受第三组的CLB1的影响。第二个:顶部CLB,因为顶部占用直接影响了底部CLB的线序选取;在回退到顶部CLB前,我们还需要记录该失败CLB的原始占用,在重新选取线序后,将更新过的占用与原始占用比对,做出合理判断,选择影响最小的优秀线序,使后布的线网更容易布通;回退到回退点后,我们调整回退点的CLB排序索引值并重试,若成功则从调整点顺序布下去,若失败则同样先是回退到上级CLB,再回退到顶部CLB,依次循环直至第一行第一组的某个CLB,仍然失败则对具有相同CLB组内序号的CLB进行分组调整并重试。当重试完所有分组仍无法布通时,我们则回退到8步重新进行分组。
15、 拆除重布
关于拆除和重布;在回退过程中,我们对部分已布线网采取拆除策略,这里讲的拆除并非完全整个布线的拆除,仅是对从当前CLB到回退CLB之间的已布线网进行拆除;重布前,我们需要对因资源冲突造成布线失败的原因进行综合分析;在重布的过程中,我们采用失败的线网优先,被拆线网靠后的原则进行线网资源重建。由于拆除重布过程没有拆掉所有线网,所以能够有效减少拆线资源量,节省运行时间,提高整体布线效率。
16、 结果扩展
在前两行布线成功的前提下,我们把前两行搜索成功的经验按奇数行和偶数行相照应的原则扩展至整个芯片,依次应用到所有行和列。在扩展的过程中我们严格遵循XDL描述规则,依据XDL所规范要求的PIP、NET、INST、INPIN、OUTPIN等标准形式进行格式化,PIP和NET依据实际搜索的器件间的连线而定,包括Slice、IOB、TBUF等各种形式的INST按布线中间结果和输入输出参数形成,INPIN和OUTPIN按实际的参数值进行格式化,并最终形成具有标准规范的中间结果。
17、 网表验证
扩展完成后的数据,其格式已经完全符合了XDL规则,故可直接将布线结果导出为XDL格式文件,再利用XDL命令,将已包含了布线所产生的资源配置信息和线网信息的XDL文件转化为NCD网表,进行验证。
在简要说明了算法所涉及的概念、设计模型、算法核心及布线策略后,下面再结合具体的布线流程对本发明的实施步骤作更进一步说明,在实施过程中,确定完FPGA芯片的型号后,我们将该芯片的型号信息作为算法的输入参数输入,此外,还要选取的输入参数包括链路起始点组合和链路结束点组合,这里我们分别选取Slice1的4根信号,自左至右分别为{S1_Y/S1_YQ/S1_X/S1_XQ};Slice0的2根信号,自左至右分别为{S0_X/S0_XQ}作为输出;以及6根输入信号自左至右为{S1_G_B1/S1_BY/S1_F_B1/S1_BX/S0_F_B1/S0_BX }。这里选取的输入输出信号应一一对应。
关于输入输出对应性的问题,在图4所示的CLB内部连接关系图上有很好的体现,每组CLB的输出到下一组的CLB输入都有固定的对应关系,如图上所示的Slice0的两组{ S0_X/S0_XQ,S0_Y/S0_YQ}信号,左侧CLB在输入右侧CLB的过程中,X与XQ,Y与YQ应一一对应串联。
除以上的参数外,本算法还可灵活设置的附加条件包括:最大搜索链长,被测CLB分组大小、链路体穿过的CLB数,链路尾连接方式(蛇形和反蛇形),过滤管脚及偏移CLB数目等。
在设置完参数及搜索条件后,本发明依据理论模型和一定步骤进行链路搜索,步骤大致如下:
步骤一、设置轮回行并初始化参数:确定轮回行的数目为2,并为后续布线搜索到的链路中间结果准备存储空间,准备完成后进入步骤二;
步骤二、快速分组:依据分组算法依次将CLB和单长线进行分组,获取轮回行所有CLB分组和第一组CLB分组对应单长线起始组合点;分组完成后进入步骤三,如果失败则退出算法,返回失败代码;
步骤三、线序预估:在选取完第一组CLB分组连接点后,通过获取轮回行所有关键布线CLB分组连接点的方法获取轮回行所有CLB分组的起始连接点,然后分别对这些连接点进行测试验证,测试该分组是否合适,是否可以选出最优线序;测试的方法是:依据宽度优先算法搜索并选取该CLB布线在最大链长下的所有可布通的线网,如能布通则表示该分组暂时可行,并分别记录CLB1、CLB2、CLB3、CLB4可布通的组合序号以便在后续回退时调整该组合序号选出相应线序组合;当预估完成后进入步骤四,否则如果所有组合测试后均未发现可布通的线序组合则回退至步骤二重新分组;所述CLB1、CLB2、CLB3、CLB4分别指每个CLB分组的第一个CLB、第二个CLB、第三个CLB和第四个CLB;
步骤四、二次过滤:经过步骤3预估过滤后,确定了所有关键布线CLB分组的起始连接点和所有可行的线序组合后,再做进一步进行过滤排除:从第一个CLB分组的CLB1和CLB2开始,依次选取相邻下个分组的CLB1和CLB2,在选取CLB1和CLB2的过程中过滤水平六长线的占用,并同时采用线序选优的策略选取最优线序组合,以降低CLB1和CLB2分别对CLB4和CLB3布线线网的影响;在选取CLB1、CLB2、CLB3和CLB4的过程中,考虑相互之间水平六长线和行间单长线的占用影响,当过滤完成后进入步骤五,否则失败回退至步骤二重新分组;
步骤五、线序拼接:在完成所有关键布线CLB分组的布线后,需要对相邻关键布线CLB分组的布线进行拼接来完成整个线网的布线,在拼接过程中,依据单个CLB在线序预估阶段选出的可行线序索引进行,当拼接成功则进入步骤八,否则当某个CLB在重试完所有的可行线序索引后均未拼接成功,则进入步骤六进行回退判定;
步骤六、回退判定:在线序拼接失败后,进行布线CLB回退位置的选择,首先选择拼接失败CLB的顶部CLB,调整顶部CLB选取的线序组合对底部CLB布线有影响的占用集合,同时测试底部CLB是否可以布通;如果可以则记录该线序索引值,进入步骤七进行拆除重布;如果调整完所有线序索引仍未布通,则回退至该拼接失败CLB的上一相邻关键布线CLB分组内具有相同组内索引的CLB,同样重试该CLB选出的可行线序索引进行,同时测试是否可以布通,如是,则记录该线序索引值,进入步骤七进行拆除重布,如果重试完所有的可行线序索引后仍未布通,则继续按照上述方法循环回退,直至回退位置为首行的首个分组为止;如果仍未成功则回退至步骤二重新分组;
步骤七、拆除重布:对已布线网进行部分拆除,拆除部分为布线失败CLB位置至回退CLB位置,拆除这之间所有已布的线网,并在拆除过程中分析造成失败的冲突占用点和线序索引,为回退重布提供依据,拆除完成后根据回退CLB位置记录的可行线序索引值进行资源重建即重布,重建完成则回退至步骤五,从该回退CLB位置开始继续未完成的线序拼接;
步骤八、结果扩展:完成拼接后的链路即为完整链路,即已完成了轮回行布线,覆盖了轮回行的所有CLB;此时轮回行以外的CLB部分,将搜索到的链路中间结果按照行奇偶对应的原则扩展至整个芯片,在扩展的过程中严格遵守XDL的描述规则,扩展完成后进入步骤九进行结果验证;
步骤九、结果验证:扩展完成后,即实现了整个FPGA的布线,将此时的中间结果直接导出为XDL格式文件,然后利用XDL命令,将导出文件转化为NCD网表进行结果验证。
本方法采用了轮回行布线、整体扩展的模式进行了FPGA布线;在布线过程中,又利用整体分组、多点布线、综合评优等多套策略,有效降低了后期资源冲突几率和回退率,极大地提高了布线质量和布线效率;拆除重布的过程采用部分而非整体拆除的机制,大大减少了拆线数量,显著提高了运行速度;实验结果表明,与其它相关算法相比本方法具有布线效率高、单长线资源覆盖率高、布通率高等优势。
Claims (5)
1. 一种测试FPGA单长线及连接开关的扩展布线方法,其特征是,步骤如下:
步骤一、设置轮回行并初始化参数:确定轮回行的数目为2,并为后续布线搜索到的链路中间结果准备存储空间,准备完成后进入步骤二;
步骤二、快速分组:依据分组算法依次将CLB和单长线进行分组,获取轮回行所有CLB分组和第一组CLB分组对应单长线起始组合点;分组完成后进入步骤三,如果失败则退出算法,返回失败代码;
步骤三、线序预估:在选取完第一组CLB分组连接点后,通过获取轮回行所有关键布线CLB分组连接点的方法获取轮回行所有CLB分组的起始连接点,然后分别对这些连接点进行测试验证,测试该分组是否合适,是否可以选出最优线序;测试的方法是:依据宽度优先算法搜索并选取该CLB布线在最大链长下的所有可布通的线网,如能布通则表示该分组暂时可行,并分别记录CLB1、CLB2、CLB3、CLB4可布通的组合序号以便在后续回退时调整该组合序号选出相应线序组合;当预估完成后进入步骤四,否则,如果所有组合测试后均未发现可布通的线序组合则回退至步骤二重新分组;所述CLB1、CLB2、CLB3、CLB4分别指每个CLB分组的第一个CLB、第二个CLB、第三个CLB和第四个CLB;
所述轮回行即有一定轮回周期的行,连接点在从起始连接点经过一个轮回行周期的布线变换后,重又回到起始的连接点,这里变换所需要经过的行即为轮回行;
步骤四、二次过滤:经过步骤三预估过滤后,确定了所有关键布线CLB分组的起始连接点和所有可行的线序组合后,再做进一步进行过滤排除:从第一个CLB分组的CLB1和CLB2开始,依次选取相邻下个分组的CLB1和CLB2,在选取CLB1和CLB2的过程中过滤水平六长线的占用,并同时采用线序选优的策略选取最优线序组合,以降低CLB1和CLB2分别对CLB4和CLB3布线线网的影响;在选取CLB1、CLB2、CLB3和CLB4的过程中,考虑相互之间水平六长线和行间单长线的占用影响,当过滤完成后进入步骤五,否则失败回退至步骤二重新分组;
步骤五、线序拼接:在完成所有关键布线CLB分组的布线后,需要对相邻关键布线CLB分组的布线进行拼接来完成整个线网的布线,在拼接过程中,依据单个CLB在线序预估阶段选出的可行线序索引进行,当拼接成功则进入步骤八,否则当某个CLB在重试完所有的可行线序索引后均未拼接成功,则进入步骤六进行回退判定;
步骤六、回退判定:在线序拼接失败后,进行布线CLB回退位置的选择,首先选择拼接失败CLB的顶部CLB,调整顶部CLB选取的线序组合对底部CLB布线有影响的占用集合,同时测试底部CLB是否可以布通;如果可以则记录该线序索引值,进入步骤七进行拆除重布;如果调整完所有线序索引仍未布通,则回退至该拼接失败CLB的上一相邻关键布线CLB分组内具有相同组内索引的CLB,同样重试该CLB选出的可行线序索引进行,同时测试是否可以布通,如是,则记录该线序索引值,进入步骤七进行拆除重布,如果重试完所有的可行线序索引后仍未布通,则继续按照上述方法循环回退,直至回退位置为首行的首个分组为止;如果仍未成功则回退至步骤二重新分组;
步骤七、拆除重布:对已布线网进行部分拆除,拆除部分为布线失败CLB位置至回退CLB位置,拆除这之间所有已布的线网,并在拆除过程中分析造成失败的冲突占用点和线序索引,为回退重布提供依据,拆除完成后根据回退CLB位置记录的可行线序索引值进行资源重建即重布,重建完成则回退至步骤五,从该回退之后CLB位置开始继续未完成的线序拼接;
步骤八、结果扩展:完成拼接后的链路即为完整链路,即已完成了轮回行布线,覆盖了轮回行的所有CLB;此时轮回行以外的CLB部分,将搜索到的链路中间结果按照行奇偶对应的原则扩展至整个芯片,在扩展的过程中严格遵守XDL的描述规则;
步骤九、结果验证:扩展完成后,即实现了整个FPGA的布线,将此时的中间结果直接导出为XDL格式文件,然后利用XDL命令,将导出文件转化为NCD网表进行结果验证。
2. 如权利要求1所述的测试FPGA单长线及连接开关的扩展布线方法,其特征在于,步骤二中所述的CLB和单长线分组方法,在型号为XCV1000的芯片上,其CLB分组、CLB分组大小、单长线分组大小和单长线分组计算方式分别为:
CLB分组:从公式
(列宽96×轮回行大小2)/(CLB分组大小+CLB被测分组大小)
得到分组数目,再根据输入的分组偏移量分别获取所有分组所包含的CLB的具体行列值,所有这些分组称为关键布线CLB分组,每组又都包含CLB1、CLB2、CLB3、CLB4四个CLB;将第一行的首个CLB分组作为第一个CLB分组,然后第一行按从左至右,第二行按从右至左的顺序依次将所有分组编号;而组序号从小到大相邻的CLB分组中有相同组内序号的CLB为起始和结束链路布线关系,第一组CLB的CLB1为第二组CLB的CLB1的起始链路布线CLB,第二组CLB的CLB1为第一组CLB的CLB1的结束链路布线CLB,同时第二组CLB的CLB1为第三组CLB的CLB1的起始链路布线CLB;
CLB分组大小:单长线数目24 / 输入线序数目6 = 4;
单长线分组大小:单长线数目24 / 输入线序数目6 = 4;
单长线分组:使用组合算法,将24根单长线每次选出6根,分四次选出分成四组,每组包含6根单长线起始连接点,然后将选出的四个分组编号,当后续检测到失败回退需要重新分组时,将当前分组编号加1继续选取下个分组;分组后的单长线依次分别对应到首个CLB分组的四个CLB上,作为相应CLB布线起始连接点。
3.如权利要求1所述的测试FPGA单长线及连接开关的扩展布线方法,其特征在于,步骤四所述的线序选优的策略是:依据单链长最短、总链长最短、稀缺资源占用最少、单长线垂直底部占用连接点Sx或单长线垂直顶部占用连接点Nx最少的原则判定最优;其中,在进行第一行布线时考虑单长线垂直底部占用连接点Sx,当进行第二行布线时考虑单长线垂直顶部占用连接点Nx;x为0~23的任意整数值。
4. 如权利要求1所述的测试FPGA单长线及连接开关的扩展布线方法,其特征在于,步骤五所述对相邻关键布线CLB分组的布线进行拼接是将第一组的CLB1、第一组被测CLB分组和第二组的CLB1进行拼接,第二组的CLB1、第二组被测CLB分组和第三组的CLB1相拼接,并依次完成所有相邻CLB分组的CLB1的拼接,同理完成CLB2、CLB3和CLB4的拼接。
5. 如权利要求1所述的测试FPGA单长线及连接开关的扩展布线方法,其特征是,所述线序拼接是将相邻关键布线CLB分组的链路头、链路体和链路尾这三个部分依据连接对应关系进行对接,并最终形成完整的布线轨迹。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210108006.1A CN102809711B (zh) | 2011-12-01 | 2012-04-13 | 一种测试fpga单长线及连接开关的扩展布线方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110392611 | 2011-12-01 | ||
CN201110392611.1 | 2011-12-01 | ||
CN201210108006.1A CN102809711B (zh) | 2011-12-01 | 2012-04-13 | 一种测试fpga单长线及连接开关的扩展布线方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102809711A CN102809711A (zh) | 2012-12-05 |
CN102809711B true CN102809711B (zh) | 2014-07-02 |
Family
ID=47233467
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210108006.1A Active CN102809711B (zh) | 2011-12-01 | 2012-04-13 | 一种测试fpga单长线及连接开关的扩展布线方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102809711B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106682290B (zh) * | 2016-12-13 | 2020-06-05 | 深圳市紫光同创电子有限公司 | 可编程逻辑器件布线方法及装置 |
CN111222295B (zh) * | 2020-01-07 | 2022-07-12 | 广东高云半导体科技股份有限公司 | 基于布线资源的布局布线控制方法及装置、系统 |
CN113671419B (zh) * | 2021-08-17 | 2024-05-24 | 杭州佳量医疗科技有限公司 | 一种线序测试方法、装置及系统 |
CN116738928B (zh) * | 2023-07-07 | 2024-03-29 | 成都电科星拓科技有限公司 | 一种印刷电路板并行拆线重布方法、介质及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6167558A (en) * | 1998-02-20 | 2000-12-26 | Xilinx, Inc. | Method for tolerating defective logic blocks in programmable logic devices |
CN101038324A (zh) * | 2007-02-14 | 2007-09-19 | 北京时代民芯科技有限公司 | 四次配置完成fpga互连资源的测试方法 |
CN102253329A (zh) * | 2011-06-17 | 2011-11-23 | 中国电子科技集团公司第五十八研究所 | 一种fpga单长线斜向开关的测试方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5550839A (en) * | 1993-03-12 | 1996-08-27 | Xilinx, Inc. | Mask-programmed integrated circuits having timing and logic compatibility to user-configured logic arrays |
-
2012
- 2012-04-13 CN CN201210108006.1A patent/CN102809711B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6167558A (en) * | 1998-02-20 | 2000-12-26 | Xilinx, Inc. | Method for tolerating defective logic blocks in programmable logic devices |
CN101038324A (zh) * | 2007-02-14 | 2007-09-19 | 北京时代民芯科技有限公司 | 四次配置完成fpga互连资源的测试方法 |
CN102253329A (zh) * | 2011-06-17 | 2011-11-23 | 中国电子科技集团公司第五十八研究所 | 一种fpga单长线斜向开关的测试方法 |
Non-Patent Citations (5)
Title |
---|
Hierarchical Interconnection Structures;Yen-Tai Lai等;《IEEE TRANSACTIONS ON VERY LARGE SCALE INTEGRATION (VLSI) SYSTEMS》;19970731;第5卷(第2期);186-196 * |
JP特表平8-507628A 1996.08.13 |
Yen-Tai Lai等.Hierarchical Interconnection Structures.《IEEE TRANSACTIONS ON VERY LARGE SCALE INTEGRATION (VLSI) SYSTEMS》.1997,第5卷(第2期),186-196. |
周强等.层次式FPGA快速可布性布线算法.《计算机辅助设计与图形学学报》.2010,第22卷(第4期),682-688. |
层次式FPGA快速可布性布线算法;周强等;《计算机辅助设计与图形学学报》;20100430;第22卷(第4期);682-688 * |
Also Published As
Publication number | Publication date |
---|---|
CN102809711A (zh) | 2012-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102809711B (zh) | 一种测试fpga单长线及连接开关的扩展布线方法 | |
CN102655101A (zh) | 3d芯片tsv互连的内建自测试及内建自修复技术 | |
US20090249276A1 (en) | Methods and systems for fpga rewiring and routing in eda designs | |
CN109474023B (zh) | 智能配电网区段实时更新方法、系统、存储介质及终端 | |
CN111914507B (zh) | 一种快速单磁通量子rsfq电路布线方法和装置 | |
CN104518488A (zh) | 用于配电网可靠性分析的负荷点故障区域类型划分方法 | |
Huang et al. | Match and replace: A functional ECO engine for multierror circuit rectification | |
CN109684731A (zh) | 一种高效的详细布线驱动轨道分配算法 | |
CN104462726B (zh) | 用于反熔丝的现场可编程门阵列的布线方法 | |
CN105631768A (zh) | 一种快速获取环形配电网中辐射状拓扑结构的编码方法 | |
US7134112B1 (en) | Incremental routing in integrated circuit design | |
CN102420797B (zh) | 一种拓扑映射方法及系统 | |
CN106611084A (zh) | 集成电路的设计方法及装置 | |
CN103198012A (zh) | 一种基于扩展状态机图的测试用例自动产生方法 | |
CN102968515B (zh) | 用于计算集成电路模型的验证覆盖率的方法和设备 | |
CN106709119A (zh) | 一种fpga芯片布线方法 | |
CN113836846B (zh) | 一种gpu加速计算的集成电路无悲观路径分析方法 | |
CN104572774A (zh) | 搜索方法及装置 | |
CN104133747B (zh) | 一种现场可编程门阵列芯片应用电路的测试方法 | |
CN106546912A (zh) | 一种应用相关型fpga自动化测试配置方法 | |
US6253364B1 (en) | Automatic placement and routing device | |
CN106682290B (zh) | 可编程逻辑器件布线方法及装置 | |
CN103363999B (zh) | 一种生成道路网stroke的迭代方法 | |
CN102436525B (zh) | 一种集成电路设计过程中多节点并行自动修复保持时间违例的方法 | |
CN110083942B (zh) | 基于物理信息的信号电迁移批量修复方法、系统及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20160225 Address after: 214035 No. 777 West Construction Road, Binhu District, Jiangsu, Wuxi Patentee after: WUXI ZHONGWEI YIXIN CO., LTD. Address before: Hui Road Binhu District 214035 Jiangsu city of Wuxi province No. 5 Patentee before: China Electronics Technology Group Corporation No.58 Research Institute |