<> <> <> TransistorR: RProc = { IF gate.level = H THEN [source.r, drain.r] _ [drain.r, source.r]}; TransistorUD: UDProc = { IF gate.level # L THEN { [source.u, drain.u] _ [drain.u, source.u]; [source.d, drain.d] _ [drain.d, source.d]}}; MemCellRInit: RInit = { r.r _ IF l.level = H THEN strong1 ELSE weak; l.r _ IF r.level = H THEN strong1 ELSE weak}; MemCellR: RProc = { IF s.level = H THEN rb.r _ r.r _ MAX[rb.r, r.r]; lb.r _ l.r _ MAX[lb.r, l.r]}; MemCellUDInit: UDInit = { r.u _ Block[weak, r.r]; l.u _ Block[weak, l.r]; r.d _ Block[IF l.level # L THEN strong1 ELSE weakest, r.r]; l.d _ Block[IF r.level # L THEN strong1 ELSE weakest, l.r]}; MemCellUD: UDProc = { IF s.level # L THEN { r.u _ MAX[r.u, Block[rb.u, r.r]]; r.d _ MAX[r.d, Block[rb.d, r.r]]; rb.u _ r.u rb.d _ r.d; }}; MemCellFinal: FinalProc = { r.level _ Levelize[r.u, r.d]; l.level _ Levelize[l.u, l.d]}; MemColRInit: RInit = { [s, goodAddress] _ Intize[address]; IF goodAddress THEN { r[s].r _ IF l[s].level = H THEN strong1 ELSE weak; l[s].r _ IF r[s].level = H THEN strong1 ELSE weak} ELSE FOR s: Address IN Address DO r[s].r _ IF l[s].level = H THEN strong1 ELSE weak; l[s].r _ IF r[s].level = H THEN strong1 ELSE weak; ENDLOOP}; MemColR: RProc = { IF goodAddress THEN { r[s].r _ rb.r _ MAX[rb.r, r[s].r]; l[s].r _ lb.r _ MAX[lb.r, l[s].r]}}; MemColUDInit: UDInit = { IF goodAddress THEN { r[s].u _ l[s].u _ weak; r[s].d _ IF l[s].level # L THEN strong1 ELSE weakest; l[s].d _ IF r[s].level # L THEN strong1 ELSE weakest} ELSE FOR s: Address IN Address DO r[s].u _ l[s].u _ weak; r[s].d _ IF l[s].level # L THEN strong1 ELSE weakest; l[s].d _ IF r[s].level # L THEN strong1 ELSE weakest; ENDLOOP}; MemColUD: UDProc = { IF goodAddress THEN { r[s].u _ MAX[r[s].u, Block[rb.u, r[s].r]]; r[s].d _ MAX[r[s].d, Block[rb.d, r[s].r]]; rb.u _ r[s].u; rb.d _ r[s].d; l[s].u _ MAX[l[s].u, Block[lb.u, l[s].r]]; l[s].d _ MAX[l[s].d, Block[lb.d, l[s].r]]; lb.u _ l[s].u; lb.d _ l[s].d} ELSE FOR s: Address IN Address DO rb.u _ MAX[rb.u, Block[r[s].u, rb.r]]; rb.d _ MAX[rb.d, Block[r[s].d, rb.r]]; r[s].u _ MAX[r[s].u, Block[rb.u, r[s].r]]; r[s].d _ MAX[r[s].d, Block[rb.d, r[s].r]]; lb.u _ MAX[lb.u, Block[l[s].u, lb.r]]; lb.d _ MAX[lb.d, Block[l[s].d, lb.r]]; l[s].u _ MAX[l[s].u, Block[lb.u, l[s].r]]; l[s].d _ MAX[l[s].d, Block[lb.d, l[s].r]]; ENDLOOP}; MemRInit: RInit = { s _ StrictInt[address]}; MemR: RProc = { IndexStrengthsByDBwordOfBool[mem[s], [weak, strong1], DESCRIPTOR[r.rb]]; IndexStrengthsByDBwordOfBool[mem[s], [strong1, weak], DESCRIPTOR[r.lb]]} rb: PACKED ARRAY [0..32) OF Strength; IndexStrengthsByDBwordOfBool[DWord, ARRAY BOOL OF Strength, DESCRIPTOR FOR PACKED ARRAY OF Strength]; MemUD: UDProc = { IndexStrengthsByDBwordOfBool[mem[s], [weakest, weak], DESCRIPTOR[u.rb]]; IndexStrengthsByDBwordOfBool[mem[s], [strong1, weakest], DESCRIPTOR[d.rb]]; IndexStrengthsByDBwordOfBool[mem[s], [weak, weakest], DESCRIPTOR[u.lb]]; IndexStrengthsByDBwordOfBool[mem[s], [weakest, strong1], DESCRIPTOR[d.lb]]} MemFinal: FinalProc = {