You must perform the functional verification at the appropriate level of granularity and make sure all important functional elements will be verified. The structure of a testbench and how it is managed will be the most important factors that determine how much maintenance or modifications will be required to achieve your functional verification goals. When properly designed, they can be highly reusable and configurable. In addition to verifying functions, bus-functional models can verify the timing of output signal timing. This verification can be decoupled from the functional verification to improve simulation performance.
Random generation involves more than calling a random number generator function.
Random generation must be properly designed to offer the proper level of controllability over all significant parameters, while minimizing the modifications necessary to add or tune constraints. Random generation can also be used to inject errors or protocol violations in bus-functional models. Self-checking strategies usually involve using scoreboarding techniques. In a data communication or telecommunication environment you can take advantage of the nature of the data carried through the designs to make self-checking simpler. Two complementary techniques are presented.