作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [更正] Final project...
时间Sat Jun 20 15:53:45 2009
Comment 的错误, 请自行更正! 下次有较严重的错误时再重新 update refere code...
============================================================================
[06/20/2009] (3:45pm) BddNode::~BddNode() comment 的错误
这行 comment:
// Destructor is the only place to decrease _refCount
是错的, 请直接删除!
BddNode::operator = (const BddNode&) 也应该要 decRefCount()
(典型的修改了 code 忘记改 comment, 而且此问题应该存在好几年了吧!! XD)
[06/14/2009] (1:30am) Hash::forceInsert() 的 prototype
由 "void forceInsert(const HashKey& k, HashData d) { }"
改成 "void forceInsert(const HashKey& k, const HashData& d) { }"
> Affected file: myHash.h
> Updated: bdd.tgz
[06/14/2009] (1:30am) CIRGate 不能 report ID = 0 的 gate
已修正.
> Affected file: libcirref-*.a
> Updated: bdd.tgz
[06/14/2009] (1:30am) BDRAW 的 error message
修正 2129 篇所提到的问题:
bdraw 14 14.dot //假设gateID只有到13
ref的结果是:
Error: "14" is not a legal BDD node!!
Illegal option!! (14.dot)
但是第二行应该是Illegal option!! (14)比较合理
> Affected file: bddCmd.cpp
> Updated: bdd.tgz
[06/14/2009] (1:30am) 没写 BddMgr::standardize(), BDD 也应该要对
只是会比较慢而已.
但是原来的 ref code 如果你没有写 BddMgr::standardize() 有些 case 可能会错.
这个原因说来有点复杂...
如果有照讲义的方式去 standardize ITE 的 parameters 的话,
那麽 BddMgr::ite() 里面的:
BddNode t = ite(fl, gl, hl);
应该永远不会产生 negative phase (因为 fl and gl 都没有 bubbles).
也就是说, 原先 code 里的这行:
if (t.isNegEdge()) { ...
应该永远不会成立 (i.e. if() { ... } 里面的 code 是 redundant code),
所以 "_computedTable.write(k, ret_t);" 写在:
if (isNegEdge)
ret = ~ret;
之前是 OK 的.
因此, 如果你的 standardize() 没有写, 或是没写对的话,
你的 "if (t.isNegEdge())" 就有可能会成立, 而建出错误的 BDD...
请 download 新版的 bdd.tgz 来参考新版的 bddMgr.cpp,
"BddMgr::ite()" 的 code 里头加上了一个 compiler directive:
"#define DO_STD_ITE 0"
如果你还没做好 standardize(), 它会帮你 take care 好
"if (t.isNegEdge())" 成立时所会造成的问题.
等你 standardsize() 写好之後, 你可以将它改成:
"#define DO_STD_ITE 1"
这样子它会去 assert "if (t.isNegEdge())" 不应该成立因而少 run 一些
redundant code.
当然, 不改 (i.e. #define DO_STD_ITE 0) 应该也是不会错的.
> Affected file: bddMgr.cpp
> Updated: bdd.tgz
[06/10/2009] (11:30pm) 请在 "bddMgr.cpp" 的 "BddMgr::init()" 加上一行
void
BddMgr::init(size_t nin, size_t h, size_t c)
{
_uniqueTable.init(h);
_computedTable.init(c);
// This must be called first
BddNode::setBddMgr(this);
BddNodeInt::_terminal = uniquify(0, 0, 0);
BddNode::_one = BddNode(BddNodeInt::_terminal, BDD_POS_EDGE);
BddNode::_zero = BddNode(BddNodeInt::_terminal, BDD_NEG_EDGE);
_supports.resize(0); // Fixed: 06/10/2009
_supports.reserve(nin+1);
_supports.push_back(BddNode::_one);
for (size_t i = 1; i <= nin; ++i)
_supports.push_back(BddNode(BddNode::_one(), BddNode::_zero(), i));
}
黄色那行.
不加的话, 照攻略写到第 (vi) 步你的 testBdd 应该会当掉!
除非你的 BddMgr::reset() (攻略第 (viii)) 已经写完.
(不过其他 BDD command 可能是 OK 的).
> Affected file: bddMgr.cpp
> Updated: bdd.tgz
[06/06/2009] (4:50pm) CIRSETVar 忘记reset CirMgr::_bddVarOrder
> 更正: CirMgr constructor ==> 必须initialize _bddVarOrder to PI_NONE
> In "CirSetVarCmd::exec()", need to call "cirMgr->resetBddVarOrder()"
when "Error: support size is smaller than the circuit input size!!"
> Affected files: lib/libcirref-*.a, ref/bdd-*, src/cir/cirMgr.h
> Updated: bdd.tgz, ref/bdd-32, ref/bdd-64, BDD project.htm
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.42.52
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.46.125
※ 编辑: ric2k1 来自: 61.224.46.125 (06/11 00:02)
1F:推 chwt2788:bdd> cirg 0 -fani 0 好像不能印编号0的gate? 06/11 13:27
2F:→ chwt2788:试其他编号都可以 06/11 13:27
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.40.24
3F:→ ric2k1:Hello Colby~~~ the 4th item is what you were talking 06/14 01:45
4F:→ ric2k1:about 3 months ago, right? 06/14 01:46
5F:→ ric2k1:BDD project.htm 也已更新 06/14 01:57
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.46.108