推 ijb:先求有.再求好....五x製x 01/03 11:13
相信很多人可能看到期末專題的題目都傻眼了吧? BDD 聽都沒聽過怎麼動手呢?
建議一些攻略, 參考看看...
1. 如果你沒學過 BDD 的話, 建議將投影片前半部份弄懂, 如果必要, 配合 Randy
Bryant Trans. Comp 86 年的 原始 BDD paper, 或是 google 一下 "BDD, +ppt".
2. BDD implementation 的 slides 一定要弄懂, 強力推薦 Bryant DAC 90 的 paper.
寫的很清楚, 我的投影片就是根據這份 paper 整理的.
3. 先 make sure 你的 BDD 可以動. 有些 funtions 是 for speedup purpose 的,
如 BddManager::standardize(), computed cache 等等, 可以先不要理他們.
4. 完成以下必要的 funtions, 讓你的 BDD 可以順利的完成 ITE 的動作 ---
BddNode: operators =, &, &=, |, |=, ^, ^= (其中 '=' 比較 tricky 一點)
BddManager: ite (check terminal cases, move bubble, 還有記得處理 isNegEdge
= true 的情況), 有關 _bddMap 的 3 個 functions.
5. 完成 4 以後, 試試看 src/bdd/test/test.cpp !!! 改改看用別的 operators
是否還是正確?
(如果你打算期末考完才開始動的話, 正常人大概可以做到這裡...)
6. BddCmd: 完成 BSETVariable (先不管 -PI options), B{INV/AND/OR/NAND/NOR/XOR
/XNOR}, 以及 BREPort 等指令. 做更完整的測試, 如 de-Morgan 等等...
7. 完成 BddManager::ite() 的其他部分, 如 standardize(), computed cache 等等,
完成 BBUILD, 以及 BSETVariable -PI...
(做到這裡都 "大致" 正確的話, 你應該可以拿到還不錯的成績了!!)
8. 試著建立 C17.cir 的 BDD, 與 reference program 比較看看是否正確. OK 之後再
挑戰 C432 and C499. 如果你的程式正確的話, 這些電路應該都是幾秒就跑出來了.
9. 比較 C432.cir / C432_r.cir, 以及 C499.cir / C499_r.cir. They should be
functionally equivalent. If not, it's a bug in your program.
(做到這裡, 你應該已經可以拿到相當不錯的分數了!!)
10. 完成其他的指令, 如 BCOMpare, BSIMulate, BRESET, BDRAW, 等等.
11. 檢驗你程式的正確性與效能. 調一調看 Hash/Cache, 以及 variable ordering 等等.
12. 好好寫一份報告 (中英皆可).
(要衝最高分的話, 過去的高手大概做到這邊)
13. 如有餘力, 可以考慮 bonus 的 features.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.131.44
※ 編輯: ric2k1 來自: 140.112.21.240 (01/03 10:05)
※ 編輯: ric2k1 來自: 140.112.21.240 (01/03 10:14)