// integer semantics version of abstract firewire protocol // gxn 23/05/2001 nondeterministic // largest constant the clock of the system is compared to const int kx = 167; module abstract_firewire // clock of the system x : [0..168]; // local state s : [0..9]; // 0 - start_start // 1 - fast_start // 2 - start_fast // 3 - start_slow // 4 - slow_start // 5 - fast_fast // 6 - fast_slow // 7 - slow_fast // 8 - slow_slow // 9 - done // initial state [] (s=0) & (x<36) -> (x'=min(x+1,kx+1)); [] (s=0) -> 0.5 : (s'=1) + 0.5 : (s'=4); [] (s=0) -> 0.5 : (s'=2) + 0.5 : (s'=3); // fast_start [] (s=1) & (x<36) -> (x'=min(x+1,kx+1)); [] (s=1) -> 0.5 : (s'=5) & (x'=0) + 0.5 : (s'=6) & (x'=0); // start_fast [] (s=2) & (x<36) -> (x'=min(x+1,kx+1)); [] (s=2) -> 0.5 : (s'=5) & (x'=0) + 0.5 : (s'=7) & (x'=0); // start_slow [] (s=3) & (x<36) -> (x'=min(x+1,kx+1)); [] (s=3) -> 0.5 : (s'=6) & (x'=0) + 0.5 : (s'=8) & (x'=0); // slow_start [] (s=4) & (x<36) -> (x'=min(x+1,kx+1)); [] (s=4) -> 0.5 : (s'=7) & (x'=0) + 0.5 : (s'=8) & (x'=0); // fast_fast [] (s=5) & (x<85) -> (x'=min(x+1,kx+1)); [] (s=5) & (x>=76) -> (s'=0) & (x'=0); [] (s=5) & (x>=40) -> (s'=9) & (x'=0); // fast_slow [] (s=6) & (x<167) -> (x'=min(x+1,kx+1)); [] (s=6) & (x>=123) -> (s'=9) & (x'=0); // slow_fast [] (s=7) & (x<167) -> (x'=min(x+1,kx+1)); [] (s=7) & (x>=123) -> (s'=9) & (x'=0); // slow_slow [] (s=8) & (x<167) -> (x'=min(x+1,kx+1)); [] (s=8) & (x>=159) -> (s'=0) & (x'=0); [] (s=8) & (x>=123) -> (s'=9) & (x'=0); // done [] (s=9) -> (s'=9); endmodule