hardware modeling techniques