Re: [问题] hw5

楼主: ric2k1 (Ric)   2010-05-19 11:20:47
※ 引述《kalawang ()》之铭言:
: ※ 引述《ric2k1 (Ric)》之铭言:
: : Gate::isWatchedValue(newIdx)
: : 就是去检查第 newIdx 个 watch pin (in _wCandidates) 的 value
: : 是否 = watched value
: : 比方说 3-input AND gate, 这个 gate 本身将会放在他的 _wCandidates 的第 0 个位置
: : 而其他三个 fanins 会放在第 1 ~ 3 个位置.
: : 会到这里表示要 update watch pin 但是找不到
: : (没有其他非 watch 的 pin 都是非 watch value)
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 这边是指所有非watched(!=otherPin Idx)
: 的其他pin都是watch value吗?
: eg. (For OR gate, all fanins are 0 and fanout is 1)
Yes, 除了那两个 watched pins 之外, 其他的都是 watch value
: : 所以传入的 newIdx 必须 restore 回原来的值
: : 同时去检查另一个 watch pin,
: : 如果它不是 watch value (e.g. 0 or x for AND's fanin),
: : 那么就是著去 generate new implication (genIndexImp(otherIdx)),
: : 如果 other watch pin 的值是 known (e.g. 0 for AND's fanin)
: : otherwise (e.g. x for AND's fanin)
: : 相反的,如果另一个 watch pin 也是 watch value 的话,
: : 则所有的 pins 都是 watch value
: : (i.e. AND gate has value 0 and all its fanins have value 1's)
: : 因为 OR gate 的 output 是 watch 1,
: : 所以如果 output 也是个 watched pin 的话,
: : 自己 value 变成 1 的时候也要通知自己去 update watch pin
: : 所以自己会在自己的 watching-1 list 上面
: updateWatch()是为了做indirect implication吧(吗)?
Yes.
: 如果现在有个direct implication
: (for eg. AND gate output 1 => all fanin's are ones)
: 会不会trigger updateWatch()这个function
会, 只要一个 gate 的 value 从 unknown 变成 known,
就必须将它的 watching list 里头所有的 gates 呼叫 updateWatch()
: 是不是要看AND的每个fanin 是否有被它自己的gate
: 放在watching-1 (for eg. OR) or (watching-known for XOR) 里呢?
不用检查吧!
就直接对所有的 fanins 将他们的 _watching_1 list 里头的所有 gates
呼叫 updateWatch()
: 再请问如果一个watched pin得到non Watch value(也就是有direct implication)
: (for eg 0 for AND gate fanin) 是不是不用update这个pin的watch pointer
: to a new index?
是的, 不用 update.
作者: kalawang (Out)   2010-05-19 14:07:00
谢谢回应

Links booklink

Contact Us: admin [ a t ] ucptt.com