作者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
1F:推 yongling:没有检查 isNegEdge 06/20 20:04
2F:推 trancewu:请问ITE中究竟有哪些地方需要检查,我算到是四个... 06/20 20:38
3F:推 yongling:只要回传时有检查应该就 ok 了,但你上面的 code 没检查 06/20 21:04
4F:→ yongling:所以我猜测你的问题是出在这里.. 06/20 21:04
5F:→ yongling:当然 isNegEdge 要有作用,必须先写好 standardize() 06/20 21:10
6F:→ BattleRoyale:已经有检查过了还是一样的结果>< 06/20 21:43
7F:推 ric2k1:请确认你塞到 cache 去的是正确结果 06/20 22:06
8F:→ BattleRoyale:教授一语惊醒梦中人啊 DE出来了 谢谢! 06/20 22:24