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 = {

���t��Bidir.tioga
Last Edited by: Spreitzer, August 2, 1983 12:35 pm
Last Edited by: Barth, August 2, 1983 5:03 pm
�ÊÐ��˜�J™J™2J™-˜šÏkœœ˜Jšœ+˜+J˜�——˜šœœœ˜Jšœ*˜*Jšœ,˜,J˜�——˜Jš	œœœœ	œ˜,Jš	œœœœ	œ˜-J˜�—˜šœœ˜Jšœ
œ˜Jšœ
œ
˜J˜�——˜J˜J˜Jš	œœœœ	œ˜;Jš	œœœœ	œ˜<J˜�—˜šœœœ˜Jšœœ˜!Jšœœ˜!Jšœ
˜
J˜Jšœ˜J˜�——˜J˜J˜J˜�—˜J˜#šœ
œ˜Jš	œ	œœœ	œ˜2Jš	œ	œœœ	œ˜2—šœœœ	˜!Jš	œ	œœœ	œ˜2Jš	œ	œœœ	œ˜2Jšœ˜	—J˜�—˜šœ
œ˜Jšœœ˜"Jšœœ˜$—J˜�—˜šœ
œ˜J˜Jš	œ	œœœ	œ	˜5Jš	œ	œœœ	œ	˜5—šœœœ	˜!J˜Jš	œ	œœœ	œ	˜5Jš	œ	œœœ	œ	˜5Jšœ˜	—J˜�—˜šœ
œ˜Jšœ	œ˜*Jšœ	œ˜*Jšœ˜Jšœ˜Jšœ	œ˜*Jšœ	œ˜*Jšœ˜Jšœ˜—šœœœ	˜!Jšœœ˜&Jšœœ˜&Jšœ	œ˜*Jšœ	œ˜*Jšœœ˜&Jšœœ˜&Jšœ	œ˜*Jšœ	œ˜*Jšœ˜	J˜�——˜J˜—J˜�˜JšœH˜HJšœH˜HJ˜�J˜�—J˜%J˜�Jšœe˜eJ˜�˜JšœH˜HJšœK˜KJšœH˜HJšœK˜K—J˜�˜J˜�——�…—����Þ��"��