Fault Tolerant and Fault Testable Hardware Design