Creating new instances of a covergroup using an array

You cannot declare an array of an embedded covergroup - this is an LRM restriction because the covergroup declared in a class is an anonymous type and the covergroup name becomes the instance variable. (See 19.4 Using covergroup in classes in the 1800-2012 LRM) You need define the covergroup outside the class

covergroup skew_val_cg (ref int skew_val_vl); // note the use of a ref argument
      coverpoint skew_val_vl {
       bins skew_range_1 = {[124:0]};
       bins skew_range_2 = {[325:125]};
       bins skew_range_3 = {[526:326]};
       bins skew_range_oor = {[1100:929]};
     }
endgroup : skew_val_cg
class my_class extends uvm_component;
 int skew_val_vl[20];
 skew_val_cg sv_cg[20];
  
function new(string name, uvm_component parent = null);
      super.new(name, parent);
      foreach(sv_cg[i])
        sv_cg[i] = new(skew_val_vl[i]);  
   endfunction
endclass