Regarding Driver and monitor

Is there any specific reason while driving the signal in the driver nonblocking assignment has been used but in case of monitor only blocking assignment has been used?

In reply to sougata_asic:

The driver is usually driving signals synchronous to a clock into the RTL and the NBAs are used to prevent races in the RTL, just like you need to prevent races between synchronous blocks in your RTL.

The monitor takes singlas from the RTL and sends transactions back into to testbench using the write method of an analysis port. The testbench uses TLM communication and is not synchronous to any clock.