作者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
推 Ruger:有看有推 06/24 16:19
推 dragonegg:有看大推 06/24 16:20
※ 編輯: BattleRoyale 來自: 140.112.4.234 (06/24 16:23)
推 GriffeyKao:推!!!! 06/25 00:15
推 ckaha:這篇真的是 佛心來的.. 06/25 01:38