UpTo:

This is both a synchronous and an asynchronous temporal expression. It creates an implicit clock that is the result of the expression. The implicit clock ticks in coincidence with 'ClockToFollow' (ie c1 in the example) until 'KillerClock' (ie c2) ticks. Once c2 ticked, the implicit clock is dead. Note that the death is propagated by the coincidence relation so that, in the example, c3 dies at the same time than the implicit clock.

 

the CCSL specification:

/*
 * c3 = c1 upTo c2
 * @author: Julien DeAntoni
 * date : Tue jul 19th 2011
 */

ClockConstraintSystem  MySpec {
    imports {
        import "ccsl:kernel" as kernelLib ; //add the kernel constraints to your specification
    }
    entryBlock main

    Block main {

            Clock c1
            Clock c2
            Clock c3
            Expression c1UpToc2 = UpTo ClockToFollow -> c1, KillerClock -> c2 )
            Relation r1[Coincides](Clock1 -> c3, Clock2 -> c1UpToc2 )
         

        }
}

Simulation results:

An UpTo expression simulation is represented on the next picture. The two  first ticks of the implicit clock tick in coincidence with c1 until the first tick of c2. Once again, the resulting partial order is provided by TimeSquare and shown on the timing diagram.

On the bottom right, the clock domain is represented; here, the implicit clock is subClock of c1 and c2 kills the implicit clock.

a causess partially ordered solution (can be refined by temporal relations)