CN109359334B - 一种组合电路门级网表转化为aiger格式文件的方法 - Google Patents

一种组合电路门级网表转化为aiger格式文件的方法 Download PDF

Info

Publication number
CN109359334B
CN109359334B CN201811061965.6A CN201811061965A CN109359334B CN 109359334 B CN109359334 B CN 109359334B CN 201811061965 A CN201811061965 A CN 201811061965A CN 109359334 B CN109359334 B CN 109359334B
Authority
CN
China
Prior art keywords
node
aiger
input
file
skipping
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
Application number
CN201811061965.6A
Other languages
English (en)
Other versions
CN109359334A (zh
Inventor
郭阳
刘畅
张璐婕
梁斌
张龙
贺旭
陈建军
刘必慰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201811061965.6A priority Critical patent/CN109359334B/zh
Publication of CN109359334A publication Critical patent/CN109359334A/zh
Application granted granted Critical
Publication of CN109359334B publication Critical patent/CN109359334B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design

Abstract

本发明公开了一种组合电路门级网表转化为AIGER格式文件的方法,实施步骤包括读取组合电路门级网表,遍历初始输入引脚并生成AIGER格式的包含初始输入引脚信息的文件,在遍历过程中深度优先搜索与初始输入引脚相连的每个输入节点nodein,同时标记网表中每个节点的层级数;再将网表中所有节点转化为AIGER格式,同时生成包含节点之间逻辑关系信息的文件。整合上述两个文件,最终形成包含所有信息的完整AIGER格式文件。本发明能够将门级网表的标准单元用主合取范式的形式表示出来再进行AIGER格式的转化,具有转换方式快速简单、有效的优点,既充分保留了原有电路结构,又生成了可以被SAT求解器处理的文件。

Description

一种组合电路门级网表转化为AIGER格式文件的方法
技术领域
本发明涉及集成电路的验证与综合技术领域,具体涉及一种组合电路门级网表转化为AIGER格式文件的方法。
背景技术
与非图( And-Inverter Graph, AIG)是一种有向无环图,其特点是仅包含“与”和“非”两种逻辑,它具有结构简洁、与电路一一对应的优点。
AIGER是一种文件格式、一个库,也是集成了一系列插件的工具,它采用与非图的形式呈现,且容易转换成SAT求解器可以接受的命题逻辑公式,从而广泛地应用于学术界和工业界解决验证和优化等问题。目前有工具可以直接将基于硬件描述语言的设计综合成AIGER格式文件,但是商用EDA工具在综合过程中对电路的时序、面积、功耗等性能指标考虑更为周全。直接综合得到的AIGER格式文件与由EDA工具生成的门级网表相比,在电路结构上存在明显差异,因而对前者进行形式化分析,不能代替对网表进行的分析。Tseytin转化方法将组合逻辑电路作为输入,得到一个合取范式形式的布尔表达式,但是在该方法中电路输出是合取范式的一部分,因而不能直接用于AIGER格式的转化。
基于以上技术需求,一种比较合理的做法是:将EDA工具综合得到的门级网表转化成AIGER格式,在充分保留EDA工具综合优势的基础上,得到可供SAT求解器处理的网表文件。但是,如何实现上述方案,仍然是一项亟待解决的关键技术问题。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种组合电路门级网表转化为AIGER格式文件的方法,本发明能够将门级网表的标准单元用主合取范式的形式表示出来再进行AIGER格式的转化,具有转换快速方式简单、有效的优点,既充分保留了原有电路结构,又生成了可以被SAT求解器处理的文件。
为了解决上述技术问题,本发明采用的技术方案为:
一种组合电路门级网表转化为AIGER格式文件的方法,实施步骤包括:
1)读取待转化的组合电路门级网表;
2)遍历组合电路门级网表中的初始输入引脚并生成AIGER格式的用于存储初始输入引脚信息的文件input.aag,并将所有输入节点nodein的编号插入预设的队列tQ中;
3)建立并打开AIGER格式的文件and.aag,该文件用于存储电路中节点之间的逻辑关系;获取队列tQ头元素并使其出队,同时将其插入预设的队列Q中,出队的元素是某个输入节点nodein的编号,将该元素对应的当前输入节点nodein转化为AIGER格式并存储到文件and.aag中;遍历当前输入节点nodein的子节点nodein_c,并将表示nodein输出引脚的变量值赋给表示当前子节点nodein_c输入引脚的变量;
4)获取队列Q头元素并使其出队,出队的元素是网表中某个节点node的编号;遍历该元素对应的节点node的子节点,如果当前子节点node_c的层级数大于节点node的层级数加1或者该子节点已经转化为AIGER格式,则继续寻找node的下一个子节点;否则将当前子节点node_c转化为AIGER格式并存储到文件and.aag中,并且将当前子节点node_c的编号插入队列Q;接着遍历node_c的子节点node_c_c,并将表示node_c输出引脚的变量值赋给表示当前子节点node_c_c输入引脚的变量;关闭文件and.aag;
5)将文件input.aag、文件and.aag的内容进行整合,最终形成包含组合电路门级网表所有信息的完整AIGER文件。
优选地,步骤2)的详细步骤包括:
2.1)设置用于在AIGER格式文件中为每个引脚确定唯一的正整数表示的全局变量nvar,该变量的初值为2;定义队列tQ,用于存储网表中与初始输入引脚primary input相连的输入节点的编号;定义用于存储电路中初始输入引脚primary input编号的向量PIs;将所有节点层级数初始化为-1;
2.2)建立并打开AIGER格式的用于存储初始输入引脚信息的文件input.aag,设置指向向量PIs头部的迭代器PI;
2.3)判断迭代器PI是否指向向量PIs的尾部,如果是则跳转执行步骤2.9);否则,跳转执行步骤2.4);
2.4)判断与迭代器PI当前指向的初始输入引脚primary input相连的输入节点nodein是否被遍历完毕,如果已经结束遍历,则跳转执行步骤2.8);否则,跳转执行步骤2.5);
2.5)继续遍历与当前primary input相连的输入节点nodein,判断队列tQ中能否找到当前输入节点nodein的编号,如果不能,则将当前输入节点nodein的编号插入队列tQ中;
2.6)将表示初始输入引脚primary input的全局变量nvar的值赋给当前输入节点nodein的输入引脚;
2.7)调用深度优先搜索函数搜索当前输入节点nodein的所有后续子节点,同时标记这些子节点的层级数,且标记层级数的原则是取按照不同路径计算得到层级数的最大值;跳转执行步骤2.4);
2.8)将全局变量nvar的值写入文件input.aag,然后将全局变量nvar的值自增2,将迭代器PI的值自增1;跳转执行步骤2.3);
2.9)关闭文件input.aag。
优选地,步骤3)的详细步骤包括:
3.1)建立并打开AIGER格式的文件and.aag,该文件用于存储电路中节点之间的逻辑关系,预先初始化队列tQ,队列tQ用于存储与初始输入引脚primary input相连的输入节点nodein的编号;
3.2)判断队列tQ是否为空,如果队列tQ为空则跳转执行步骤4);如果队列tQ非空,则跳转执行下一步;
3.3)获取队列tQ的头元素并使其出队,出队的元素是某个输入节点nodein的编号;判断该元素对应的当前输入节点nodein的层级数是否为0,如果为0则跳转执行下一步;否则,跳转执行步骤3.2);
3.4)将步骤3.3)获取的元素插入队列Q中,将当前输入节点nodein转化为AIGER格式并存储到文件and.aag中;
3.5)判断当前输入节点nodein是否存在子节点,如果不存在子节点则跳转执行步骤3.2);否则,跳转执行步骤3.6);
3.6)判断当前输入节点nodein是否存在尚未遍历的子节点,如果不存在尚未遍历的子节点,则跳转执行步骤3.2);否则,跳转执行步骤3.7);
3.7)继续遍历当前输入节点nodein的子节点,对于遍历到的当前子节点nodein_c,将表示当前输入节点nodein输出引脚的变量值赋给当前子节点nodein_c的输入引脚,注意该输入引脚应当与nodein的输出引脚相连;跳转执行步骤3.6)。
优选地,步骤3.4)中将当前输入节点nodein转化为AIGER格式并存储到文件and.aag的详细步骤包括:
3.4.1)对于具有m个输入(x1,x2,…,xm)和n个输出(y1,y2,…,yn)的当前输入节点nodein,根据真值表将每一个输出都表示成输入的主合取范式,输出yi的主合取范式表示为yi=M1∧M2∧…∧Mk
3.4.2)主合取范式中的每个极大项Mk都是m个命题变元的析取,极大项Mk=P1 *∨P2 *∨…Pm *,其中每个Pj *都为m个命题变元中的第j个命题变元Pj或者命题变元的否定┐Pj
3.4.3)针对共包含m个命题变元的极大项Mk,将Mk中的析取逐个转换为AIGER语句;对于Pi *∨Pj *,用“或门”表示该项,若Pi *和Pj *对应的变量为i和j,则该析取式对应的AIGER语句为“nvar U(i) U(j)”,其中nvar为全局变量,U(i)和U(j)为函数,当i为奇数时,U(i)的值为i减1,当i为偶数时,U(i)的值为i加1;将全局变量nvar加2,并将AIGER语句写入文件and.aag;用Pij *替换Pi *∨Pj *
3.4.4)将主合取范式yi=M1∧M2∧…∧Mk中的合取逐个转换为AIGER语句,对于Mi *∨Mj *,用“与门”表示该项,若Mi *和Mj *对应的变量为i和j,则该合取式对应的AIGER语句为“nvar i j”,其中nvar为全局变量,将全局变量nvar加2,并将AIGER语句写入文件and.aag;用Mij替换Mi∧Mj
优选地,步骤4)的详细步骤包括:
4.1)判断队列Q是否为空,如果队列Q为空则跳转执行步骤4.9);如果队列Q非空,则跳转执行下一步;
4.2)获取队列tQ的头元素并使其出队,出队的元素是网表中某个节点node的编号;判断该元素对应的当前节点node是否存在子节点,如果不存在子节点则跳转执行步骤4.1);否则,跳转执行下一步;
4.3)判断当前节点node的子节点是否已经遍历完毕,如果已经遍历完毕,则跳转执行步骤4.1);否则,跳转执行下一步;
4.4)继续遍历当前节点node的子节点,针对遍历得到的当前子节点node_c,判断当前子节点node_c的层级数大于节点node的层级数加1或者当前子节点node_c已经转化为AIGER格式是否成立,如果成立则跳转执行步骤4.3);否则,跳转执行下一步;
4.5)将当前子节点node_c按照与前文所述相同的方法转化为AIGER格式并存储到文件and.aag中;
4.6)判断当前子节点node_c是否存在子节点node_c_c,如果当前子节点node_c存在子节点,则跳转执行步骤4.7);否则,跳转执行步骤4.3);
4.7)判断当前子节点node_c的子节点是否已经遍历完毕,如果已经遍历完毕,则跳转执行步骤4.3);否则,跳转执行步骤4.8);
4.8)将表示当前子节点node_c输出引脚的变量值赋给表示其当前子节点node_c_c输入引脚的变量,注意该输入引脚应当与node_c的输出引脚相连;跳转执行步骤4.7);
4.9)关闭文件and.aag。
和现有技术相比,本发明具有下述优点:
1、本发明提出了一种将门级网表转化成AIGER格式的新方法。在现有技术条件下,对直接综合得到的AIGER格式文件进行形式化分析,不能替代对由EDA工具综合生成的门级网表进行分析。而这种新方法保留了门级网表的电路结构,因而能够解决上述技术难题。
2、本发明得到的AIGER格式文件很容易转换成SAT求解器可接受的命题逻辑公式,因而为解决验证和优化等问题提供了有效途径。
附图说明
图1为本发明实施例中或门及其等价逻辑结构。
图2为本发明实施例方法的基本流程示意图。
图3为本发明实施例步骤2)的详细流程示意图。
图4为本发明实施例步骤3)~步骤5)的详细流程示意图。
图5为本发明实施例中的primary input与输入节点引脚的对应关系示意图。
图6为本发明实施例中的电路层级图。
具体实施方式
由EDA工具综合得到的门级网表包含大量标准单元,它们是网表的基本组成部分。理论上,组合电路中,任何一种此类标准单元都能够通过“与门”和“非门”的逻辑组合得到等价的逻辑结构。为实现门级网表与AIGER格式文件一一对应的要求,首先为上述标准单元建立一个映射表,在映射表中给出与每一种标准单元逻辑等价的“与门”、“非门”逻辑组合。例如图1(a)中的二输入“或门”,其输入引脚为i、j,输出引脚为y,那么逻辑表示为y=i | j。同时,也可以通过一个二输入“与门”和三个“非门”得到等价的“或”逻辑,对于新生成的电路符号,输入引脚仍然是i、j,输出引脚是y,只是在前者基础上增加了若干个中间引脚,其逻辑表示为y=~(~i&~j)。在AIGER格式文件中,每个逻辑门的输入引脚和输出引脚都由唯一的正整数来表示,并且要求输入引脚数字一定在前面被定义。如图1(b)中的二输入“或门”,其AIGER表示为:
7
6 3 5
其中“7”是或逻辑的输出引脚,表示对“与门”输出引脚“6”的取反;“3”和“5”表示对引脚“2”和“4”的取反;“6 3 5”表示由引脚“3”“5”输入的信号经过“与”逻辑,从引脚“6”输出。由此可见,使用“与门”和“非门”表示门级网表中的标准单元时,会增加新的输入引脚和输出引脚。
基于上述映射原理,如图2所示,本发明中组合电路门级网表转化为AIGER格式文件的方法的实施步骤包括:
1)读取待转化的组合电路门级网表;
2)遍历组合电路门级网表中的初始输入引脚并生成AIGER格式的用于存储初始输入引脚信息的文件input.aag,并将所有输入节点nodein的编号插入预设的队列tQ中;
3)建立并打开AIGER格式的文件and.aag,该文件用于存储电路中节点之间的逻辑关系;获取队列tQ头元素并使其出队,同时将其插入预设的队列Q中,出队的元素是某个输入节点nodein的编号,将该元素对应的当前输入节点nodein转化为AIGER格式并存储到文件and.aag中;遍历当前输入节点nodein的子节点nodein_c,并将表示nodein输出引脚的变量值赋给表示当前子节点nodein_c输入引脚的变量,这是由于该输入引脚与nodein的输出引脚相连;
4)获取队列Q头元素并使其出队,出队的元素是网表中某个节点node的编号;遍历该元素对应的节点node的子节点,如果当前子节点node_c的层级数大于节点node的层级数加1或者该子节点已经转化为AIGER格式,则继续寻找node的下一个子节点;否则将当前子节点node_c转化为AIGER格式并存储到文件and.aag中,将当前子节点node_c的编号插入队列Q;接着遍历node_c的子节点node_c_c,并将表示node_c输出引脚的变量值赋给表示当前子节点node_c_c输入引脚的变量,这是由于该输入引脚与node_c的输出引脚相连;关闭文件and.aag;
5)将文件input.aag、文件and.aag的内容进行整合,最终形成包含组合电路门级网表所有信息的完整AIGER文件。
如图3所示,步骤2)的详细步骤包括:
2.1)设置用于在AIGER格式文件中为每个引脚确定唯一的正整数表示的全局变量nvar,该变量的初值为2;定义队列tQ,用于存储网表中与初始输入引脚primary input相连的输入节点的编号;定义用于存储电路中初始输入引脚primary input编号的向量PIs;将所有节点层级数初始化为-1;
2.2)建立并打开AIGER格式的用于存储初始输入引脚信息的文件input.aag,设置指向向量PIs头部的迭代器PI;在门级网表转化为AIGER格式过程中,每个primary input都由变量nvar得到唯一的正整数表示,表示primary input的变量值nvar将被写入文件input.aag;
2.3)判断迭代器PI是否指向向量PIs的尾部,如果是则跳转执行步骤2.9);否则,跳转执行步骤2.4);
2.4)判断与迭代器PI当前指向的初始输入引脚primary input相连的输入节点nodein是否被遍历完毕,如果已经结束遍历,则跳转执行步骤2.8);否则,跳转执行步骤2.5);
2.5)继续遍历与当前primary input相连的输入节点nodein,判断队列tQ中能否找到当前输入节点nodein的编号,如果不能,则将当前输入节点nodein的编号插入队列tQ中;
2.6)将表示初始输入引脚primary input的变量值赋给表示当前输入节点nodein的输入引脚的变量,这是由于该输入引脚应当与当前primary input相连;primary input和与其相对应的nodein的输入引脚,在AIGER格式中两者的正整数表示相同,如图5所示,因而将表示前者的变量值nvar赋给后者;
2.7)调用深度优先搜索函数搜索当前输入节点nodein的所有后续子节点,同时标记这些子节点的层级数,且标记层级数的原则是取按照不同路径计算得到层级数的最大值;跳转执行步骤2.4);本实施例通过递归调用深度优先搜索函数,搜索当前输入节点nodein的所有后续子节点,同时标记这些子节点的层级数;在递归过程中,当遇到没有子节点的节点时递归结束。标记层级数的原则是取按照不同路径计算得到层级数的最大值,如图6所示。例如在处理过程中,如果nodein_c的层级数小于numlevel(变量numlevel>=0,是当前计算所得的层级数),则将其层级数更新为numlevel,否则nodein_c的层级数保持不变。对当前输入节点nodein完成深度优先搜索后,则跳转执行步骤2.4);
2.8)将全局变量nvar的值写入文件input.aag,然后将全局变量nvar的值自增2,将迭代器PI的值自增1;跳转执行步骤2.3);
2.9)关闭文件input.aag。
如图4所示,步骤3)的详细步骤包括:
3.1)建立并打开AIGER格式的文件and.aag,该文件用于存储电路中节点之间的逻辑关系(“与门”和“非门”的逻辑关系),预先初始化队列tQ,队列tQ用于存储与初始输入引脚primary input相连的输入节点nodein的编号;
3.2)判断队列tQ是否为空,如果队列tQ为空则跳转执行步骤4);如果队列tQ非空,则跳转执行下一步;
3.3)获取队列tQ的头元素并使其出队,出队的元素是某个输入节点nodein的编号;判断该元素对应的当前输入节点nodein的层级数是否为0,如果为0则跳转执行下一步;否则,跳转执行步骤3.2);
3.4)将步骤3.3)获取的元素插入队列Q中,将当前输入节点nodein转化为AIGER格式并存储到文件and.aag;
3.5)判断当前输入节点nodein是否存在子节点,如果不存在子节点则跳转执行步骤3.2);否则,跳转执行步骤3.6);
3.6)判断当前输入节点nodein是否存在尚未遍历的子节点,如果不存在尚未遍历的子节点,则跳转执行步骤3.2);否则,跳转执行步骤3.7);
3.7)继续遍历当前输入节点nodein的子节点,对于遍历到的当前子节点nodein_c,将表示当前输入节点nodein的输出引脚的变量值赋给表示当前子节点nodein_c的输入引脚的变量,注意该输入引脚应当与nodein的输出引脚相连;跳转执行步骤3.6)。
如图4所示,步骤3.4)中将当前输入节点nodein转化为AIGER格式并存储到文件and.aag的详细步骤包括:
3.4.1)对于具有m个输入(x1,x2,…,xm)和n个输出(y1,y2,…,yn)的当前输入节点nodein,根据真值表将每一个输出都表示成输入的主合取范式,输出yi的主合取范式表示为yi=M1∧M2∧…∧Mk
3.4.2)主合取范式中的每个极大项Mk都是m个命题变元的析取,极大项Mk=P1 *∨P2 *∨…Pm *,其中每个Pj *都为m个命题变元中的第j个命题变元Pj或者命题变元的否定┐Pj
3.4.3)针对共包含m个命题变元的极大项Mk,将Mk中的析取逐个转换为AIGER语句;对于Pi *∨Pj *,用“或门”表示该项,若Pi *和Pj *对应的变量为i和j,则该析取式对应的AIGER语句为“nvar U(i) U(j)”,其中nvar为全局变量,U(i)和U(j)为函数,当i为奇数时,U(i)的值为i减1,当i为偶数时,U(i)的值为i加1;将全局变量nvar加2,并将AIGER语句写入文件and.aag;例如,首先处理P1 *∨P2 *,用“或门”表示该项。当前用于AIGER格式的全局变量为nvar,P1 *和P2 *分别对应的变量为i和j,则P1 *∨P2 *对应的AIGER语句为“nvar U(i) U(j)”,其中nvar为全局变量,U(i)和U(j)为函数,当i为奇数时,U(i)的值为i减1,当i为偶数时,U(i)的值为i加1,这样做一是考虑到用“与门”和“非门”表示“或”逻辑时,原始输入引脚均要取反才能作为“与门”的输入;二是由于“与门”输出引脚对应的变量值一定是偶数,该值加1表示输出信号取反。用P12 *替换P1 *∨P2 *,P12 *对应的变量值为nvar+1。鉴于增加一个新的“与门”,nvar应自增2。按照同样的方法处理P12*∨P3*,并将其对应的AIGER语句写入文件and.aag中;重复上述步骤,直至极大项Mk可以由变量表示出来。
3.4.4)将主合取范式yi=M1∧M2∧…∧Mk中的合取逐个转换为AIGER语句,对于Mi *∨Mj *,用“与门”表示该项,若Mi *和Mj *对应的变量为i和j,则该合取式对应的AIGER语句为“nvar i j”,其中nvar为全局变量,将全局变量nvar加2,并将AIGER语句写入文件and.aag。例如,首先处理M1∧M2,用“与门”表示该项。当前全局变量为nvar,M1和M2对应的变量分别为i和j,则M1∧M2对应的AIGER语句为“nvar i j”,将该语句写入文件and.aag中,用M12替换M1∧M2,MP12对应的变量为nvar。鉴于增加一个“与门”,nvar应自增2。 按照相同方法处理M12∧M3,并将其对应的AIGER语句写入文件and.aag中;重复上述步骤,直至yi可以由变量表示。
如图4所示,步骤4)的详细步骤包括:
4.1)判断队列Q是否为空,如果队列Q为空则跳转执行步骤4.9);如果队列Q非空,则跳转执行下一步;
4.2)获取队列tQ的头元素并使其出队,该元素是网表中某个节点node的编号;判断该元素对应的当前节点node是否存在子节点,如果不存在子节点则跳转执行步骤4.1);否则,跳转执行下一步;
4.3)判断当前节点node的子节点是否已经遍历完毕,如果已经遍历完毕,则跳转执行步骤4.1);否则,跳转执行下一步;
4.4)继续遍历当前节点node的子节点,针对遍历得到的当前子节点node_c,判断当前子节点node_c的层级数大于节点node的层级数加1或者当前子节点node_c已经转化为AIGER格式是否成立,如果成立则跳转执行步骤4.3);否则,跳转执行下一步;
4.5)将当前子节点node_c按照与前文所述相同的方法转化为AIGER格式并存储到文件and.aag中;
4.6)判断当前子节点node_c是否存在子节点node_c_c,如果当前子节点node_c存在子节点,则跳转执行步骤4.7);否则,跳转执行步骤4.3);
4.7)判断当前子节点node_c的子节点是否已经遍历完毕,如果已经遍历完毕,则跳转执行步骤4.3);否则,跳转执行步骤4.8);
4.8)将表示当前子节点node_c的输出引脚的变量值赋给表示其当前子节点node_c_c的输入引脚的变量,注意该输入引脚应当与node_c的输出引脚相连;跳转执行步骤4.7);
4.9)关闭文件and.aag。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (5)

1.一种组合电路门级网表转化为AIGER格式文件的方法,其特征在于实施步骤包括:
1)读取待转化的组合电路门级网表;
2)遍历组合电路门级网表中的初始输入引脚并生成AIGER格式的用于存储初始输入引脚信息的文件input.aag,并将所有输入节点nodein的编号插入预设的队列tQ中;
3)建立并打开AIGER格式的文件and.aag,该文件用于存储电路中节点之间的逻辑关系;获取队列tQ头元素并使其出队,同时将其插入预设的队列Q中,出队的元素是某个输入节点nodein的编号,将该元素对应的当前输入节点nodein转化为AIGER格式并存储到文件and.aag中;遍历当前输入节点nodein的子节点nodein_c,并将表示nodein输出引脚的变量值赋给表示当前子节点nodein_c输入引脚的变量;
4)获取队列Q头元素并使其出队,出队的元素是网表中某节点node的编号;遍历该节点node的子节点,如果当前子节点node_c的层级数大于节点node的层级数加1或者该子节点已经转化为AIGER格式,则继续寻找node的下一个子节点;否则将当前子节点node_c转化为AIGER格式并存储到文件and.aag中,将当前子节点node_c的编号插入队列Q;接着遍历node_c的子节点node_c_c,并将表示node_c输出引脚的变量值赋给表示当前子节点node_c_c输入引脚的变量;关闭文件and.aag;
5)将文件input.aag、文件and.aag中的内容进行整合,最终形成包含组合电路门级网表所有信息的完整AIGER文件。
2.根据权利要求1所述的组合电路门级网表转化为AIGER格式文件的方法,其特征在于,步骤2)的详细步骤包括:
2.1)设置用于在AIGER格式文件中为每个引脚确定唯一的正整数表示的全局变量nvar,该变量的初值为2;定义队列tQ,用于存储网表中与初始输入引脚primary input相连的输入节点的编号;定义用于存储电路中初始输入引脚primary input编号的向量PIs;将所有节点层级数初始化为-1;
2.2)建立并打开AIGER格式的用于存储初始输入引脚信息的文件input.aag,设置指向向量PIs头部的迭代器PI;
2.3)判断迭代器PI是否指向向量PIs的尾部,如果是则跳转执行步骤2.9);否则,跳转执行步骤2.4);
2.4)判断与迭代器PI当前指向的初始输入引脚primary input相连的输入节点nodein是否被遍历完毕,如果已经结束遍历,则跳转执行步骤2.8);否则,跳转执行步骤2.5);
2.5)继续遍历与当前primary input相连的输入节点,判断队列tQ中能否找到当前输入节点nodein的编号,如果不能,则将当前输入节点nodein的编号插入队列tQ中;
2.6)将表示初始输入引脚primary input的全局变量nvar的值赋给当前输入节点nodein的输入引脚;
2.7)调用深度优先搜索函数搜索当前输入节点nodein的所有后续子节点,同时标记这些子节点的层级数,且标记层级数的原则是取按照不同路径计算得到层级数的最大值;跳转执行步骤2.4);
2.8)将全局变量nvar的值写入文件input.aag,然后将全局变量nvar的值自增2,将迭代器PI的值自增1;跳转执行步骤2.3);
2.9)关闭文件input.aag。
3.根据权利要求2所述的组合电路门级网表转化为AIGER格式文件的方法,其特征在于,步骤3)的详细步骤包括:
3.1)建立并打开AIGER格式的文件and.aag,该文件用于存储电路中节点之间的逻辑关系,预先初始化队列tQ,队列tQ用于存储与初始输入引脚primary input相连的输入节点nodein的编号;
3.2)判断队列tQ是否为空,如果队列tQ为空则跳转执行步骤4);如果队列tQ非空,则跳转执行下一步;
3.3)获取队列tQ的头元素并使其出队,出队的元素是某个输入节点nodein的编号;判断该元素对应的当前输入节点nodein的层级数是否为0,如果为0则跳转执行下一步;否则,跳转执行步骤3.2);
3.4)将步骤3.3)获取的元素插入队列Q中,将当前输入节点nodein转化为AIGER格式并存储到文件and.aag中;
3.5)判断当前输入节点nodein是否存在子节点,如果不存在子节点则跳转执行步骤3.2);否则,跳转执行步骤3.6);
3.6)判断当前输入节点nodein是否存在尚未遍历的子节点,如果不存在尚未遍历的子节点,则跳转执行步骤3.2);否则,跳转执行步骤3.7);
3.7)继续遍历当前输入节点nodein的子节点,对于遍历到的当前子节点nodein_c,将表示当前输入节点nodein输出引脚的变量值赋给当前子节点nodein_c的输入引脚,该输入引脚与nodein的输出引脚相连;跳转执行步骤3.6)。
4.根据权利要求3所述的组合电路门级网表转化为AIGER格式文件的方法,其特征在于,步骤3.4)中将当前输入节点nodein转化为AIGER格式并存储到文件and.aag的详细步骤包括:
3.4.1)对于具有m个输入(x1,x2,…,xm)和n个输出(y1,y2,…,yn)的当前输入节点nodein,根据真值表将每一个输出都表示成输入的主合取范式,输出yi的主合取范式表示为yi=M1∧M2∧…∧Mk
3.4.2)主合取范式中的每个极大项Mk都是m个命题变元的析取,极大项Mk=P1 *∨P2 *∨…Pm *,其中每个Pj *都为m个命题变元中的第j个命题变元Pj或者命题变元的否定┐Pj
3.4.3)针对共包含m个命题变元的极大项Mk,将Mk中的析取逐个转换为AIGER语句;对于Pi *∨Pj *,用“或门”表示该项,若Pi *和Pj *对应的变量为i和j,则该析取式对应的AIGER语句为“nvar U(i) U(j)”,其中nvar为全局变量,U(i)和U(j)为函数,当i为奇数时,U(i)的值为i减1,当i为偶数时,U(i)的值为i加1;将全局变量nvar加2,并将AIGER语句写入文件and.aag;用Pij *替换Pi *∨Pj *
3.4.4)将主合取范式yi=M1∧M2∧…∧Mk中的合取逐个转换为AIGER语句,对于Mi *∨Mj *,用“与门”表示该项,若Mi *和Mj *对应的变量为i和j,则该与门对应的AIGER语句为“nvar ij”,其中nvar为全局变量,将全局变量nvar加2,并将AIGER语句写入文件and.aag;用Mij替换Mi∧Mj
5.根据权利要求1~4中任意一项所述的组合电路门级网表转化为AIGER格式文件的方法,其特征在于,步骤4)的详细步骤包括:
4.1)判断队列Q是否为空,如果队列Q为空则跳转执行步骤4.9);如果队列Q非空,则跳转执行下一步;
4.2)获取队列tQ的头元素并使其出队,该元素是网表中某一节点node的编号;判断当前节点node是否存在子节点,如果不存在子节点则跳转执行步骤4.1);否则,跳转执行下一步;
4.3)判断当前节点node的子节点是否已经遍历完毕,如果已经遍历完毕,则跳转执行步骤4.1);否则,跳转执行下一步;
4.4)继续遍历当前节点node的子节点,针对遍历得到的当前子节点node_c,判断当前子节点node_c的层级数大于节点node的层级数加1或者当前子节点node_c已经转化为AIGER格式是否成立,如果成立则跳转执行步骤4.3);否则,跳转执行下一步;
4.5)将当前子节点node_c按照与前文所述相同的方法转化为AIGER格式并存储到文件and.aag;
4.6)判断当前子节点node_c是否存在子节点node_c_c,如果当前子节点node_c存在子节点,则跳转执行步骤4.7);否则,跳转执行步骤4.3);
4.7)判断当前子节点node_c的子节点是否已经遍历完毕,如果已经遍历完毕,则跳转执行步骤4.3);否则,跳转执行步骤4.8);
4.8)将表示当前子节点node_c输出引脚的变量值赋给表示其当前子节点node_c_c输入引脚的变量,该输入引脚与node_c的输出引脚相连;跳转执行步骤4.7);
4.9)关闭文件and.aag。
CN201811061965.6A 2018-09-12 2018-09-12 一种组合电路门级网表转化为aiger格式文件的方法 Active CN109359334B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811061965.6A CN109359334B (zh) 2018-09-12 2018-09-12 一种组合电路门级网表转化为aiger格式文件的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811061965.6A CN109359334B (zh) 2018-09-12 2018-09-12 一种组合电路门级网表转化为aiger格式文件的方法

Publications (2)

Publication Number Publication Date
CN109359334A CN109359334A (zh) 2019-02-19
CN109359334B true CN109359334B (zh) 2023-01-24

Family

ID=65350960

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811061965.6A Active CN109359334B (zh) 2018-09-12 2018-09-12 一种组合电路门级网表转化为aiger格式文件的方法

Country Status (1)

Country Link
CN (1) CN109359334B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115392160B (zh) * 2022-06-10 2024-04-09 无锡芯光互连技术研究院有限公司 一种电路图描述文件的格式转换方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5084824A (en) * 1990-03-29 1992-01-28 National Semiconductor Corporation Simulation model generation from a physical data base of a combinatorial circuit
CN105956178A (zh) * 2016-05-27 2016-09-21 西安电子科技大学 基于门级电路仿真的关键节点提取方法
CN107256303A (zh) * 2017-06-06 2017-10-17 西安电子科技大学 快速获取数字门级电路内部节点仿真状态的方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5084824A (en) * 1990-03-29 1992-01-28 National Semiconductor Corporation Simulation model generation from a physical data base of a combinatorial circuit
CN105956178A (zh) * 2016-05-27 2016-09-21 西安电子科技大学 基于门级电路仿真的关键节点提取方法
CN107256303A (zh) * 2017-06-06 2017-10-17 西安电子科技大学 快速获取数字门级电路内部节点仿真状态的方法

Also Published As

Publication number Publication date
CN109359334A (zh) 2019-02-19

Similar Documents

Publication Publication Date Title
Bryant Binary decision diagrams and beyond: Enabling technologies for formal verification
US7305637B2 (en) Efficient SAT-based unbounded symbolic model checking
Yang et al. Introduction to generalized symbolic trajectory evaluation
Soeken et al. Busy man's synthesis: Combinational delay optimization with SAT
EP1706833A2 (en) System and method for modeling, abstraction, and analysis of software
Manne et al. Computing the maximum power cycles of a sequential circuit
Pang et al. Positive Davio-based synthesis algorithm for reversible logic
de Haan et al. The parameterized complexity of reasoning problems beyond NP
CN109359334B (zh) 一种组合电路门级网表转化为aiger格式文件的方法
Philipp et al. Towards a Semantics of Unsatisfiability Proofs with Inprocessing.
Wang et al. Quantifier elimination in stochastic boolean satisfiability
Saluja et al. A robust algorithm for approximate compatible observability don't care (CODC) computation
Mokhov et al. Process windows
Rosenbloom Monotone real circuits are more powerful than monotone boolean circuits
Bandyopadhyay et al. ESOP-based synthesis of reversible circuit using improved cube list
Edalat et al. Domain theoretic second-order Euler's method for solving initial value problems
Taubin et al. Deadlock prevention using Petri nets and their unfoldings
Woods et al. Efficient solution of systems of Boolean equations
JP6788249B2 (ja) 生成装置、生成方法及びプログラム
Başçiftçi et al. Fast computation of the prime implicants by exact direct-cover algorithm based on the new partial ordering operation rule
Kahramanli et al. A new method based on cube algebra for the simplification of logic functions
Chandana et al. Algorithm Development Analysis: searching and sorting
Hu et al. Exploiting symmetries to speed up SAT-based Boolean matching for logic synthesis of FPGAs
EP1515251B1 (en) Efficient approaches for bounded model checking
Schmitt Antunes Practical Compilation of Quantum Programs

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant