\chapter{Introduction}
\thispagestyle{empty}
Electronic systems are an integral part of human life. They have
simplified our lives to a great extent. Starting from small systems
made of a few discrete components to the present day integrated
circuits (ICs) with millions of logic gates, electronic systems have
undergone a sea change. As a result, design of electronic systems too
have become extremely difficult and time consuming. Thanks to a host
of computer aided design tools, we have been able to come up with
quick and efficient designs. These are called {\tt Electronic Design
  Automation} or {\tt EDA} \index{EDA! tools}tools.

Let us see the steps involved in EDA.\index{EDA!design flow} In the
first stage, the specifications of the system are laid out. These
specifications are then converted to a design. The design could be in
the form of a circuit schematic, logical description using an HDL
language, etc. The design is then simulated and re-designed, if needed,
to achieve the desired results. Once simulation achieves the
specifications, the design is either converted to a PCB, a chip
layout, or ported to an FPGA. The final product is again tested for
specifications. The whole cycle is repeated until desired results are
obtained %\cite{eda}.

A person who builds an electronic system has to first design the
circuit, produce a virtual representation of it through a schematic
for easy comprehension, simulate it and finally convert it into a
Printed Circuit Board (PCB). \index{PCB} There are various tools
available that will help us do this.  Some of the popular EDA tools 
are those of {\tt Cadence}, {\tt Synopys}, {\tt Mentor Graphics} and 
{\tt Xilinx}. Although these are fairly comprehensive and high end,
their licenses are expensive, being proprietary.

There are some free and open source EDA tools like {\tt gEDA}, {\tt
  KiCad} and {\tt Ngspice}. The main drawback of these open source
tools is that they are not comprehensive. Some of them are capable of
PCB design (e.g. {\tt KiCad}) while some of them are capable of
performing simulations (e.g. {\tt gEDA}).  To the best of our
knowledge, there is no open source software that can perform circuit
design, simulation and layout design together. eSim is capable of
doing all of the above. 

eSim is a free and open source EDA tool.  It is an
acronym for \textbf{E}lectronics \textbf{Sim}ulation. eSim is created 
using open source software packages, such as KiCad, Ngspice and
Python. \index{KiCad} \index{Python} \index{Ngspice}
Using eSim, one can create circuit schematics, perform simulations
and design PCB layouts. It can create or edit new device models, and
create or edit subcircuits for simulation. 

Because of these reasons, eSim is expected to be useful for
students, teachers and other professionals who would want to study
and/or design electronic systems.  eSim is also useful for
entrepreneurs and small scale enterprises who do not have the
capability to invest in heavily priced proprietary tools.

This book introduces eSim to the reader and illustrates all the
features of eSim with examples. The software architecture of eSim is
presented in \chapref{chap2} while \chapref{chap3} gives the user step 
by step instructions to install eSim on a typical computer system. 
\chapref{chap4} gets the user started with eSim. It takes them through 
a tour of eSim with the help of a simple RC circuit example. 
\chapref{chap5} illustrates how to create the circuit schematic in esim 
and \chapref{chap6} explains simulating the circuit schematic. The 
advanced features of eSim such as Model Builder and Subcircuit Builder 
are covered in \chapref{chap7} and \chapref{chap8} respectively. 
Additional features in eSim like NGHDL, Makerchip-NgVeri and 
OpenModelica are covered in \chapref{chap9}, \chapref{chap10} and \chapref{chap11} 
respectively. \chapref{chap12} illustrates how to use eSim for solving 
circuit simulation problems. The last chapter, \chapref{chap13} explains 
how eSim can be used to do PCB layout.

The following convention has been adopted throughout this manual.All
the menu names, options under each menu item, tool names, certain
points to be noted, etc., are given in \textit{italics}.  Some
keywords, names of certain windows/dialog boxes, names of some
files/projects/folders, messages displayed during an activity, names
of websites, component references, etc., are given in {\tt typewriter}
font. Some key presses, e.g. {\tt Enter} key, {\tt F1} key, {\tt y}
for yes, etc., are also mentioned in {\tt typewriter} font.
