Hardware-Software Co-Design