CPU design