看板 EE_DSnP 關於我們 聯絡資訊
我適用Ric的ref code 有個問題一直搞不懂 麻煩強者解答... 若現在有一個CirGate* g 要把它merge到另一個CirAigGate* aig的fanin0 請問要怎麼接起來?? 是用cirGateV接嗎? 如果是的話 是用 aig->setIn0((size_t) liter )嗎? liter是 g 的literal 因為在cirMgr.cpp的line79, 81裡面 setIn0(), setIn1()是要傳入一個gate literal的參數 但是這樣不能work欸 假如測資如下(opt06) aag 14 2 0 1 12 2 4 . . 10 0 8 8 6 1 . . 6 0 2 . aig->setIn0(0) //const 的literal是 0 這樣我跑出來的結果是 0 merging 3 3 merging 4 0 merging 5 但應該是 0 merging 3 0 merging 4 0 merging 5 請問為什麼會這樣呢? 這樣aig的fanin0沒有接到const 0 fanin0 的 _id也沒有改到 (應該要是0而不是3) 還是我的方法錯誤了? 謝謝指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.4.192 ※ 編輯: toshiba011 來自: 140.112.4.192 (01/15 02:17)
ts00834811:aig->setIn0(g->getIn0()())之類的? 01/15 02:21
ts00834811:上面打錯了應該是g自己的gateV 01/15 02:22
還是不懂欸 這樣有改到fanin0的cirGate*嗎? ※ 編輯: toshiba011 來自: 140.112.4.192 (01/15 02:31)
ric2k1:CirGateV = CirGate* + invPhase + floatPhase 01/15 02:34
ric2k1:所以 setIn0() 傳進去的是把 CirGate* (addres)轉乘 size_t 01/15 02:35
ric2k1:後再加上 invPhase, floatPhase 的值, 跟 literal ID 無關 01/15 02:36
ric2k1:另外也可以考慮使用 CirGateV::replace() 01/15 02:36
ric2k1:setIn0(0) 小心會 crash 哦!! (把 ptr address 設成 0) 01/15 02:38
想請問一下 那為什麼在cirMgr.cpp的line79, 81裡面 是傳literal? ※ 編輯: toshiba011 來自: 140.112.4.192 (01/15 02:39)
ric2k1:因為那時 gate 還沒建起來,我是先偷存 literal ID, 01/15 02:58
ric2k1:你 trace 一下 code 可以看到在後來 genConnection() 01/15 02:58
ric2k1:的時候我會根據 literal ID 把真正的 fanin gate ptr接上去 01/15 02:59
了解 明天再試試看 謝謝教授! ※ 編輯: toshiba011 來自: 140.112.245.82 (01/15 03:22)
anfranion:因為getIn0()等傳回來的是value,所以等於說你是要 01/15 09:44
anfranion:先local存一個CirGateV = gate->getIn0() 01/15 09:44
anfranion:接著呼叫local in0.replace(新的Gate ptr, in0.isInv()) 01/15 09:45
anfranion:接著再setIn0(in0())...老師overloading operator () 01/15 09:46
anfranion:去抓出裏頭的value... 01/15 09:46
anfranion://超級不直觀的啦啦啦T_T 01/15 09:48
sportsben:抱歉我還是不懂老師說setIn0(0)=>(把 ptr address 設成 01/15 11:41
sportsben:0 ) ?? 01/15 11:41
anfranion:在後面call setIn0(id) 程式基本上解讀是 01/15 11:54
anfranion:setIn(ptr) ptr = id .... 反正就是把id當address 01/15 11:55
anfranion:解讀 01/15 11:55
sportsben:喔喔!!!感謝你 01/15 13:19