Introduction To Vlsi Systems: Historical Perspective
Introduction To Vlsi Systems: Historical Perspective
Historical Perspective:
The electronics industry has achieved a phenomenal growth over the last two decades, mainly
due to the rapid advances in integration technologies, large-scale systems design - in short, due
to the advent of VLSI. The number of applications of integrated circuits in high-performance
computing, telecommunications, and consumer electronics has been rising steadily, and at a very
fast pace. Typically, the required computational power (or, in other words, the intelligence) of
these applications is the driving force for the fast development of this field.
The current leading-edge technologies (such as low bit-rate video and cellular communications)
already provide the end-users a certain amount of processing power and portability. This trend is
expected to continue, with very important implications on VLSI and systems design. One of the
most important characteristics of information services is their increasing need for very high
processing power and bandwidth (in order to handle real-time video, for example). The other
important characteristic is that the information services tend to become more and more
personalized (as opposed to collective services such as broadcasting), which means that the
devices must be more intelligent to answer individual demands, and at the same time they must
be portable to allow more flexibility/mobility.
As more and more complex functions are required in various data processing and
telecommunications devices, the need to integrate these functions in a small system/package is
also increasing. The level of integration as measured by the number of logic gates in a
monolithic chip has been steadily rising for almost three decades, mainly due to the rapid
progress in processing technology and interconnect technology. Table 1.1 shows the evolution of
logic complexity in integrated circuits over the last three decades.
Figure-1.2: Evolution of integration density and minimum feature size, as seen in the early 1980s.
Figure 1.2 shows the history and forecast of chip complexity - and minimum feature size - over
time, as seen in the early 1980s. At that time, a minimum feature size of 0.3 microns was
expected around the year 2000. The actual development of the technology, however, has far
exceeded these expectations. A minimum size of 0.25 microns was readily achievable by the
year 1995. As a direct result of this, the integration density has also exceeded previous
expectations - the first 64 Mbit DRAM, and the INTEL Pentium microprocessor chip containing
more than 3 million transistors were already available by 1994, pushing the envelope of
integration density.
2
Page
VLSI design Flow:
Figure 1.5 provides a more simplified view of the VLSI design flow, taking into account the
various representations, or abstractions of design - behavioral, logic, circuit and mask layout.
Note that the verification of design plays a very important role in every step during this process.
The failure to properly verify a design in its early phases typically causes significant and
expensive re-design at a later stage, which ultimately increases the time-to-market.
Although the design process has been described in linear fashion for simplicity, in reality there
are many iterations back and forth, especially between any two neighboring steps, and
occasionally even remotely separated pairs. Although top-down design flow provides an
excellent design process control, in reality, there is no truly unidirectional top-down design flow.
Both top-down and bottom-up approaches have to be combined. For instance, if a chip designer
defined architecture without close estimation of the corresponding chip area, then it is very likely
that the resulting chip layout exceeds the area limit of the available technology. In such a case, in
order to fit the architecture into the allowable chip area, some functions may have to be removed
and the design process must be repeated. Such changes may require significant modification of
the original requirements. Thus, it is very important to feed forward low-level information to
3
# Top-down Design.
# Bottom-up Design.
# Mixed Top-down and Bottom-up Design.
Top-down Design
This method relies on realizing the desired complex behaviour of a hardware by partitioning it
into intercommunicating simpler sub-behaviours.
The designer controls the partitioning and specifies the sub-behaviour of each partition. There are
no priority given parts or components.
This methodology is applied recursively to break down the original complex behaviour into an
interconnection of simple enough behaviours whose implementation is known.
Bottom-up Design
This method aims at realizing the desired complex behaviour by suitable selection and
interconnection of parts / components from an available set of parts /components with known
behaviours (builiding-block approach). Such an available set of parts/components is often a
standard cell library or a library of TTL gates. 4
Page
This method is adequate whenever the complexity of desired behaviour is not too high as
compared to the complexity of behaviours of available parts. An example is the designing of the
logic circuit of an ALU-bit or a counter using TTL gates.
However, this method does not work when the complexity of desired behaviour is much too high
as compared to the complexities of behaviours of available parts. An example is the designing of
the logic circuit of a Microprocessor using TTL gates.
This is the most commonly used and practical method of designing complex VLSI circuits.
It aims at realizing the desired complex behaviour by first following the topdown design method
(recursively a few times, if necessary) and partitioning the desired complex behaviour into a set
of intercommunicating simpler sub-behaviours, and then realizing the resulting simpler sub-
behaviours by following the bottom-up design method e.g. by selection and interconnection of
parts from an available library/set of parts with known behaviours.
Fully fabricated FPGA chips containing thousands of logic gates or even more, with
5
programmable interconnects, are available to users for their custom hardware programming to
Page
realize desired functionality. This design style provides a means for fast prototyping and also for
cost-effective chip design, especially for low-volume applications. A typical field programmable
gate array (FPGA) chip consists of I/O buffers, an array of configurable logic blocks (CLBs),
and programmable interconnect structures. The programming of interconnects is implemented by
programming of RAM cells whose output terminals are connected to the gates of MOS pass
transistors. A general architecture of FPGA from XILINX is shown in Fig. 1.12. A more detailed
view showing the locations of switch matrices used for interconnect routing is given in Fig. 1.13.
A simple CLB (model XC2000 from XILINX) is shown in Fig. 1.14. It consists of four signal
input terminals (A, B, C, D), a clock signal terminal, user-programmable multiplexers, an SR-
latch, and a look-up table (LUT). The LUT is a digital memory that stores the truth table of the
Boolean function. Thus, it can generate any function of up to four variables or any two functions
of three variables. The control terminals of multiplexers are not shown explicitly in Fig. 1.14.
The CLB is configured such that many different logic functions can be realized by programming
its array. The typical design flow of an FPGA chip starts with the behavioral description of its
functionality, using a hardware description language such as VHDL. The synthesized
architecture is then technology-mapped (or partitioned) into circuits or logic cells. At this stage,
the chip design is completely described in terms of available logic cells. Next, the placement and
routing step assigns individual logic cells to FPGA sites (CLBs) and determines the routing
patterns among the cells in accordance with the netlist.
performance of the design can be simulated and verified before downloading the design for
programming of the FPGA chip. The programming of the chip remains valid as long as the chip
6
is powered-on, or until new programming is done. In most cases, full utilization of the FPGA
Page
chip area is not possible - many cell sites may remain unused.
The largest advantage of FPGA-based design is the very short turn-around time, i.e., the time
required from the start of the design process until a functional chip is available. Since no
physical manufacturing step is necessary for customizing the FPGA chip, a functional sample
can be obtained almost as soon as the design is mapped into a specific technology. The typical
price of FPGA chips are usually higher than other realization alternatives (such as gate array or
standard cells) of the same design, but for small-volume production of ASIC chips and for fast
prototyping, FPGA offers a very valuable option.
Although the standard-cells based design is often called full custom design, in a strict sense, it is
somewhat less than fully custom since the cells are pre-designed for general use and the same
cells are utilized in many different chip designs. In a fuller custom design, the entire mask design
is done anew without use of any library. However, the development cost of such a design style is
becoming prohibitively high. Thus, the concept of design reuse is becoming popular in order to
reduce design cycle time and development cost. The most rigorous full custom design can be the
design of a memory cell, be it static or dynamic. Since the same layout design is replicated, there
would not be any alternative to high density memory chip design. For logic chip design, a good
compromise can be achieved by using a combination of different design styles on the same chip,
such as standard cells, data-path cells and PLAs. In real full-custom layout in which the
geometry, orientation and placement of every transistor is done individually by the designer,
design productivity is usually very low - typically 10 to 20 transistors per day, per designer.
In digital CMOS VLSI, full-custom design is rarely used due to the high labor cost. Exceptions
to this include the design of high-volume products such as memory chips, high- performance
microprocessors and FPGA masters.
Fig: Impact of different VLSI design styles on design cycle time & achievable chip performance.
Page
Chapter 2
CMOS TECHNOLOGY
Two important characteristics of CMOS devices are high noise immunity and low static power
consumption. Significant power is only drawn while the transistors in the CMOS device are
switching between on and off states. Consequently, CMOS devices do not produce as much
waste heat as other forms of logic, for example transistor-transistor logic (TTL) or NMOS logic,
which uses all n-channel devices without p-channel devices. CMOS also allows a high density of
logic functions on a chip. It was primarily this reason why CMOS won the race in the eighties
and became the most used technology to be implemented in VLSI chips.
Technical details:
"CMOS" refers to both a particular style of digital circuitry design, and the family of processes
used to implement that circuitry on integrated circuits (chips). CMOS circuitry dissipates less
power when static, and is denser than other implementations having the same functionality.
Since this advantage has increased and grown more important, CMOS processes and variants
have come to dominate, thus the vast majority of modern integrated circuit manufacturing is on
CMOS processes.
Composition:
The main principle behind CMOS circuits that allows them to implement logic gates is the use of
p-type and n-type metal–oxide–semiconductor field-effect transistors to create paths to the
output from either the voltage source or ground. When a path to output is created from the
voltage source, the circuit is said to be pulled up. The other circuit state occurs when a path to
8
output is created from ground and the output pulled down to the ground potential.
Page
Output is inversion of input:
CMOS circuits are constructed so that all PMOS transistors must have either an input from the
voltage source or from another PMOS transistor. Similarly, all NMOS transistors must have
either an input from ground or from another NMOS transistor. The composition of a PMOS
transistor creates low resistance between its source and drain contacts when a low gate voltage is
applied and high resistance when a high gate voltage is applied. On the other hand, the
composition of an NMOS transistor creates high resistance between source and drain when a low
gate voltage is applied and low resistance when a high gate voltage is applied.
The image above shows what happens when an input is connected to both a PMOS transistor and
an NMOS transistor. When the voltage of input A is low, the NMOS transistor's channel is in a
high resistance state. This limits the current that can flow from Q to ground. The PMOS
transistor's channel is in a low resistance state and much more current can flow from the supply
to the output. Because the resistance between the supply voltage and Q is low, the voltage drop
between the supply voltage and Q due to a current drawn from Q is small. The output therefore
registers a high voltage.
On the other hand, when the voltage of input A is high, the PMOS transistor is in an off (high
resistance) state so it would limit the current flowing from the positive supply to the output,
while the NMOS transistor is in an on (low resistance) state, allowing the output to drain to
9
Page
ground. Because the resistance between Q and ground is low, the voltage drop due to a current
drawn into Q placing Q above ground is small. This low drop results in the output registering a
low voltage.
In short, the outputs of the PMOS and NMOS transistors are complementary such that when the
input is low, the output is high, and when the input is high, the output is low. Because of this
opposite behavior of input and output, the CMOS circuits' output is the inversion of the input.
An advantage of CMOS over NMOS is that both low-to-high and high-to-low output transitions
are fast since the pull-up transistors have low resistance when switched on, unlike the load
resistors in NMOS logic. In addition, the output signal swings the full voltage between the low
and high rails. This strong, more nearly symmetric response also makes CMOS more resistant to
noise.
10
Page
Working of NOR gate:
In this circuit, if both inputs are low, both P-channel MOSFETs will be turned on, thus providing
a connection to +V. Both N-channel MOSFETs will be off, so there will be no ground
connection. However, if either input goes high, that P-channel MOSFET will turn off and
disconnect the output from +V, while that N-channel MOSFET will turn on, thus grounding the
output.
11
Page
Chapter 3
# Behavioral.
# Structural.
The behavioral aspect deals with the behavior of hardware: what is its functionality and speed
(without worrying about the constructional details).
The structural aspect tells us about the hardware construction: which parts have been selected for
construction and how they have been interconnected.
Of course, complete information on the hardware requires a combination of both the behavioral
and structural aspects. However, in many practical situations, we may need to focus only on a
single aspect.
Besides the behavioral (functionality and timing) and structural (net list) aspects, there is also a
third aspect to a hardware. This is the physical aspect (e.g. the layout of the IC or the PCB).
In fact the information on each of these aspects is itself represented at different levels of detail,
using different abstraction levels. Each abstraction level is used to represent information on an
aspect of the design at a certain convenient level of detail.
For example, the structural aspect (the net list) of a VLSI design can be described at several
different abstraction levels e.g. the system structure level, the processor-buses level, the ALU-
register level, the gate ip/op level, and the transistor level. Simultaneously, the behavioral and
physical aspects of a VLSI chip/system can also be described at different levels of abstraction.
Very often the three aspects of a design are called the three design domains. And for each
domain (aspect) there are several different levels of abstraction at which the design information
in that domain is represented.
Therefore, a complete system of maintaining, providing, and exchanging information on a VLSI
design must address all the three domains (aspects) individually or in combination. However, a
single design description language that permits design description in all the three design domains
at each of the abstraction levels does not exist.
Hardware description languages (HDLs) have been developed to provide a means of describing,
validating, maintaining and exchanging design information on complex digital VLSI chips across
multiple levels of design abstractions used during the design process in behavioral and structural
domains.
12
Page
Front-End Design Steps Using HDL:
Behavioral Design:
To capture the behavior of the chip in a formal form using a hardware description language
(HDL) following steps are followed-
# This step involves coding of the behavior of the chip (usually specified in a natural language
description or other informal means e.g. tables, diagrams etc.) in a formal hardware description
language (HDL).
# The HDL description formally captures the functional behavior (input to output
transformations done by the chip) and timing behavior at the pins of the chip. The description
has no regard as to how the behavior would be realized in a hardware form.
# This step partitions the chip-area into area segments and allocates logic gates/logic blocks to
be placed in each area segment.
# Floor planning provides a useful level of hierarchy in the optimization of the physical design
(layout generation) by taking advantage of the designer's knowledge of functional and logical
hierarchies of the design.
# It must support multiple abstraction levels in both behavioural and structural domains, and
offer constructs that naturally map the designer's view and understanding of the circuit at
different abstraction levels into HDL descriptions.
# The language should not dictate or put restrictions on the choice of a particular design
methodology by the designer. It should have a rich enough set of constructs to support any
design methodology.
# The language should not be tied to a particular technology (such as CMOS,TTL, ECL) and/or
feature size. It should work across the spectrum of technologies and feature sizes.
# It should have a good support in terms of the availability of CAD tools and design libraries.
# It should be a medium for design exchange and design re-use.
# Specifications captured using HDLs are easier to understand, less error prone, and can be modified
easily.
# HDL descriptions are faster to simulate.
# Design of complex systems is easier.
# It results in a shorter design cycle.
Specifying Logic:
Implementing Logic:
14
15
Page
Architecture #3 (Sequential) for Logic Implementation
Sequential Architectures:
In fact, the transfer of data from one or more source registers to a destination register after
Page
processing by a functional unit that lies in the transfer path is called a register transfer step.
A RTL design description, therefore, captures all the architectural blocks of the design e.g.
registers, functional units (ALUs, Barrel shifters, Multipliers, etc.) and multiplexers and/or buses
interconnecting them. It enumerates all the interface points of each architectural block (data
inputs, data outputs, control inputs, and clock . where applicable) and describes the functioning
of the blocks behaviorally. Also included in the design is the control generation block, the FSM
that generates controls for all the blocks in the architecture.
Currently RTL VHDL designs are created and validated by designers. A logic synthesis tool
(such as Design Compiler from Synopsys) is then used to automatically generate the gate level
design and output the net-list for a specific technology library.
Besides the RTL design, a priority of design objectives (whether to design for maximum speed
or minimum area), the level of effort permitted for design optimization (low, medium, high) and
a set of constraints are also input to the logic synthesizer.
The constraints may take the simple form of specification of an overall clocking rate for the
design or the designer may constrain delays along specified paths running across one or more
blocks of the RTL design. Additional constraints like maximum permissible fan-ins and fan-outs
for gates to be used, maximum permissible rise and fall times for nodes in the circuit, preclusion
of / preference for certain cells in the target technology library etc. can also be provided to the
Logic synthesis tool.
While constraints can be supplied interactively to the synthesis tool, usually they are included in
a separate constraint file which is read in by the synthesis tool or they are part of a synthesis
script.
The synthesis tool then translates the RTL design into a gate level net-list while trying to satisfy
all the constraints supplied by the designer. Detailed timing reports on the generated net-lists are
provided by the synthesis tool along-with a list of constraints that could not be satisfied (if that is
the case).
If some constraints are not met, then the designer should either relax the constraints, or try `high'
effort of optimization, or alter his architecture and rewrite the RTL code or part thereof.
achieved.
Page
Chapter 4
VHDL
Introduction:
VHDL is an acronym for VHSlC Hardware Description Language (VHSIC is an acronym for
Very High Speed Integrated Circuits). It is a hardware description language that can be used to
model a digital system at many levels of abstraction ranging from the algorithmic level to the
gate level. The complexity of the digital system being modeled could vary from that of a simple
gate to a complete digital electronic system, or anything in between. The digital system can also
be described hierarchically. Timing can also be explicitly modeled in the same description.
The VHDL language can be regarded as an integrated amalgamation of the following languages:
sequential language +
concurrent language +
net-list language +
timing specifications +
waveform generation language => VHDL
Therefore, the language has constructs that enable you to express the concurrent or sequential
behavior of a digital system with or without timing. It also allows you to model the system as an
interconnection of components. Test waveforms can also be generated using the same constructs.
All the above constructs may be combined to provide a comprehensive description of the system
in a single model.
The language not only defines the syntax but also defines very clear simulation semantics for
each language construct. Therefore, models written in this language can be verified using a
VHDL simulator.
History:
The requirements for the language were first generated in 1981 under the VHSIC program. In
this program, a number of U.S. companies were involved in designing VHSIC chips for the
Department of Defense (DoD). At that time, most of the companies were using different
hardware description languages to describe and develop their integrated circuits. As a result,
different vendors could not effectively exchange designs with one another. Also, different
vendors provided DoD with descriptions of their chips in different hardware description
languages. Reuse was also a big issue. Thus, a need for a standardized hardware description
language for design, documentation, and verification of digital systems was generated.
A team of three companies, IBM, Texas Instruments, and Intermetrics, were first awarded the
contract by the DoD to develop a version of the language in 1983. Version 7.2 of VHDL was
18
developed and released to the public in 1985. There was strong industry participation throughout
Page
the VHDL language development process, especially from the companies that were developing
VHSIC chips. After the release of version 7.2, there was an increasing need to make the
language an industry-wide standard. Consequently, the language was transferred to the IEEE for
standardization in 1986. After a substantial enhancement to the language, made by a team of
industry, university, and DoD representatives, the language was standardized by the IEEE in
December 1987; this version of the language is now known as the IEEE Std 1076-1987.
Capabilities:
The following are the major capabilities that the language provides along with the features that
differentiate it from other hardware description languages.
Basic Terminologies:
VHDL is a hardware description language that can be used to model a digital system. The digital
system can be as simple as a logic gate or as complex as a complete electronic system. A
hardware abstraction of this digital system is called an entity in this text. An entity X, when used
in another entity Y, becomes a component for the entity Y. Therefore, a component is also an
entity, depending on the level at which you are trying to model.
To describe an entity, VHDL provides five different types of primary constructs, called" design
units. They are-
1. Entity declaration
2. Architecture body
3. Configuration declaration
4. Package declaration
5. Package body
1. Entity Declaration
The entity' declaration specifies the name of the entity being modeled and lists the set of
interface ports. Ports are signals through which the entity communicates with the other models in
19
2. Architecture Body
The internal details of an entity are specified by an architecture body using any of the following
modeling styles:
The name of the architecture body is HA_STRUCTURE. The entity declaration for
HALF_ADDER (presented in the previous section) specifies the interface ports for this
architecture body. The architecture body is composed of two parts: the declarative part (before
20
the keyword begin) and the statement part (after the keyword begin). Two component
Page
declarations are present in the declarative part of the architecture body. These declarations
specify the interface of components that are used in the architecture body. The components
XOR2 and AND2 may either be predefined components in a library, or if they do not exist, they
may later be bound to other components in a library.
In this modeling style, the flow of data through the entity is expressed primarily using concurrent
signal assignment statements. The structure of the entity is not explicitly specified in this
modeling style, but it can be implicitly deduced. Consider the following alternate architecture
body for the HALF..ADDER entity that uses this style.
The dataflow model for the HALF_ADDER is described using two concurrent signal assignment
statements (sequential signal assignment statements are described in the next section). In a signal
assignment statement, the symbol <= implies an assignment of a value to a signal.
In contrast to the styles of modeling described earlier, the behavioral style of modeling specifies
the behavior of an entity as a set of statements that are executed sequentially in the specified
order. This set of sequential statements, that are specified inside a process statement, do not
explicitly specify the structure of the entity but merely specifies its functionality. A process
statement is a concurrent statement that can appear within an architecture body. For example,
consider the following behavioral model for the D-flip flop entity.
entity LS_DFF is
port (Q: out BIT; D, CLK: in BIT):
end LS_DFF;
architecture LS_DFF_BEH of LS_DFF is
begin
process (D, CLK)
begin
if (CLK = '1') then
Q <= D;
end if;
end process;
21
end LS_DFF_BEH;
Page
A process statement, too, has a declarative part (between the keywords process and begin), and a
statement part (between the keywords begin and end process). The statements appearing within
the statement part are sequential statements and are executed sequentially. The list of signals
specified within the parenthesis after the keyword process constitutes a sensitivity list and the
process statement is invoked whenever there is an event on any signal in this list.
It is possible to mix the three modeling styles that we have seen so far in a single architecture
body. That is, within an architecture body, we could use component instantiation statements (that
represent structure), concurrent signal assignment statements (that represent dataflow), and
process statements (that represent behavior). Here is an example of a mixed style model for a
one-bit full-adder shown in Fig. 2.7.
entity FULL_ADDER is
port (A, B, CIN: in BIT; SUM, COUT: out BIT);
end FULL_ADDER;
T2 := B and CIN;
T3:=A and CIN;
Page
The full-adder is represented using one component instantiation statement, one process statement
and one concurrent signal assignment statement. All of these statements are concurrent
statements, and therefore, their order of appearance within the architecture body is not important.
Note that a process statement itself is a concurrent statement; however, statements within a
process statement are always executed sequentially. SI is a signal locally declared within the
architecture body and is used to pass the value from the output of the component XI to the
expression for signal SUM.
3. Model analysis:
Once an entity is described in VHDL, it can be validated using an analyzer and a simulator that
are part of a VHDL system. The first step in the validation process is analysis. The analyzer
takes a file that contains one or more design units (remember that a design unit is an entity
declaration, an architecture body, a configuration declaration, a package declaration or a package
body) and compiles them into an intermediate form. The format of this compiled intermediate
representation is not defined by the language. During compilation, the analyzer validates the
syntax and performs static semantic checks. The generated intermediate form is stored in a
specific design library, that has been designated as the working library.
4. Simulation:
Once the model description is successfully compiled into one or more design libraries, the next
step in the validation process is simulation. For a hierarchical entity to be simulated, all of its
lowest level components must be described at the behavioral level.
Simulation commences by advancing time to that of the next event. Values that are scheduled to
be assigned to signals at this time are assigned. Each process that has a signal in its sensitivity
list whose value just changed, is executed until it suspends. Simulation stops when a user-
specified time limit is reached.
an upper-case letter (A... Z), or a lower-case letter (a. .. z), or a digit (0 . . . 9) or the underscore
(_ ) character. The first character in an identifier must be a letter and the last character may not
Page
be an underscore. Lower-case and upper-case letters are considered to be identical when used in
an identifier; as an example. Count, COUNT, and CouNT, all refer to the same identifier. Also,-
two underscore characters cannot appear consecutively.
Data objects
A data object holds a value of a specified type. It is created by means of an object declaration.
An example is
Variable COUNT: INTEGER;
This result in the creation of a data object called COUNT which can hold integer values.
1. Constant: An object of constant cla^s can hold a single value of a given type. This value is
assigned to the object before simulation starts and the value cannot be changed during the course
of the simulation.
2. Variable: An object of variable class can also hold a single value of a given type. However in
this case, different values can be assigned to the object at different times using a variable
assignment statement.
3. Signal: An object belonging to the signal class has a past history of values, a current value,
and a set of future values. Future values can be assigned to a signal object using a signal
assignment statement.
Data Types
All the possible types that can exist in the language can be categorized into the following four
major categories:
1.Scalar types: Values belonging to these types appear in a sequential order. E.g. Integer,
floating point.
2. Composite types: These are composed of elements of a single type (an array type) or elements
of different types (a record type).
3. Access types: These provide access to objects of a given type (via pointers).
4. File types: These provides access to objects that contain a sequence of values of a given type
Operators
The predefined operators in the language are classified into the following five categories:
a. Logical operators
b. Relational operators
c. Adding operators
d. Multiplying oper ators
e. Miscellaneous operators
a. Logical operators
24
The six logical operators are AND, OR, NAND, NOR, XOR, NOT
Page
These operators are defined for the predefined types BIT and BOOLEAN. They are also defined
for one-dimensional arrays of BIT and BOOLEAN. During evaluation, bit values '0' and 1' are
treated as FALSE and TRUE values of the BOOLEAN type, respectively. The result of a logical
operation has the same type as its operands.
b. Relational operators
The result types for all relational operations is always BOOLEAN. The = (equality) and the /=
(inequality) operators are permitted on any type except file types. The remaining four relational
operators are permitted on any scalar type (e.g., integer or enumerated types) or discrete array
type (i.e., arrays in which element values belong to a discrete type).
c. Adding operators
The operands for the + (addition) and - (subtraction) operators must be of the same numeric type
with the result being of the same numeric type. The addition and subtraction operators may also
be used as unary operators, in which case, the operand and the result type must be the same.
c. Multiplying Operators
The * (multiplication) and / (division) operators are predefined for both operands being of the
same integer or floating point type. The result is also of the same type. The multiplication
operator is also defined for the case when one of the operands is of a physical type and the
second operand is of integer or real type. The result is of physical type.
For the division operator, division of an object of a physical type by either an integer or a real
type object is allowed and the result type is of the physical type. Division of an object of a
physical type by another object of the same physical type is also defined and it yields an integer
value as a result.
The rem (remainder) and mod (modulus) operators operate on operands of integer types and the
result is also of the same type. The result of a rem operation has the sign of its first operand and
is defined as A rem B = A - ( A / B ) * B
The result of a mod operator has the sign of the second operand and is defined as
A mod B = A – B * N -For some integer N.
d. Miscellaneous Operators
The ** (exponentiation) operator is defined for the left operand to be of integer or floating point
Page
type and the right operand (i.e., the exponent) to be of integer type only.
The not logical operator has the same precedence as the above two operators.
Process statement:
A process statement contains sequential statements that describe the functionality of a portion of
an entity in sequential terms. The syntax of a process statement is
[ process-label: ] process [ ( sensitivity-list ) ]
[process-item-declarations]
begin
sequential-statements;
A set of signals that the process is sensitive to is defined by the sensitivity list. In other words,
each time an event occurs on any of the signals in the sensitivity list, the sequential statements
within the process are executed in a sequential order, that is, in the order in which they appear.
The process then suspends after executing the last sequential statement and waits for another
event to occur on a signal in the sensitivity list. Items declared in the item declarations part are
available for use only within the process.
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.
Signals are assigned values using a signal assignment statement The simplest form of a signal
assignment statement is signal-object <= expression [ after delay-value ];
A signal assignment statement can appear within a process or outside of a process. If it occurs
outside of a process, it is considered to be a concurrent signal assignment statement. When a
signal assignment statement appears within a process, it is considered to be a sequential signal
assignment statement and is executed in sequence with respect to the other sequential statements
that appear within that process.
26
Page
Sequential statements
Wait Statement:
As we saw earlier, a process may be suspended by means of a sensitivity list. That is, when a
process has a sensitivity list, it always suspends after executing the last sequential statement in
the process. The wait statement provides an alternate way to suspend the execution of a process.
If Statement:
An if statement selects a sequence of statements for execution based on the value of a condition.
The general form of an if statement is
if boolean-expressionthen
sequential-statements
[ elsif boolean-expression then -- elsif clause; if stmt can have 0 or
sequential-statements ] -- more elsif clauses.
[ else -- else clause.
sequential-statements ]
end if;
The if statement is executed by checking each condition sequentially until the first true condition
is found; then, the set of sequential statements associated with this condition is executed.
Case Statement:
The statement null; is a sequential statement that does not cause any action to take place and
execution continues with the next statement. One example of this statement's use is in an if
statement or in a case statement where for certain conditions, it may be useful or necessary to
explicitly specify that no action needs to be performed.
Loop Statement:
A loop statement is used to iterate through a set of sequential statements. The syntax of a loop
statement is
[ loop-label : ] iteration-scheme loop
sequential-statements
end loop [ loop-label ] ;
Exit Statement:
The exit statement is a sequential statement that can be used only inside a loop. It causes
execution to jump out of the innermost loop or the loop whose label is specified. The syntax for
an exit statement is
exit [ loop-label] [ when condition ]:
If no loop label is specified, the innermost loop is exited. If the when clause is used, the specified
loop is exited only if the given condition is true, otherwise, execution continues with the next
statement.
Delays:
Delta Delay
A delta delay is a very small delay (infinitesimally small). It does not correspond to any real
delay and actual simulation time does not advance. This delay models hardware where a minimal
amount of time is needed for a change to occur, for example, in performing zero delay
simulation. Delta delay allows for ordering of events that occur at the same simulation time
during a simulation. Each unit of simulation time can be considered to be composed of an
infinite number of delta delays. Therefore, an event always occurs at a real simulation time plus
an integral multiple of delta delays. For example, events can occur at 15 ns, 15 ns+IA, 15 ns+2A,
15 ns+3A, 22 ns, 22 ns+A, 27 ns, 27 ns+A, and so on.
Inertial Delay
Inertial delay models the delays often found in switching circuits. It represents the time for
which an input value must be stable before the value is allowed to propagate to the output. In
addition, the value appears at the output after the specified delay. If the input is not stable for the
specified time, no output change occurs. When used with signal assignments, the input value is
28
represented by the value of the expression on the right-hand-side and the output is represented by
Page
Transport delay models the delays in hardware that do not exhibit any inertial delay. This delay
represents pure propagation delay, that is, any changes on an input is transported to the output,
no matter how small, after the specified delay. To use a transport delay model, the keyword
transport must be used in a signal assignment statement. Figure 4.4 shows an example of a
noninverting buffer using a transport delay of 10 ns.
Dataflow Modeling
One of the primary mechanisms for modeling the dataflow behavior of an entity is by using the
concurrent signal assignment statement. An example of a dataflow model for a 2-input or gate,
shown in Fig. 5.1, follows.
entity OR2 is
port (signal A, B: in BIT; signal Z: out BIT);
end OR2;
architecture OR2 of OR2 is
begin
Z <= A or B after 9 ns;
end OR2;
The architecture body contains a single concurrent signal assignment statement that represents
the dataflow of the or gate. The semantic interpretation of this statement is that whenever there is
an event (a change of value) on either signal A or B (A and B are signals in the expression for Z),
the expression on the right is evaluated and its value is scheduled to appear on signal Z after a
delay of 9 ns. The signals in the expression, A and B, form the "sensitivity list" for the signal
assignment statement.
Earlier, we saw that signal assignment statements can also appear within the body of a process
statement. Such statements are called sequential signal assignment statements, while signal
29
assignment statements that appear outside of a process are called concurrent signal assignment
statements. Concurrent signal assignment statements are event triggered, that is, they are
Page
executed whenever there is an event on a signal that appears in its expression, while sequential
signal assignment statements are not event triggered and are executed in sequence in relation to
the other sequential statements that appear within the process. To further understand the
difference between these two kinds of signal assignment statements, consider the following two
architecture bodies.
In architecture SEQ_SIG_ASG, the two signal assignments are sequential signal assignments.
Therefore, whenever signal B has an event, say at time T, the first signal assignment statement is
executed and then the second signal assignment statement is executed, both in zero time.
However, signal A is scheduled to get its new value of B only at time T+Δ (the delta delay is
implicit), and Z is scheduled to be assigned the old value of A (not the value of B) at time T+Δ
also.
In architecture CON_SIG_ASG, the two statements are concurrent signal assignment statements.
When an event occurs on signal B, say at time T, signal A gets the value of B after delta delay,
that is, at time T+Δ. When simulation time advances to T+Δ, signal A will get its new value and
this event on A (assuming there is a change of value on signal A) will trigger the second signal
assignment statement that will cause the new value of A to be assigned to Z after another delta
delay, that is, at time T+2Δ. The delta delay model is explored in more detail in the next section.
The conditional signal assignment statement selects different values for the target signal based
on the specified, possibly different, conditions (it is like an if statement). A typical syntax for this
statement is
waveform-elements;
Page
The semantics of this concurrent statement are as follows. Whenever an event occurs on a signal
used either in any of the waveform expressions (recall that a waveform expression is the value
expression in a waveform element) or in any of the conditions, the conditional signal assignment
statement is executed by evaluating the conditions one at a time. For the first true condition
found, the corresponding value (or values) of the waveform is scheduled to be assigned to the
target signal. For example,
process
begin
if S0 = '0' and S1 = '0' then
Z<= IN0 after 10 ns;
elsif S0='1'and S1='0' then
Z<= IN1 after 10ns;
elsif S0='0' and S1 = '1' then
The selected signal assignment statement selects different values for a target signal based on
the,value of a select expression (it is like a case statement). A typical syntax for this statement is
with expression select —This is the select expression.
executed. Assuming the value of the select expression, OP_CODE, is SUB, the expression "A -
B" is computed and its value is scheduled to be assigned to signal Z after SUB_PROP_DLY
time.
Structural Modeling
Component Declaration
component component-name
port ( list-of-interface-ports ) ;
end component;
The component-name may or may not refer to the name of an already ex-isfing entity in a library.
If it does not, it must be explicitly bound to an entity; otherwise, the model cannot be simulated.
This is done using a configuration.
Component Instantiation
The component-label can be any legal identifier and can be considered as the name of the
instance. The component-name must be the name of a component declared earlier using a
component declaration. The association-list associates signals in the entity, called actuals, with
the ports of a component, called locals.
32
Page
VHDL codes for some digital circuits:
FULL ADDER
entity fulladder1 is
end fulladder1;
component halfadder is
port(a,b : in std_logic;
end component;
component orgate is
end component;
begin
(a=>a,
b=>b,
sum=>temp,
carry=>temp1);
(a=>temp,
Page
b=>cin,
sum=>sum,
carry=>temp2);
(a=>temp2,
b=>temp1,
c=>carry);
end beh;
HALF ADDER
entity halfadder is
end halfadder;
begin
process(a,b)
begin
sum<='0';
carry<='0';
sum<='1';
carry<='0';
34
else
Page
sum<='0';
carry<='1';
end if;
end process;
end beh;
FULLADDER
entity fladder is
end fladder;
component hfadder is
end component;
component orgate is
end component;
begin
end beh;
35
Page
Chapter 4
Tool description: TANNER EDA
Tanner is an EDA (Electronic design automation) tool, which is used to design and produce
electronic systems ranging from printed circuit boards (PCBs) to integrated circuits.
User Interface:
S-Edit’s user interface consists of the Title Bar, Menu Bar, Work Area, Status Bar, & 5 toolbars.
Getting Started:
Launch S-Edit; double-click on the S-Edit icon.
36
Page
Browsing symbols
37
Page
Enter the T-spice mode
38
Page
Run simulation
39
Page
References
Books:
VHDL programming by examples
- Douglas L. Perry
Introduction to HDL based VLSI design
- Chandra Shekhar
Principles of CMOS VLSI Design,
- Neil H. E. Weste and David Harris
Websites:
http://www.wikipedia.org/
http://www.tannereda.com/
40
Page