作者BattleRoyale (翔焰)
看板EE_DSnP
标题[建议] BDD攻略
时间Tue Jun 24 16:11:10 2008
倒数的十九个小时来写一份Bdd的攻略好了
大致上来个流程:
1.先完成BddNode的constructor和operator overloading
2.接着ITE的terminal cases和standardize 以及完成Hash
做到这样就可以测cpp档啦
如果写的都正确的话照理来说跑出来应该会是一样的 但ref会不一样就是了
3.完成这些後可以写cache和ITE的部份 注意isNegEdge的状况 以及
_computed.write和read
4.完成_bddMap三的相关的function cmd会用到
5.这些都写好就可以写cmd了...注意Band後面接的个数是没有限制的...
作苦工 就写吧
到这里应该可以完成
breset、bsetv、binv、band、bor、bnand、bnor、bxor、bxnor、brep了
6.cmd完成大致上bdd就完成了 接着写cirgate
cirgate只有cirg和cirb两部份要完成
7.cirg要用recursive 和作业六蛮类四的 只是多了个level的限制
同样是在setglobalref的设定和检查有没有重覆印过的dfs
8.cirb用了polyphorism,一开始就先从某个gate先去找有没有存在node
有存在就return、不存在就往它的fanin去呼叫build(),用recursive call
就OK啦
9.写到这边就只剩下bcompare、bsimulate和bdraw了
10.bcomepare...这...不用多说吧orz
11.bsimulate的意思 就是说 输入一串数字 例如001010101
最左边的数字代表support 1
最右边的数字代表support n
假设有一个function a&b a在第一层 b在第五层
那麽a就会填入0(第一个数字)
b就会填入1(第五个数字) 最後跑出结果了
这对已经写好整个bdd的人应该不是什麽难事
其他中间跟後面的就略过罗
12.最後一个bdraw 同样是recursive
注意有getlabel可以用...辛辛苦苦写了一个多小时的输出才发现原来教授写好了orz
要注意不要重覆印同样的node 写法可参考教授写的print
13.done!! 写份报告吧XD 应该没什麽遗漏的了吧Orz?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.4.234
1F:推 Ruger:有看有推 06/24 16:19
2F:推 dragonegg:有看大推 06/24 16:20
※ 编辑: BattleRoyale 来自: 140.112.4.234 (06/24 16:23)
3F:推 GriffeyKao:推!!!! 06/25 00:15
4F:推 ckaha:这篇真的是 佛心来的.. 06/25 01:38