1. A method for co-simulation of hardware and software, comprising the steps of: determining hardware executable times for each of a plurality of functions included within an application code; inserting estimated timing annotations into each of the plurality of functions, wherein each of the estimated timing annotations corresponds to the determined hardware executable time for one of each of the plurality of functions; compiling the application code for simulation; and executing the compiled application code on a host computer system.