1. A computer-implemented method for implementing a design having both a hardware portion and a software portion, comprising: using at least one processor to perform a process, the process comprising: receiving a specification for the design; generating one or more models at multiple levels of abstraction for the hardware portion and at least one model for the software portion by modeling at least one interaction between the hardware portion and the software portion on both the at least one model for the software portion and at least one model in the one or more models at the multiple levels of abstraction for the hardware portion; generating an interface between the software portion and the hardware portion to handle interactions between the software portion and the multiple levels for the hardware portion, wherein the interface converts semantics between the software portion and the hardware portion; and verifying the design using the one or more models by using the interface.