论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
一个logic network实际上是一个netlist去掉nets后的网络,SIS就是用logic network网络所表示。在ABC,默认的表示是AIG网络,但logic network是一种很有效的中间过渡网络表示形式。在logic network网络中只保留 了PI/PO/latch/latch-input/latch-output这几种数据结构的名字,丢弃了内部node的名字。因为ABC采用AIG进行深层次的综合时,一些AIG操作很难保存AIG结点的名字,比如重写。在logic network中,nodes 能与另一个nodes直接相连。PI/PO端点与node直接相连。一个PO端点与一个PI端点如果有一样的名字和功能,能直接相连。一个PI端点可能有两个扇出但没有扇入。一个PO端点只有一个输入但没有输出。端点并不是一个node也没有逻辑功能。指向端点的指针集合不能通过一个内部node的DFS遍历方法来获取。在logic network网络中,指向PI/PO端点的指针集合储存在相应的数组。
2.1.3 AIG网络AIG网络是ABC中所采用网络的内部主要表示形式。AIG是ABC所特有的,其每个node是两输入的与门和一个扇入/扇出边,并且这个边有一个可选属性指示是否对该边进行取反。在构造AIG的同时,AIG能被压缩通过使用一级结构散列,它使得每一对边最多只能做为一个结点输入。这样,结构散列就能保证:对于每个与门结点,就没有其它带相同子结点的与门;没有仅一个输入的结点;每个与门的层次就能反应输入的层次。所有这些,使得操作AIGs比较操作Logic networks要快很多。
2.2 发现问题及其根本原因在研究的过程中,我们发现会产生ABC输入mv文件经过优化后的blif 文件的输入输出的个数与原先读入mv文件的输入输出个数的不一致问题。这是因为ABC输入mv文件时,主要经过了两步处理。输入mv时,ABC把mv文件转成了NetList,这一步是完全正确的,但在NetList转成AIG时,出现了问题,ABC把latch的输入当成了主输出,把latch的输出当成了主输入,从而造成了有几个latch,就多了几个输出输入。
笔者认为根本原因在于,ABC对mv文件中的时序电路支持得有限,在将时序转化为组合的过程中,也就是在NetList转成AIG时,采用了不正确的方式去除了Latch,从而造成了有几个latch,就多了几个输出输入。
3 问题的解决方案及生成blif
3.1 解决问题在尝试直接把NetList网络转成AIG网络时,来处理这个问题,都归于失败。最后不得不考虑在生成的中间网络上找解决方法。
首先,ABC处理mv文件的过程如下:
SHAPE \* MERGEFORMAT
然后,我们查看了ABC处理blif文件的过程,如下:
SHAPE \* MERGEFORMAT
经过讨论,我们试想能不能构造出如下的一种处理方法来解决问题:
内容来自www.nseac.com
经过研究,我们发现这条路是可行的。但在解决的过程中我们发现,.mv文件生成的NetList网络与.blif文件生成的NetList网络存在不同。在前面Mv2blif软件的实现方法中寻求灵感,我们试着将这两个相同类型网络转化,最后我们成功解决了这个问题,从而实现了ABC对.mv文件能直接进行处理,并且解决了输入输出个数与原先的输入输出个数的不一致的问题。最终实现了如下版本: