Algorithm level re-computing using implementation diversity: a register transfer level concurrent error detection technique