Explain the use of fork and join in Verilog.
fork and join are used to initiate parallel execution of multiple tasks or procedural blocks in Verilog. When a fork is encountered, all subsequent blocks within it are executed concurrently, and join ensures that the simulation waits until all the blocks complete.