Error Characterization And Correction Techniques For Reliable Stt-Ram Designs