作者BattleRoyale (翔燄)
看板EE_DSnP
標題[問題] cache與invert
時間Fri Jun 20 19:24:41 2008
原本測試AND OR NAND NOR XOR NXOR都是沒有問題的
可是在放了cache以後 變得很奇怪
AND OR NAND NOR 都正常
可是
如果我連續兩次XOR
就會變成
bdd> bxor d a b
bdd> bxor e a b
bdd> brep c
[2](-)
[1](+)
[0](+)
[0](-) (*)
[1](-) (*)
==> Total #BddNodes : 3
bdd> brep d
[2](+)
[1](+)
[0](+)
[0](-) (*)
[1](-) (*)
非常奇怪的最上面的[2]的bubble居然反了過來@@"
同樣的狀況
bdd> bxor g b a
bdd> brep g -addr -ref
[2](-) 0x808c0a0 (1)
[1](+) 0x80891e8 (5)
[0](+) 0x80890d0 (133)
[0](-) 0x80890d0 (133) (*)
[1](-) 0x80891e8 (5) (*)
==> Total #BddNodes : 3
bdd> bxnor h b a
bdd> brep h -addr -ref
[2](-) 0x808c0a0 (1)
[1](+) 0x80891e8 (5)
[0](+) 0x80890d0 (133)
[0](-) 0x80890d0 (133) (*)
[1](-) 0x80891e8 (5) (*)
==> Total #BddNodes : 3
這次是XOR和XNOR變成一樣了 囧
問題是同樣的狀況 AND OR NAND NOR都不會發生
且加cache之前也是對的
我在讀computed table時是這樣寫的:
BddCacheKey key(f(),g(),h());
size_t r=_computedTable.read(key);
if(r){
ret=BddNode(r);
return ret;
}
請問是哪裡有錯嗎?
已經de了一個多小時找不出問題
麻煩大家了!!
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.4.234
推 yongling:沒有檢查 isNegEdge 06/20 20:04
推 trancewu:請問ITE中究竟有哪些地方需要檢查,我算到是四個... 06/20 20:38
推 yongling:只要回傳時有檢查應該就 ok 了,但你上面的 code 沒檢查 06/20 21:04
→ yongling:所以我猜測你的問題是出在這裡.. 06/20 21:04
→ yongling:當然 isNegEdge 要有作用,必須先寫好 standardize() 06/20 21:10
→ BattleRoyale:已經有檢查過了還是一樣的結果>< 06/20 21:43
推 ric2k1:請確認你塞到 cache 去的是正確結果 06/20 22:06
→ BattleRoyale:教授一語驚醒夢中人啊 DE出來了 謝謝! 06/20 22:24