RRAM-based Neuromorphic Computing: Data Representation, Architecture, Logic, and Programming