  While Moore's law has driven exponential computing power expectations, its
nearing end calls for new avenues for improving the overall system performance.
One of these avenues is the exploration of alternative brain-inspired computing
architectures that aim at achieving the flexibility and computational
efficiency of biological neural processing systems. Within this context,
neuromorphic engineering represents a paradigm shift in computing based on the
implementation of spiking neural network architectures in which processing and
memory are tightly co-located. In this paper, we provide a comprehensive
overview of the field, highlighting the different levels of granularity at
which this paradigm shift is realized and comparing design approaches that
focus on replicating natural intelligence (bottom-up) versus those that aim at
solving practical artificial intelligence applications (top-down). First, we
present the analog, mixed-signal and digital circuit design styles, identifying
the boundary between processing and memory through time multiplexing, in-memory
computation, and novel devices. Then, we highlight the key tradeoffs for each
of the bottom-up and top-down design approaches, survey their silicon
implementations, and carry out detailed comparative analyses to extract design
guidelines. Finally, we identify necessary synergies and missing elements
required to achieve a competitive advantage for neuromorphic systems over
conventional machine-learning accelerators in edge computing applications, and
outline the key ingredients for a framework toward neuromorphic intelligence.
