<> <> Imports BitOps, BitSwOps, Dragon; Open BitOps, BitSwOps, Dragon; MCtlFlagCtl: CELL[ <> Vdd, Gnd> <> PhAb, PhBb> VPValid, nVPValid, RPValid, nRPValid, RPDirty, nRPDirty, Master, nMaster, Shared, nShared, Victim, nVictim, TIP, nTIP, Broken, nBroken=BIT-S-X, <<>> <> MDataI> ShiftFeedBack, nShiftFeedBack, ShiftEqual, nShiftEqual, ShiftShift, nShiftShift> ShiftDataToFlagCtlBOOL, ReadEntry, WriteEntry> FlagSetShared, FlagRPDirtyVPValid, FlagFlagLatch, FlagResetVPValid, FlagSetFlags, FlagSetTIP, FlagResetTIP, FlagResetMaster> IsCleanBA> <<>> IF Resetb AND PhAb THEN { [VPValid, nVPValid] _ DriveBit[VPValid, nVPValid, FALSE]; [RPValid, nRPValid] _ DriveBit[RPValid, nRPValid, FALSE]; [RPDirty, nRPDirty] _ DriveBit[RPDirty, nRPDirty, FALSE]; [Master, nMaster] _ DriveBit[Master, nMaster, FALSE]; [Shared, nShared] _ DriveBit[Shared, nShared, FALSE]; [Victim, nVictim] _ DriveBit[Victim, nVictim, FALSE]; [TIP, nTIP] _ DriveBit[TIP, nTIP, FALSE]; [Broken, nBroken] _ DriveBit[Broken, nBroken, FALSE]; }; IF FlagSetShared THEN [Shared, nShared] _ DriveBit[Shared, nShared, TRUE]; IF FlagRPDirtyVPValid THEN { [VPValid, nVPValid] _ DriveBit[VPValid, nVPValid, vPValidBit]; [RPDirty, nRPDirty] _ DriveBit[RPDirty, nRPDirty, rPDirtyBit]; }; IF FlagFlagLatch THEN { vPValidBit _ EBFD[MDataI, 32, 30]; rPDirtyBit _ EBFD[MDataI, 32, 31]; }; IF FlagResetVPValid THEN [VPValid, nVPValid] _ DriveBit[VPValid, nVPValid, FALSE]; IF FlagSetFlags THEN { [VPValid, nVPValid] _ DriveBit[VPValid, nVPValid, TRUE]; [RPValid, nRPValid] _ DriveBit[RPValid, nRPValid, TRUE]; [RPDirty, nRPDirty] _ DriveBit[RPDirty, nRPDirty, NOT IsCleanBA]; [Master, nMaster] _ DriveBit[Master, nMaster, FALSE]; [Shared, nShared] _ DriveBit[Shared, nShared, LatchSharedAB]; [TIP, nTIP] _ DriveBit[TIP, nTIP, FALSE]; }; IF FlagSetTIP THEN [TIP, nTIP] _ DriveBit[TIP, nTIP, TRUE]; IF FlagResetTIP THEN [TIP, nTIP] _ DriveBit[TIP, nTIP, FALSE]; IF FlagResetMaster THEN [Master, nMaster] _ DriveBit[Master, nMaster, FALSE]; IF ShiftExecute AND WriteEntry THEN { [VPValid, nVPValid] _ DriveBit[VPValid, nVPValid, sVPValid]; [RPValid, nRPValid] _ DriveBit[RPValid, nRPValid, sRPValid]; [RPDirty, nRPDirty] _ DriveBit[RPDirty, nRPDirty, sRPDirty]; [Master, nMaster] _ DriveBit[Master, nMaster, sMaster]; [Shared, nShared] _ DriveBit[Shared, nShared, sShared]; [Victim, nVictim] _ DriveBit[Victim, nVictim, sVictim]; [TIP, nTIP] _ DriveBit[TIP, nTIP, sTIP]; [Broken, nBroken] _ DriveBit[Broken, nBroken, sBroken]; }; IF ShiftExecute AND ReadEntry THEN { snVPValid _ NOT EBFSS[VPValid]; snRPValid _ NOT EBFSS[RPValid]; snRPDirty _ NOT EBFSS[RPDirty]; snMaster _ NOT EBFSS[Master]; snShared _ NOT EBFSS[Shared]; snVictim _ NOT EBFSS[Victim]; snTIP _ NOT EBFSS[TIP]; snBroken _ NOT EBFSS[Broken]; }; IF ShiftShift THEN { snVPValid _ NOT ShiftDataToFlagCtl; snRPValid _ NOT sVPValid; snRPDirty _ NOT sRPValid; snMaster _ NOT sRPDirty; snShared _ NOT sMaster; snVictim _ NOT sShared; snTIP _ NOT sVictim; snBroken _ NOT sTIP; }; IF ShiftFeedBack THEN { snVPValid _ NOT sVPValid; snRPValid _ NOT sRPValid; snRPDirty _ NOT sRPDirty; snMaster _ NOT sMaster; snShared _ NOT sMaster; snVictim _ NOT sVictim; snTIP _ NOT sTIP; snBroken _ NOT sBroken; }; IF ShiftEqual THEN { sVPValid _ NOT snVPValid; sRPValid _ NOT snRPValid; sRPDirty _ NOT snRPDirty; sMaster _ NOT snMaster; sShared _ NOT snShared; sVictim _ NOT snVictim; sTIP _ NOT snTIP; sBroken _ NOT snBroken; ShiftDataToSequencer _ sBroken; }; <<>> ENDCELL