Use a FSM with states for the possible light patterns. Cycle through
those states and assign the according lights value afterwards.
BTW1:
one counter for the delay is eoungh when using a FSM for the states.
BTW2:
A question arises when seeing this:
input NS_VEHICLE_DETECT,
input EW_VEHICLE_DETECT,
What is the idle state of those traffic lights?
NS and EW red?
Or is the main street NS green and the lower traffic street EW red?
If the second (which would be more comfortable, but it would not force
main street drivers to reduce speed..) then you also could ignore the NS
vehicle detection.