Looks like a round robin arbiter. Why don't you run the testbench and look at the simulation waveforms. It will become clear what it's doing, which is priority encoding the requests and masking off the most recently serviced grant, then going on to the next request etc. rinse and repeat.