看板 EE_DSnP 關於我們 聯絡資訊
倒數的十九個小時來寫一份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