In reply to Luca Iovinella:
This is because unsized numeric literals are implicitly 32-bit integer types. The result of 2**64 is 32 bit number 32’b0. And you should not be using int or longint if your values are unsigned.
typedef bit [63:0] uint64_t;
covergroup cg_val (string name, uint64_t min, max) with function sample (uint64_5 value);
cp_value: coverpoint value
{
bins min = {min};
bins val[10] = {[min+1 : max-1]};
bins max = {max};
}
endgroup: cg_val