1. A method of simulating comprising: partitioning a simulator into a functional component and a behavior prediction component; executing the functional and behavioral prediction components in parallel; using the execution path of the functional component to drive the behavior prediction component; and with the behavior prediction component changing the execution path of the functional component.