Round Robin Assertion

In reply to Ammu786:
// Hi bit has higher priority. Every 4 clocks, req bits gets shifted.
// May need a better approach on this point, Spec is vague on this


module top;
  timeunit 1ns;  timeprecision 100ps;    
  `include "uvm_macros.svh"   import uvm_pkg::*;
  bit[15:0]  reqbit; // debug 
  bit clk, reset_n;
  bit[15:0] req, rb_req, grnt; 
  initial forever #10 clk = !clk;
  event e1, e2, e3;  // debug
  // Round Robin every four clk 
  // rb_req becomes the requests for arbitration  
  initial forever begin // USE A DIFFERENT ALGORTIHM 
    repeat(4) @(posedge clk); 
    rb_req <= {req[0], req[15:1]};  // ??     
  end

  always @(posedge clk) begin 
    for (int i=15; i> 0; i--) begin
    	if (rb_req[i])
    		begin 
              -> e1; reqbit=i; 
    		  ap_rb:  assert property (@(posedge clk) ##1 grnt[i]==1'b1 && $onehot(grnt));  
              ap_rbg: assert property (@(posedge clk) ##1 grnt[i]==1'b1);  // for debug 
    		  break; 
    		end 
           
    end
  end

  ap_zero_req: assert property(@(posedge clk) req==0 |=> grnt==0); 
endmodule