Software and Firmware Co-development using High-Level Synthesis