1. A method for executing a hardware simulation and verification solution which includes a simulation kernel to simulate changes in signal values, and a functional coverage module to check coverage for a design under test (DUT), the method comprising: executing the simulation kernel on first processing circuitry, thereby causing the first processing circuitry to: generate value change data which represents changes in a set of signal values which are used in a functional coverage model for the DUT; and store the value change data so that second processing circuitry, which is different from the first processing circuitry, is able to access the value change data; executing the functional coverage module on the second processing circuitry, thereby causing the second processing circuitry to: determine a functional coverage metric based on the functional coverage model and the value change data; and report the functional coverage metric to a user; and wherein source files which describe the DUT are compiled to obtain the simulation kernel, wherein the simulation kernel exposes a callback interface which is used to install callback functions which are invoked when specific events occur, wherein compiling the source files includes installing a first callback function which is invoked whenever the simulation kernel generates the value change data, and wherein the first callback function includes instructions for collecting the value change data and instructions for storing the value change data so that the second processing circuitry can access the value change data.