Bidir.tioga
Last Edited by: Spreitzer, August 2, 1983 12:35 pm
Last Edited by: Barth, August 2, 1983 5:03 pm
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;
<similar for left side>}};
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 = {