1. A method of co-simulating a digital circuit using a simulation engine which communicates with at least one first programming language by means of a foreign language interface and which communicates directly with at least one second programming or hardware description language, comprising the steps of: (a) providing at least one first model of at least one first part of the digital circuit in at least one high-level hardware description language which supports concurrent processes communicating with each other: (b) converting the at least one first model to at least one software model in the at least one first language; (c) providing at least one second model of at least one second part of the digital circuit in the at least one second language; and (d) applying the at least one software model in the at least one first language and the at least one second model in the at least one second language to the simulation engine.