History of VLSI
History of VLSI
History of VLSI
The electronic industry has achieved a phenomenon growth over the last few decades.
Mainly due to rapid advances in Integration technology and large stage system design. Typically
the required computational and information processing power of these applications is the driving
force of the fast development of this field.
Evolution of logic complexity in integrated circuit:
Here are some ERAs or generations on integrated circuits.
In Electronics, the first device was none other than Vacuum tube. After that the first
transistor was developed in 1947 in Bells laboratory. Since then electronics field has never
looked back.
First integrated circuit is designed with 2 transistors on a single chip. Then multiple more
than 2 transistors after that connection problem occurred. Multiple connection taking too much
space on chip so multilayer PBCs are introduced. But all these connections and circuits or
design are of discrete type. And main disadvantage of discrete design was these designs were
unreliable i.e. lose connection, heating problems, humidity, corrosion etc .
To overcome these problems new trend was introduced monolithic integration. The
monolithic integration of a large number of functions on a single chip usually provides:
As technology advances feature size of a transistor is reduces. Feature size is the length
between source and drain. In 1970-80s minimum feature size was 2m and it is expected
around 0.3 m around 2000. The actually development is a technology, however, has far
exceeded these expectations. A minimum feature size of 0.25 m was achieved by 1993.
The first 64Mb DRAM and the INTEL Pentium microprocessor chip contains more than
3 million transistors were already available by 1994. The first 4GB DRAM based on 0.15 m
manufacturing technology was announced in early 1997. Current market feature size is around
22nm. INTEL fab has he minimum feature size of 14nm.
MOORES LAW:
the number of transistors per chip has continued to increase at an exponential rate over
the last three decades, and conforming the Gordon Moores prediction on the growth rate of the
chip complexity, Which was made in early 1960s (Moores law).
Moore predicted that the number of transistors on chip doubles every 18 to 24 months.
He also predicted that semiconductor technology doubles its effectiveness every 18 months.
What is VHDL?
VHDL: VHSIC Hardware Descriptive language.
VHSIC: Very High Speed Integrated Circuits.
Note: Normally there are one or two definitions for VHSIC according to local authors, Very
High Scale Integrated Circuits and above one. But Very High Speed Integrated Circuits is the
correct one. Hardware description language can be used to model a digital system at many levels
of abstraction ranging from the algorithmic level to the gate level.
The conventional software languages like C, C++, java etc. are all about sequential
execution, i.e. In JAVA each statement executes first then the next statement executes.
This is nothing but the sequential programming. But VHDL supports both concurrent as
well as sequential programming. Concurrent means more than one statement can be
executed at single instance.
While programming in conventional languages we dont know what is happening at the
hardware level for the logic we are implementing in the program. EX. if I am
programming a simple addition function in C++, after compiling and execution all we get
is addition functions. I dont have any idea about how hardware going to implement this
addition function i.e.at gate level or at transistor level.
VHDL is strongly type language. This means that operations and assignments are legal in
the language only if the types of the operands and the result match according to a set of
rules; it does not allow objects and literals of different types to be mixed freely in
expressions. Examples of illegal operations are adding a real value to an integer value,
and assigning a Boolean value to an object of type BIT. It is, therefore, important to
understand what types are and how they can be correctly used in the language.
VHDL is not Case sensitive.
Time can modeled using VHDL
sequential language
concurrent language
net-list language
timing specifications
waveform generation language
Hierarchy: The language supports hierarchy, that is, a digital system can be modeled as a
set of interconnected components; each component, in turn, can be modeled as a set of
interconnected subcomponents.
Flexible Design: The language supports flexible design methodologies: top-down,
bottom-up, or mixed.
Limitations/CONs of VHDL
It does not support modeling at or below the transistor level. It allows a design to be
captured at a mixed level using a single coherent language.
Designer has very little control at the gate level.
The logic generated by the synthesis tool is not optimized optimization for time any
affect area utilize and vice-versa.
The logic generated for the same description mat varies from tool to tool. This may be
due to the algorithm used by the tools, which might be proprietary.
Data Objects
SIGNALS
Signal objects are used to connect entities together and communication changes within a
design. Signals can also be defined as interconnections between the different components
inside the module, only the internal interconnections not I/O connections.
Signals can be declared in entity declaration sections, architecture declarations (signal is
local to that architecture), and package declarations. Signals in package declarations are
also referred to as global signals because they can be shared among entities.
Signal assignment is concurrent outside the process statement and sequential within a
process.
Signals take the last value assigned to it in a process statement and assign the value only
after the compilation of the simulation cycle run. If we perform multiple count operation
on signals in process statement, only once the count operation will compiled.
A signal has three properties assign to it.
Type and attributes
Value
Time
Syntax:
SIGNAL signal_name : signal_type [:= initial value];
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
PACKAGE sigdecl IS
TYPE bus_type IS ARRAY (0 to 7) OF std_logic;
SIGNAL vcc
: std_logic := 1;
-- Declaration in Package
-- Declaration in Package
USE WORK.sigdecl.ALL;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY board_design is
PORT (data_in : IN bus_type;
data_out : OUT bus_type);
SIGNAL sys_clk : std_logic := 1;
-- Declaration in Entity
END board_design;
--Declaration in Architecture
Signal objects can be regarded as wires in a circuit while variable and constant objects
are analogous to their counterparts in a high-level programming language like C or
Pascal. Signal objects are typically used to model wires and flip-flops while variable and
constant objects are typically used to model the behavior of the circuit
VARIABLE
Variables can be declared and used inside a process statement. A variable is assigned a
value using the variable assignment statement that typically has the form,
Variable-object : = expression;
The expression is evaluated when the statement is executed and the computed
value is assigned to the variable object instantaneously, that is, at the current simulation
time.
Variables are created at the time of elaboration and retain their values throughout the
entire simulation run (like static variables in C high-level programming language). This is
because a process is never exited; it is either in an active state, that is, being executed, or
in a suspended state, that is, waiting for a certain event to occur. A process is first entered
at the start of simulation (actually, during the initialization phase of simulation) at which
time it is executed until it suspends because of a wait statement or a sensitivity list.
Syntax:
variable variable_name : [range] [:= initial value];
The keyword VARIABLE is followed by one or more variable names. Each name creates
a new variable. The construct variable_type defines the data type of the variable, and an
optional initial value can be specified.
Variables are preferred over signals for the following reasons:
Variables are inherently more efficient because assignments happen immediately,
while signals must be scheduled to occur.
Variables take less memory, while signals need more information to allow for
scheduling and signal attributes.
Using a signal would have required a wait statement to synchronize the signal
assignment to the same execution iteration as the usage.
Variables dont have past history unlike signals.
Example using two variables is shown here:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY and5 IS
PORT ( a, b, c, d, e : IN std_logic;
q : OUT std_logic);
END and5;
--Declaration of a variable
--Declaration of a variable
BEGIN
state := a AND b AND c AND d AND e;
IF state = 1 THEN
delay := 4.5 ns;
ELSIF state = 0 THEN
delay := 3 ns;
ELSE
delay := 4 ns;
END IF;
q <= state AFTER delay;
END PROCESS;
END and5;
This example is the architecture for a five-input AND gate. There are two variable
declarations in the process declaration section: one for variable state and one for variable
delay. Variable state is used as a temporary storage area to hold the value of the AND
function of the inputs. Temporary storage value delay is used to hold the delay value that
will be used when scheduling the output value. Both of these values cannot be static data
because their values depend on the values of inputs a, b, c, d, and e.
CONSTANTS
Constant objects are names assigned to specific values of a type. Constants give the
designer the ability to have a better-documented model, and a model that is easy to
update. For instance, if a model requires a fixed value in a number of instances, a
constant should be used.
By using a constant, the designer can change the value of the constant and recompile, and
all of the instances of the constant value are updated to reflect the new value of the
constant.
A constant has the same scoping rules as signals. A constant declared in a package can be
global if the package is used by a number of entities. A constant in an entity declaration
section can be referenced by any architecture of that entity. A constant in architecture can
be used by any statement inside the architecture, including a process statement. A
constant declared in a process declaration can be used only in a process.
Syntax:
constant constant_name : constant_type[ := initial value];
Examples of constant declarations are
constant RISE_TIME: TIME := 10ns;
constant BUS_WIDTH: INTEGER := 8:
constant NO_OF_INPUTS: INTEGER;
The value of the constant has not been specified in last case. Such a constant is called a
deferred constant and it can appear only inside a package declaration. The complete
constant declaration with the associated value must appear in the corresponding package
body.
ALIASES
An alias declares an alternate name for all or part of an existing object. It provides a
convenient mechanism notation to write names for objects that have long names. It also
provides a mechanism of referring to the same object in different ways depending on the
context.
Only objects signals, variables, and constants can have aliases, not types. Alternate names
can be provided for types by using subtype declarations.
For example,
For example,
It is important to note that assigning a value to an alias name is the same as assigning a
value to the aliased name. The alias does not declare a new object but merely provides an
alternate way of referring to the original object. The alias of an array object may change
the way in which the array is indexed, as shown in the alias declaration of STATUS.