state_diagram sreg; state s0: when (phaseB==1 & phaseA==0) then (dir=1) else when (phaseB==0 & phaseA==1) then (dir=0) if (phaseB==1 & phaseA==0) then s2 else if (phaseB==0 & phaseA==1 then s1 else s=0 state s1: when (phaseB==0 & phaseA==0) then (dir=0) else when (phaseB==1 & phaseA==1) then (dir=0) if (phaseB==0 & phaseA==0) then s0 else if (phaseB==1 & phaseA==1 then s3 else s=1 state s2: when (phaseB==1 & phaseA==1) then (dir=1) else when (phaseB==0 & phaseA==0) then (dir=0) if (phaseB==1 & phaseA==1) then s3 else if (phaseB==0 & phaseA==0 then s0 else s=2 state s3: when (phaseB==0 & phaseA==1) then (dir=0) else when (phaseB==1 & phaseA==0) then (dir=0) if (phaseB==0 & phaseA==1) then s1 else if (phaseB==1 & phaseA==0 then s2 else s=3
Listing 1Sometimes a state-table format is more appropriate, as in this example for an optical encoder.