Hardware and software design