In your example, you are randomizing 5 times but only $display(ing) the last one. Since your pkt_type has a 50% chance of being bad, it’s possible that you will only $display a BAD_PKT. Additionally, if you simulate with the same random seed, you will always get the same result due to random stability.
If you $display each randomization result and run with different seeds, you should see a 50/50 mix of BAD_PKT and GOOD_PKT.