Why use "wire logic" as the data type for the interface signals?

I’m seeing some interfaces using the data type wire logic for their interface signals like the one below:


interface s3 ();
  wire logic VP;
  wire logic VM;

endinterface : s3

May I know what’s the reason for this?

I tried to do some research and these are the things I found:
1.) logic is for driving asynchronous signal.
2.) wire (or net) is for driving synchronous signal.

So if we combine them both, does that mean that a wire logic interface signal can be driven both asynchronously and synchronously?

The reason why I’m asking this is because I can’t drive the wire logic interface signal in my driver.
I’m using vif.VP <= 1’b1 but I got a compile error saying that a net is not a legal value in this context. But when I tried to remove the wire and just use logic, then I’m not getting any compile errors.

So now, I’m confused why “wire logic” is used if you can’t even assign values to those signals from your driver?

Thanks.

Regards,
Reuben

In reply to Reuben:

wire logic VP;

is equivalent to

wire VP;

See Usage of Var | Verification Academy and http://go.mentor.com/wire-vs-reg