Software Fault-Tolerant Techniques for Softcore Processors in Commercial SRAM-Based FPGAs