The rapid and disruptive changes anticipated in hardware design over this next decade necessitate a more agile development process, such as the hardware-software co-design processes developed for rapid product development in the embedded space. This article will describe the structure of the co-design process as applied to supercomputing systems, introduce the role of architectural simulation and code analysis to enable co-design, and describe the CoDEx project that is developing tools to accelerate the iterative co-design cycle for the DOE exascale computing program.