VHDL Lectures
VHDL Lectures
VHDL Lectures
R.B.Ghongade
Lecture 1
VHDL
What is VHDL?
Digital system design using Hardware
Description Language is an established
methodology in EDA
VHDL stands for
VERY HIGH SPEED INTEGRATED CIRCUITS
HARDWARE DESCRIPTION LANUAGE
FEATURES
VHDL is an amalgamation of following
languages
Concurrent language
Sequential Language
Timing Specification
Simulation Language
Test Language
Concurrent Language
Concurrent statements execute at the same time
in parallel as in hardware
Z <= C + X ;
X <= A + B ;
B
+
C
Sequential Language
Sequential statements execute one at a
time in sequence
As the case with any conventional
programming language the sequence of
statements is important
Z <= C + X ;
X <= A + B;
X <= A + B;
Z <= C + X ;
Timing Specification
Providing timing attributes in a sequential digital
design is of prime importance since the
operations are synchronized to a common clock
Example:
process
begin
clk <= 0 ;
wait for 20 ns ;
clk <= 1 ;
wait for 12 ns ;
end process ;
20
32
52
64
84
ns
Simulation language
For analyzing a digital design it is
important the design be simulated
Simulation has different flavours
Functional simulation
Post-synthesis simulation
Post- layout simulation
Test Language
Testbench
It is a part of a VHDL module that generates a
set of test vectors (test inputs) and sends
them to the module being tested
It collects the responses generated by the
module under test and compares them
against a specification of correct results
Thus testbench is required to ensure that the
design is correct and that the module is
operating as desired
Equivalent to checking of logical errors in any conventional programming
language
Testbench use
Test
tst_a
tst_b
tst_c
ABC_testbench.vhd
ABC.vhd
Design Hierarchy
Hierarchy can be represented using VHDL
Example
A full adder which is the top level module being
composed of three lower level modules that are; half
adder and OR gate
A
B
Cin
HALF
ADDER
SUM
HALF
ADDER
OR
CARRY
Design Libraries
Design Unit
It is any block of VHDL code or collection of VHDL
codes that may be independently analyzed and
inserted into a design library
Design Library
It is a storage facility in which analysed VHDL
descriptions are stored for repeated uses
DESIGN UNIT
Design
Library
2
Analyze
5
Simulator
Logic systems
Need for multi-valued logic system
Conventional logic systems have only three values
i.e. 0, 1, Z
Example
Consider the truth-table for AND gate
A
0
0
1
1
0
B
0
1
0
1
Z
Y
0
0
0
1
?
Levels of abstraction
Different styles are adopted for writing VHDL
code
Abstraction defines how much detail about the
design is specified in a particular description
Four levels are:
Layout level
Logic level
Register Transfer level
Behavioral level
BEHAVIORAL
RTL
LOGIC
LAYOUT
Layout Level
This is the lowest level and describes the
CMOS layout level design on silicon
Logic Level
Design has information about
Function
Architecture
Technology
Detailed timings
Behavioral Level
Describing function of a design using HDL
without specifying the architecture of
registers
Contains timing information required to
represent a function
(STEP 1)
CREATE A DIGITAL DESIGN
BY
VHDL CODE
SCHEMATIC ENTRY
STATE DIAGRAM
VHDL Entry
(RTL Level)
Active-HDL
Xilinx ISE
Libero IDE
FPGA Advantage
Compilation
Netlist
(Gate Level)
(STEP 2)
COMPILATION
(STEP 3)
FUNCTIONAL SIMULATION
Active-HDL
Modelsim
(STEP 4)
(SPECIFY TARGET DEVICE)
SYNTHESIS
Xilinx XST
Synplify
Leonardo Spectrum
Synthesis
Simulation
Optimization
Optimized Netlist
(Gate Level)
Simulation
Active-HDL
Modelsim
(STEP 6)
HARDWARE
PROGRAMMING
END
Physical device
Xilinx
Actel
Altera
Cypruss
Quicklogic
Atmel
Triscend
Lattice
Next class
Elements of VHDL
Elements of VHDL
R.B.Ghongade
Lecture 2
ENTITY
BASIC VHDL CODE
ARCHITECTURE
CONFIGURATION
Overview
Library
It is a collection of compiled VHDL units
It enables sharing of compiled designs and
hides the source code from the users
Commonly used functions, procedures and
user data types can be compiled into a user
defined library for use with all designs
Library should be declared before each
entity declaration even if it is in the same
VHDL file
Library
To declare a library (i.e. to make it visible to the
design) two lines of code are needed , one
containing name of the library, the other a use
clause
A library structure can be as follows:
LIBRARY
PACKAGE
FUNCTIONS
PROCEDURES
TYPES
CONSTANTS
COMPONENTS
Library syntax
LIBRARY library_name ;
USE library_name.package_name.package_parts ;
Example
LIBRARY IEEE ;
-- semicolon indicates
USE IEEE.std_logic_1164.all ; -- end of statement or
-- declaration
LIBRARY work ;
-- double dash (--)
-- indicates a comment
USE work.all ;
Library details
IEEE.MATH_COMPLEX.all
IEEE.MATH_REAL.all
IEEE.NUMERIC_BIT.all
Library details
IEEE.NUMERIC_STD.alll
IEEE.STD_LOGIC_1164.all
IEEE.STD_LOGIC_ARITH.all
Library details
IEEE.STD_LOGIC_ARITH.all
IEEE.STD_LOGIC_MISC.alll
IEEE.STD_LOGIC_SIGNED.all
IEEE.STD_LOGIC_TEXTIO.all
Entity
It is the designs interface to the external
circuitry
Equivalent to pinout /package of an IC
VHDL design must include one and only one
entity per module
It can be used as a component in other
entities after being compiled into a library
Entity declaration
Defines the input and output ports of the design
Name of the entity can be anything other than
the reserved VHDL word
Each port in the port list must be allotted:
a name ( should be self-explanatory that provides
information about its function
data flow direction or mode
a type
Entity syntax
entity entity_name is
port ( port_name : signal_mode signal_type ;
port_name : signal_mode signal_type ;
port_name : signal_mode signal_type ) ;
end entity_name ;
Modes
Ports in the portlist have modes which
indicate the driver direction
Mode also indicates whether or not the
port can be read from within the entity
Four modes are available:
Mode IN
Mode OUT
Mode INOUT
Mode BUFFER
Mode IN
Value can be read from but not assigned to (by
the entity)
Port signal A
port ( A : in std_logic ) ;
Drivers reside
outside the entity
ENTITY
Mode OUT
Value can be assigned to but not read from (by
the entity)
port ( B : out std_logic ) ;
Port signal B
Drivers reside
inside the entity
ENTITY
Mode INOUT
Bi-directional , value can be assigned to as well
as read from (by the entity)
Port signal C
ENTITY
Mode BUFFER
Output port with internal read capability
Drivers reside
inside the entity
Port signal D
ENTITY
DO NOT USE UNLESS REQUIRED
Entity example
entity and_gate is
port ( 1A , 2A , 3A, 4A : in std_logic ;
1B , 2B , 3B, 4B : in std_logic ;
1Y , 2Y , 3Y, 4Y : out std_logic ) ;
end and_gate ;
1
2
3
4
5
6
7
1A
VCC
1B
4B
1Y
4A
2A
4Y
2B
3B
2Y
3A
GND
3Y
14
13
12
11
10
9
8
Entity example
entity ALU is
port ( In1 : in std_logic_vector ( 3 downto 0) ; -- 1st operand
In2 ; in std_logic_vector ( 3 downto 0) ; -- 2nd operand
Opsel : in std_logic_vector ( 3 downto 0) ; -- opn select
Cin : in std_logic ;
Mode : in std_logic ;
Result : out std_logic_vector ( 3 downto 0 ) ;
Cout : out std_logic ;
Equal : out std_logic ) ;
end ALU ;
In1
In2
Op
sel
Mode
Cout
Cin
ALU
Result
Equal
Architecture
It specifies
Behaviour
Function
Relationship between inputs and outputs of an entity
Syntax
architecture achitecture_name of entity_name is
[declarations]
-- optional
begin
code
-- concurrent statements only
end achitecture_name ;
Architectural bodies
Behavioural
It is the high-level description
It contains a set of assignment statements to represent
behaviour
No need to focus on the gate-level implementation of a design
Example:
architecture behave of and_gate is
begin
process ( a, b )
if a=1 and b=1 then
c <= 1 ;
else
c <=0 ;
end if ;
end process ;
end behave ;
Dataflow
It uses concurrent signal assignment
statements
Example:
architecture dataflow of and_gate is
begin
c<= a and b ;
end dataflow ;
Structural
Components from libraries are connected
together
Designs are hierarchical
each component can be individually simulated
it makes use of component instantiation
A
B
Cin
HALF
ADDER
SUM
HALF
ADDER
OR
CARRY
Configuration
Since a number of architectures can exist
for an entity , using configuration
statement we can bind a particular
architecture to the entity
Syntax
configuration CONFIGURATION_NAME of ENTITY_NAME is
for ARCHITECTURE_NAME
end for;
end CONFIGURATION_NAME;
Next class
Language elements
Language Elements I
R.B.Ghongade
Lecture 3
Objects
They are used to represent and store the
data in the design being described
Object contains a value of specific type
Class
SIGNAL
Object
COUNT
Data type
: INTEGER
CONSTANT
SIGNAL
VARIABLE
Data Types
In order to write VHDL code efficiently it is
necessary to study the specification and use of
data types
Following are the categories of data types:
Pre-defined
Used defined
Subtypes
Arrays
Port arrays
Records
Signed and unsigned
Library Type/Functions
standard
std
BIT, BOOLEAN,
INTEGER, REAL
std_logic_1164
ieee
STD_LOGIC,
STD_ULOGIC
std_logic_arith
ieee
std_logic_signed
std_logic_unsigned
ieee
ieee
SIGNED, UNSIGNED /
data conversion functions
Functions that allow
operations with
STD_LOGIC_VECTOR
Examples:
SIGNAL X : BIT ;
X is declared
as a onedigit SIGNAL
of type BIT
Y is 4-bit
vector,
leftmost bit
is MSB
W is 8-bit
vector,
rightmost bit
is MSB
Y <= 0111 ;
W <= 01110001 ;
Description
Remark
Forcing unknown Synthesizable unknown
Synthesizable logic 0
Forcing low
Synthesizable logic 1
Forcing high
High impedance Synthesizable tri-state buffer
Weak unknown
Weak low
Weak high
Dont care
Examples:
SIGNAL X : STD_LOGIC ;
X is declared as a one-digit
(scalar) SIGNAL of type
STD_LOGIC
Y is 4-bit
vector, leftmost
bit is MSB
for (optional)
SIGNAL Y : STD_LOGIC_VECTOR (3 downto 0) : = 0001 initial value use
:=
With respect to
weak values, they
are resolved in favour
of the forcing values
in multiple-driven
nodes. If any two
std_logic signals are
connected top the
same node, then
conflicting logic levels
are resolved by using
the shown table
X 0 1 Z WL H X X X X X X X X X
0 X 0 X 0 0 0 0 X
1 X X 1 1 1 1 1 X
Z X 0 1 Z WL H Z
WX 0 1 W WWWX
L X 0 1 L WL WX
H X 0 1 H WWH X
-
X X X X X X X X
Other types
BOOLEAN
TRUE, FALSE
INTEGER
NATURAL
REAL
Physical
literals
Character
literals
SIGNED,
UNSIGNED
Subtypes
A SUBTYPE is a TYPE with a constraint
Though operations between data of
different types are not allowed, they are
allowed between the subtype and its
corresponding base type
SUBTYPE sub_state IS my_state RANGE idle to backward ;
Arrays
Arrays are collections of objects of same type
Can be 1-dimensional, 2-dimensionl or
1D X 1D
Higher dimensional arrays are possible but not
synthesizable
0
Scalar
0 1 0 0
1D
1D x 1D
1 1 0 0
1 0 1 0
1 1 0 1
0 1 0 0
2D data array
Array syntax
To specify an array :
TYPE type_name IS ARRAY (specification) OF data_type ;
To use an array :
SIGNAL signal_name : type_name [:= initial_value]
Example : 1D x 1D array
We want to build an array containing 4
vectors, each of size 8 bits
we will call each vector as row and the
complete array as matrix
TYPE row IS ARRAY (7 downto 0 ) OF STD_LOGIC ;
TYPE matrix IS ARRAY (3 downto 0 ) OF row ;
SIGNAL X : matrix ;
1D x 1D SIGNAL
Example : 2D array
This array will be created with scalars only
TYPE matrix2D IS ARRAY (0 TO 3, 7 DOWNTO 0 ) OF STD_LOGIC ;
L
M
ROWS
COLUMNS
Port Arrays
In the specification of the input or output
pins (PORTS) of a circuit (which is made in
the ENTITY), we might need to specify the
ports as arrays of vectors.
Since TYPE declarations are not allowed
in an ENTITY, the solution is to declare
user-defined data types in a PACKAGE,
which will then be visible to the whole
design (thus including the ENTITY)
As can be seen in the example above, a userdefined data type, called vector_array,was
created, which can contain an indefinite number
of vectors of size eight bits each (NATURAL
RANGE <> signifies that the range is not fixed,
with the only restriction that it must fall within the
NATURAL range, which goes from 0 to
+2,147,483,647)
The data type was saved in a PACKAGE called
my_data_types, and later used in an ENTITY to
specify a PORT called inp
Notice in the main code the inclusion of an
additional USE clause to make the user-defined
package my_data_types visible to the design.
Records
Records are similar to arrays, with the only
difference that they contain objects of
different types.
TYPE birthday IS RECORD
day: INTEGER RANGE 1 TO 31;
month: month_name;
END RECORD;
Examples:
SIGNAL x: SIGNED (7 DOWNTO 0);
SIGNAL y: UNSIGNED (0 TO 3);
Next class
Language Elements II
Language Elements II
R.B.Ghongade
Lecture 4
Operators
VHDL provides several kinds of predefined operators
Assignment operators
Logical operators
Arithmetic operators
Relational operators
Shift operators
Concatenation operators
Assignment operators
Are used to assign values to signals, variables,
and constants.
<=
:=
=>
SIGNAL x : STD_LOGIC;
VARIABLE y : STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL w: STD_LOGIC_VECTOR(0 TO 7);
x <= '1';
-- '1' is assigned to SIGNAL x using "<="
y := "0000"; -- "0000" is assigned to VARIABLE y using
--":="
w <= "10000000"; -- LSB is '1', the others are '0'
w <= (0 =>'1', OTHERS =>'0'); -- LSB is '1', the others
-- are '0'
Logical operators
Used to perform logical operations.
The data must be of type:
BIT, STD_LOGIC
STD_ULOGIC
BIT_VECTOR
STD_LOGIC_VECTOR
STD_ULOGIC_VECTOR
AND
OR
NAND
NOR
XOR
XNOR
The NOT
operator has
precedence
over the
others
Examples:
y <= NOT a AND b; -- (a'.b)
y <= NOT (a AND b); -- (a.b)'
y <= a NAND b; -- (a.b)'
Arithmetic operators
Used to perform arithmetic operations. The data
can be of type INTEGER, SIGNED, UNSIGNED,
or REAL (the last cannot be synthesized
directly).
Also, if the std_logic_signed or the
std_logic_unsigned package of the ieee library is
used, then STD_LOGIC_VECTOR can also be
employed directly in addition and subtraction
operations
+
*
/
**
MOD
REM
ABS
( Addition)
(Subtraction)
(Multiplication)
(Division)
(Exponentiation)
( Modulus)
( Remainder)
( Absolute value)
Comparison operators
=
/=
<
>
<=
>=
Equal to
Not equal to
Less than
Greater than
Less than or equal to
Greater than or equal to
Shift operators
sll
srl
sla
sra
ror
rol
LOGICAL
ARITHMETIC
ROTATE
LOGICAL
SHIFTING
0
ARITHMETIC SHIFTING
(retains sign bit)
ROTATE
Concatenation operator
&
Concatenation
a : STD_LOGIC_VECTOR ( 5 DOWNTO 0 ) ;
b,c,d : STD_LOGIC_VECTOR ( 2 DOWNTO 0 ) ;
0 & c(1)
c & d ;
& d(2) ;
Operator summary
Operator type
Operators
Data types
Arithmetic
+, -,*,/,**
(mod, rem , abs)
Comparison
All above
Shift
BIT_VECTOR
Concatenation
&, ( , , , )
Logical
Operator overloading
Operators can be user-defined
Let us consider the pre-defined arithmetic
operators seen earlier (+,- , *, /, etc.). They
specify arithmetic operations between data
of certain types (INTEGER, for example)
For instance, the pre-defined + operator
does not allow addition between data of
type BIT.
We can define our own operators, using
the same name as the pre-defined ones
Aggregates
It assigns values to elements of an array
a <= (OTHERS => 0 ) ;
a <= 0000 ;
Classes re-visited
Each object has a data type and class
Class indicates how the object is used in the
module and what can be done with that object
Type indicates what type of data the object
contains
Each object belongs to one of the following class:
CONSTANT
CLASS
SIGNAL
VARIABLE
CONSTANT
SIGNAL
VARIABLE
Constants
These are identifiers with fixed values
The value is assigned only once when
declared
Values cannot be changed during
simulation
CONSTANT bus_width : INTEGER :=16 ;
CONSTANT CLK_PERIOD : TIME :=15 ns ;
Signals
Example:
architecture and_gate of myand is
signal TEMP : STD_LOGIC ;
begin
U1 : AND2 portmap ( a, b, TEMP ) ;
U2 : AND2 portmap (TEMP, c , d ) ;
Equivalent to wires
within a circuit
end and_gate ;
TEMP
a
b
AND2
d
c
AND2
Variables
These are objects with single current
value
They are used to store the intermediate
values between the sequential statements
Variable assignment occurs immediately
Variables can be declared and used inside
the process statement only. But they retain
their value throughout the entire simulation
Example :
process ( a )
variable count : INTEGER : = 1 ;
begin
count : = count+ 1 ;
end process ;
Next class
Attributes
An attribute is data that are attached to VHDL
objects or predefined data about VHDL objects
Examples are the current drive capability of a
buffer or the maximum operating temperature of
the device
Types are
Data Attributes
Signal Attributes
User-defined Attributes
Data Attributes
The pre-defined, synthesizable data attributes
are the following:
dLOW
: Returns lower array index
dHIGH
: Returns upper array index
dLEFT
: Returns leftmost array index
dRIGHT
: Returns rightmost array index
dLENGTH : Returns vector size
dRANGE
: Returns vector range
dREVERSE_RANGE: Returns vector range
in reverse order
Example
Consider the following signal:
SIGNAL d : STD_LOGIC_VECTOR (7 DOWNTO 0);
Then:
d'LOW=0, d'HIGH=7, d'LEFT=7, d'RIGHT=0,
d'LENGTH=8, d'RANGE=(7 downto 0),
d'REVERSE_RANGE=(0 to 7)
Signal Attributes
Let us consider a signal s
Then:
sEVENT
: Returns true when an event occurs
on s
sSTABLE
: Returns true if no event has
occurred on s
sACTIVE
: Returns true if s = 1
sQUIET <time> : Returns true if no event has
occurred during the time specified
sLAST_EVENT : Returns the time elapsed since last
event
sLAST_ACTIVE: Returns the time elapsed since
last s=1
sLAST_VALUE : Returns the value of s before the
last event; etc.
Example
All four assignments shown below are synthesizable
and equivalent. They return TRUE when an event (a
change) occurs on clk, AND if such event is upward
(in other words, when a rising edge occurs on clk)
IF (clk'EVENT AND clk='1')... -- EVENT attribute
-- used with IF
IF (NOT clk'STABLE AND clk='1')... -- STABLE
--attribute used
-- with IF
WAIT UNTIL (clk'EVENT AND clk='1'); -- EVENT
--attribute used
-- with WAIT
IF RISING_EDGE(clk)... -- call to a function
User-defined Attributes
VHDL also allows the construction of user-defined
attributes
To employ a user-defined attribute, it must be
declared and specified
Attribute Declaration:
ATTRIBUTE attribute_name: attribute_type
Attribute Specification:
ATTRIBUTE attribute_name OF target_name: class IS value;
where:
attribute_type: any data type (BIT, INTEGER, STD_LOGIC_VECTOR, etc.)
class: TYPE, SIGNAL, FUNCTION, etc.
value: 0, 27, 00 11 10 01, etc.
Example
ATTRIBUTE number_of_inputs: INTEGER;
ATTRIBUTE number_of_inputs OF nand3: SIGNAL IS 3;
...
inputs <= nand3'number_of_pins; -- attribute call,
-- returns 3
Generics
As the name suggests, GENERIC is a way
of specifying a generic parameter
a static parameter that can be easily
modified and adapted to different
applications
The purpose is to make the code more
flexible and reusable
must be declared in the ENTITY
More than one GENERIC parameter can
be specified in an ENTITY
Syntax
GENERIC (parameter_name : parameter_type := parameter_value);
Example
The GENERIC statement below specifies a parameter called n, of type
INTEGER, whose default value is 8. Therefore, whenever n is found in
the ENTITY itself or in the ARCHITECTURE (one or more) that follows,
its value will be assumed to be 8
ENTITY my_entity IS
GENERIC (n : INTEGER := 8; vector: BIT_VECTOR := "00001111");
PORT (...);
END my_entity;
ARCHITECTURE my_architecture OF my_entity IS
...
END my_architecture;
Example
ARCHITECTURE generic_decoder OF decoder IS
BEGIN
PROCESS (ena, sel)
VARIABLE temp1 : STD_LOGIC_VECTOR (x'HIGH DOWNTO 0);
VARIABLE temp2 : INTEGER RANGE 0 TO x'HIGH;
....
Delays in VHDL
In VHDL, there are three types of delay
that are encountered
Inertial delay
Transport delay
Delta delay
Inertial Delay
Inertial delay is the default in VHDL
Behaves similarly to the actual device
Output signal of the device has inertia,
which must be overcome for the signal to
change value
The inertial delay model is by far the most
commonly used in all currently available
simulators
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY buf IS
PORT ( a : IN std_logic;
PORT ( b : OUT std_logic);
END buf;
ARCHITECTURE buf OF buf IS
BEGIN
b <= a AFTER 20 ns;
END buf;
Transport Delay
It represents a wire delay in which any
pulse, no matter how small, is propagated
to the output signal delayed by the delay
value specified
Especially useful for modeling delay line
devices, wire delays on a PCB, and path
delays on an ASIC
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY delay_line IS
PORT ( a : IN std_logic;
PORT ( b : OUT std_logic);
END delay_line;
ARCHITECTURE delay_line OF delay_line IS
BEGIN
b <= TRANSPORT a AFTER 20 ns;
END delay_line;
Delta delay
These are used since the PC that
processes and simulates a concurrent
phenomenon is basically a sequential
machine
The simulation program mimics
concurrency by scheduling events in some
order
Simulation deltas are used to order some
types of events during a simulation
Specifically, zero delay events must be
ordered to produce consistent results
Assumptions
Zero delay components
CLK=1
A=1
E
CLK
B
DFF
F
CLK
Q'
A
A
2) Evaluate inverter
3) B <= 1
4) Evaluate AND with C=1
E
E
CLK
CLK
B
B
DFF
DFF
5) D<=1
F
C
C
D
D
Q
Q
CLK
CLK
Q'
Q'
6) Evaluate NAND
7) C<=0
8) Evaluate AND
9) D<=0
Unwanted D assertion
1) A becomes 0
2) Evaluate inverter
3) B <= 1
E
CLK
B
DFF
4) Evaluate NAND
FF
CLK
Q'
5) C<=0
6) Evaluate AND
7) D<=0
Delta 1
A<=0
Evaluate inverter
Delta 2
B<=0
Evaluate AND
Evaluate NAND
Delta 3
D<= 1
C <=0
Evaluate AND
Delta 4
D<= 0
11 ns
Concurrent Statements
and
Constructs
output
Combinational Logic
input
Combinational Logic
output
Present
State
Next
State
Storage
Elements
Concurrent Code
Consider the following
statement:
X=X+Y;
In conventional software
X and Y are register
locations hence contents
of X and Y are added and
stored in X
Register X
Register Y
Difference in VHDL
In VHDL the same statement will mean a
feedback in a purely combinational logic which is
invalid
z <= a;
a
b
?
c
d
Next Class
Concurrent constructs
Digital Logic
Binary system -- 0 & 1, LOW & HIGH, negated
and asserted.
Basic building blocks -- AND, OR, NOT
A1
B1
Z1
A2
B2
Z2
X
Y
XY
X Y + X Y Z
Y
Z
X Y Z
VCC
B
S
Truth tables
T a b le 1 - 1
Truth table for the
multiplexer function.
Logic diagrams
A
SN
ASN
Z
SB
S
A
B
G
S
1A
3
1B
2
5
6
11
10
14
13
2A
2B
3A
3B
4A
4B
1Y
2Y
3Y
4Y
12
Equations: Z = S A + S B
module chap1mux
title 'Two-input multiplexer example'
CHAP1MUX device 'P16V8'
Various hardware
description
languages
ABEL
A, B, S
Z
pin 1, 2, 3;
pin 13 istype 'com';
equations
WHEN S == 0 THEN Z = A;
ELSE Z = B;
end chap1mux
Table 1-3
VHDL
VHDL
program for
the multiplexer.
library IEEE;
use IEEE.std_logic_1164.all;
entity Vchap1mux is
port ( A, B, S: in STD_LOGIC;
Z:
out STD_LOGIC );
end Vchap1mux;
Logic levels
Undefined region
is inherent
digital, not analog
amplification,
weak => strong
5.0 V
Logic 1 (HIGH)
3.5 V
undefined
logic level
1.5 V
Logic 0 (LOW)
0.0 V
MOS Transistors
Voltage-controlled resistance
VIN
PMOS
gate
source
drain
Voltage-controlled resistance:
decrease Vgs ==> decrease Rds
Note: normally, Vgs 0
NMOS
drain
gate
+
source
Vgs
Voltage-controlled resistance:
increase Vgs ==> decrease Rds
Note: normally, Vgs 0
CMOS Inverter
Switch model
(a)
VIN = L
VDD = +5.0 V
(b)
VOUT = H
VIN = H
VDD = +5.0 V
VOUT = L
Q2
on when
VIN is low
(p-channel)
VOUT
Q1
VIN
(n-channel)
on when
VIN is high
VDD = +5.0 V
Q2
on wh
VIN is
(p-channel)
VOUT
Q1
VIN
(n-channel)
on wh
VIN is
(a)
(b)
(c)
(b)
(c)
Z=H
L
Z=H
VDD
DD
VDD
Z=H
L
A
A == H
L
A=H
B
B == H
L
B
B == H
L
Inherent inversion.
Non-inverting buffer:
(a)
(b)
Q2
Q4
Z
A
Q1
Q3
A B
Q1
Q2
Q3
Q4
Q5
Q6 Z
L
L
H
H
off
off
on
on
on
on
off
off
off
on
off
on
on
off
on
off
on
on
on
off
off
off
off
on
Q6
Q5
(c)
L
H
L
H
A
B
L
L
L
H
(a)
(b)
Q2
Q4
A B
Q1
Q2
Q3
Q4
L
L
H
H
off
off
on
on
on
on
off
off
off
on
off
on
on
off
on
off
H
L
L
L
L
H
L
H
Q1
Q3
(c)
A
B
(a)
NOR
(b)
Q2
Q4
Z
A
VDD
VDD
A B
A
Q1
Q2
Q3
Q4 Q2
Z
L
L
H
H
off
off
B
on
on
on
on
off
off
off
on
off
on
on H
off Q4
H
on H
off L
L
H
L
H
A B
Q1
Q2
L
L
H
H
off
off
on
on
on
on
off
off
o
o
o
o
L
H
L
H
Q1
Q1
(b)
Q3
(c)
A
B
Q3
A
B
(c)
I1
I2
I3
I4
I5
I6
I7
I8
OUT
More complicated
VDD
(a)
(b)
A
Q2
Q4
B
Q6
Q2
Q3
Q4
Q5
Q6
L L L off on
CMOSLL AND-ORL L H off on
L L gate
H L off on
INVERT
off
off
off
off
on
on
on
on
off
off
off
off
on
on
on
on
on
on
on
on
off
off
off
off
on
on
on
on
off
off
off
off
off
off
on
on
off
off
on
on
off
off
on
on
Z
off
off
on
on
on
on
off
off
on
on
off
off
on
on
off
off
on
on
off
off
Q8
Z
A
C
Q5
Q3
Q7
Q1
A B C D
C
D
L
L
L
L
L
H
H
H
H
H
H
H
H
L
H
H
H
H
L
L
L
L
H
H
H
H
H
L
L
H
H
L
L
H
H
L
L
H
H
H
L
H
L
H
L
H
L
H
L
H
L
H
Q1
off
off
off
off
off
on
on
on
on
on
on
on
on
on
on
on
on
on
off
off
off
off
off
off
off
off
DC Loading
An output must sink
current from a load
when the output is in
the LOW state.
(a)
VCC
"sourcing
current"
VCC
CMOS
inverter
CMOS
inverter
Rp
> 1 M
Rp
VOLmax
VIN
Rn
IOLmax
resistive
load
VOHmin
VIN
resistive
load
Rn
> 1 M
IOHmax
"sinking
current"
Copyright 2000 by Prentice Hall, Inc.
Digital Design Principles and Practices, 3/e
Output-voltage drops
Resistance of off transistor is > 1 Megohm,
but resistance of on transistor is nonzero,
Voltage drops across on transistor, V = IR
VCC = +5.0 V
Thvenin equivalent
of resistive load
(b)
(a)
CMOS
inverter
Rp
CMOS
inverter
VOUT
VIN
Rp
1 k
Rn
VIN
2 k
resistive
load
VOUT
RThev = 667
+
Rn
VThev = 3.33 V
Thvenin equivalent
of resistive load
CMOS
inverter
> 1 M
VIN = +5.0 V
(HIGH)
VOUT = 0.43 V
RThev = 667
(LOW)
100
VThev = 3.33 V
100
Vout = 3.33V
= 0.43V
667 + 100
Thvenin equivalent
of resistive load
CMOS
inverter
200
VIN = +0.0 V
(LOW)
VOUT = 4.61 V
RThev = 667
(HIGH)
> 1 M
VThev = 3.33 V
667
667 + 200
Limitation on DC load
If too much load, output voltage will go outside
of valid logic-voltage range.
VCC
VOHmin
HIGH
VIHmin
0.7 VCC
High-state
DC noise margin
ABNORMAL
VILmax
0.3 VCC
LOW
0
VOLmax
V
,V
VOLmax, VILmax
Low-state
DC noise margin
Output-drive specs
VOLmax and VOHmin are specified for certain
output-current values, IOLmax and IOHmax.
No need to know details about the output circuit,
only the load.
(b)
(a)
"sourcing
current"
(b)
VCC
CC
"sourcing
current"
VCC
CMOS
inverter
R pp
> 1 M
VOHmin
OLmax
VIN
IN
resistive
load
R nn
> 1 M
Rp
resistive
load
IIOHmax
OLmax
VIN
resistive
load
"sinking
current"
Copyright 2000 by Prentice Hall, Inc.
Digital Design Principles and Practices, 3/e
Rn
>1
Input-loading specs
Each gate input requires a certain amount of
current to drive it in the LOW state and in the
HIGH state.
IIL and IIH
These amounts are specified by the manufacturer.
Fanout calculation
(LOW state) The sum of the IIL values of the driven
inputs may not exceed IOLmax of the driving output.
(HIGH state) The sum of the IIH values of the driven
inputs may not exceed IOHmax of the driving output.
Need to do Thevenin-equivalent calculation for nongate loads (LEDs, termination resistors, etc.)
Parameter
Min.
Typ.(2)
Max.
Unit
VIH
3.15
VIL
1.35
IIH
IIL
VCC = Max., VI = 0 V
VIK
0.7
1.2
IIOS
35
mA
VOH
VOL
ICC
Quiescent power
supply current
VCC = Min.,
VIN = VIL
IOH = 20 A
4.4
4.499
IOH = 4 mA
3.84
4.3
VCC = Min.
VIN = VIH
IOL = 20 A
.001
0.1
0.17
0.33
10
Typ.
Max.
Unit
IOL = 4 mA
VCC = Max.
VIN = GND or VCC, IO = 0
Parameter (4)
Test Conditions
Min.
R2
8 k
R1
20 k
R5
120
D1X
Q3
Q4
D1Y
Y
VA
D2X
D2Y
Q2
D3
D4
R6
4 k
R3
12 k
Q5
R4
1.5 k
R7
3 k
Q6
Phase splitter
Output stage
R2A
8 k
R5A
120
R1B
20 k
D1XB
0.35 V
Q3A
(OFF)
R2B
8 k
Q4A
(OFF)
D1YB
Q2A
(ON)
D3A
D4A
Q2B
(OFF)
R6A
4 k
2V
D2XB
D2YB
R3B
12 k
Q5A
(ON)
R4A
1.5 k
R7A
3 k
R4B
1.5 k
Q6A
(ON)
R2A
8 k
R5A
120
Q3A
(ON)
R1B
20 k
R2B
8 k
D1XB
2.7 V
Q4A
(ON)
D1YB
Q2A
(OFF)
D3A
D4A
Q2B
(ON)
R6A
4 k
2V
D2XB
D2YB
R3B
12 k
Q5A
(OFF)
R4A
1.5 k
Ileak
R7A
3 k
Q6A
(OFF)
R4B
1.5 k
ABNORMAL
LOW
0
VOHmin = 2.7 V
VIHmin = 2.0 V
High-state
DC noise margin
VILmax = 0.8 V
VOLmax = 0.5 V
Low-state
DC noise margin
CMOS levels
VCC
V =5V
VCC
OHmin
HIGH
VCC
0.7 V
CC
0.7 VCC
0.3 VCC
0.3 VCC
0
0
VOHmin
IHmin
High-state
DC noise
HIGH margin
ABNORMAL
VIHmin
High-state
DC noise margin
ABNORMAL
VILmax
HIGH
LOW
LOW
VILmax
V
VOLmax
OLmax0
ABNORMAL
Low-state
Low-state
LOW margin
DC noise
noise
margin
DC
Copyright 2000 by Prentice Hall, Inc.
Digital Design Principles and Practices, 3/e
VOHmin = 2.7 V
VIHmin = 2.0 V
VILmax = 0.8 V
VOLmax = 0.5 V
AC Loading
AC loading has become a critical design factor
as industry has moved to pure CMOS systems.
CMOS inputs have very high impedance, DC loading
is negligible.
CMOS inputs and related packaging and wiring have
significant capacitance.
Time to charge and discharge capacitance is a major
component of delay.
Transition times
(a)
(b)
tr
(c)
tf
HIGH
VIHmin
LOW
VILmax
tr
tf
Copyright 2000 by Prentice Hall, Inc.
Digital Design Principles and Practices, 3/e
Rp
RL
VOUT
VIN
Rn
CL
VL
HIGH-to-LOW transition
VCC = +5.0 V
(b)
(a)
(b)
>
1 M
200
AC load
ad
00 pF
VCC
VOUT
VOUT
= 5.0 V
VIN
100
> 1 M
VIN
IOUT = 0
IOUT
100 pF
Rn
200
> 1 M
> 1 M
100
5V
3.5 V
VOUT
1.5 V
0V
time
0
tr
pF
LOW-to-HIGH transition
VCC = +5.0 V
(a)
(b)
(b)
> 1 M
200
AC load
VOUT
=0V
VOUT
VIN
100
>
1 M
VIN
IOUT = 0
IOUT
100 pF
Rn
200
> 1 M
> 1 M
100
5V
t = RC time constant
exponential formulas, e-t/RC
3.5 V
VOUT
1.5 V
0V
time
0
tf
Transition-time considerations
Higher capacitance ==> more delay
Higher on-resistance ==> more delay
Lower on-resistance requires bigger
transistors
Slower transition times ==> more power
dissipation (output stage partially shorted)
Faster transition times ==> worse
transmission-line effects (Chapter 11)
Higher capacitance ==> more power
dissipation (CV2f power), regardless of rise
and fall time
Open-drain outputs
No PMOS transistor, use resistor pull-up
VCC
(a)
(b)
Z
A
Q1
Q2
(c)
A B
Q1
Q2
L
L
H
H
off
off
on
on
off
on
off
on
open
open
open
L
L
H
L
H
A
B
DATAOUT
Data1
Enable1
Data3
Enable3
Data5
Enable5
Data7
Enable7
Data2
Enable2
Data4
Enable4
Data6
Enable6
Data8
Enable8
5V
3.5 V
1.5 V
0V
0
50
tf
100
150
200
250
tr
300
time
Next Class
Language Elements IV
Concurrent Constructs
R.B.Ghongade
Lecture 8
when else
with select
whenelse
A concurrent statement which assigns one of
several expressions to a signal, depending on the
values of Boolean conditions which are tested in
sequence
Equivalent to a process containing an if statement
Syntax
[Label:] Target <= [Options]
Expression [after TimeExpression] when Condition
else
Expression [after TimeExpression] when Condition
else
...
Expression [after TimeExpression] [when Condition];
Where to use ?
architecture begin HERE - end
block begin HERE - end
generate begin HERE - end
Rules:
The reserved word guarded may only appear in a
signal assignment within a guarded block. A
guarded assignment only executes when the
guard expression on the surrounding block is
true
An Expression on the right hand side may be
replaced by the reserved word unaffected
Synthesis
Conditional signal assignments are synthesized to
combinational logic
The Expressions on the right hand side are multiplexed
onto the Target signal
The resulting logic will be priority encoded, because the
conditions are tested in sequence
Remarks:
Conditional and selected signal assignments are a
concise way to describe combinational logic in
Register Transfer Level descriptions, although
processes can be easier to read and maintain in some
cases
A conditional assignment is a neat way to convert from
a Boolean condition to the type Std_logic
Example
z <= a when s1=1
else
b when s2=1
else
c ;
c
MUX21
s2
MUX21
a
s1
control
in1
out1
withselect
A concurrent statement which assigns
one of several expressions to a signal,
depending on the value of the expression at
the top.
Equivalent to a process containing a case
statement
Syntax
[Label:] with Expression select
Target <= [Options]
Expression [after TimeExpression] when Choices,
Expression [after TimeExpression] when Choices,
Expression when others;
Where to use ?
architecture begin HERE end
block begin HERE end
generate begin HERE end
Rules:
Every case of the Expression at the top must be
covered once and only once by the choices
An Expression on the right hand side may be
replaced by the reserved word unaffected
All possible choices must be enumerated
others clause is important since we have 9valued logic
Synthesis
Selected signal assignments are
synthesized to combinational logic
The Expressions on the right hand side
are multiplexed onto the Target signal
Remarks:
Conditional and selected signal
assignments are a good way to describe
combinational logic in Register Transfer
Level descriptions
Example (Multiplexer)
architecture mux41 of mux is -- Assumptions
begin
-- a,b,c,d,z are
with control select
-- std_logic
z <= a when 00 ,
-- control is
b when 01 ,-- std_logic_vector(1 downto 0)
c when 10 ,
d when 11 ,
Z when others ;
end mux41 ;
a
b
c
d
z
MUX41
control
Block
Simple block
The BLOCK statement, in its simple form,
represents only a way of locally
partitioning the code
It allows a set of concurrent statements to
be clustered into a BLOCK, with the
purpose of turning the overall code more
readable and more manageable (which
might be helpful when dealing with long
codes)
Syntax
label: BLOCK
[declarative part]
BEGIN
(concurrent statements)
END BLOCK label;
General form of
architecture using
block for partitioning
ARCHITECTURE example
...
BEGIN
...
block1: BLOCK
BEGIN
...
END BLOCK block1 ;
...
block2: BLOCK
BEGIN
...
END BLOCK block2 ;
...
END example ;
label1: BLOCK
[declarative part of top block]
BEGIN
[concurrent statements of top block]
label2: BLOCK
[declarative part nested block]
BEGIN
(concurrent statements of nested block)
END BLOCK label2;
[more concurrent statements of top block]
END BLOCK label1;
Guarded block
A guarded BLOCK is a special kind of
BLOCK, which includes an additional
expression, called guard expression
A guarded statement in a guarded BLOCK is
executed only when the guard expression is
TRUE
Syntax
label: BLOCK (guard expression)
[declarative part]
BEGIN
(concurrent guarded and unguarded statements)
END BLOCK label;
Latch
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY DFF IS
PORT (d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END DFF;
DFF
Homework Problems
1)Generic encoder
2) 8- bit ALU
Operation
Function
0000 y <= a
Transfer a
Increment a
Decrement a
0011 y <= b
Transfer b
Increment b
Decrement b
0110 y <= a + b
Add a and b
Complement a
Complement b
AND
1011 y <= a OR b
OR
NAND
NOR
XOR
XNOR
Unit
Arithmetic
Logic
3) Priority Encoder
Next Class
Component Instantiation
DO NOT MISS
IN ANY CASE !
Component Instantiation
R.B.Ghongade
Lecture 9,10,11
Component
A component is analogous to a chip socket; it gives an
indirect way to use one hierarchical block within another
A component is instantiated within an architecture, and
is associated with a (lower level) entity and architecture
during elaboration using information from a
configuration.
A component declaration is similar in form to an entity
declaration, in that it includes the required ports and
parameters of the component
The difference is that it refers to a design described in a
separate VHDL file
The ports and parameters in the component declaration
may be a subset of those in the component file, but they
must have the same names
Syntax :
COMPONENT component_name
GENERIC ( parameter_name : string := default_value ;
parameter_name : integer := default_value);
PORT (input_name, input_name : IN STD_LOGIC;
bidir_name, bidir_name : INOUT STD_LOGIC;
output_name, output_name : OUT STD_LOGIC);
END COMPONENT;
Where :
package - <HERE> - end
architecture - is - <HERE> - begin - end
block - <HERE> - begin - end
generate - <HERE> - begin - end
Rules:
For default configuration, the component
name must match the name of the
corresponding entity to be used in its
place, and generics and ports must also
match in name, mode and type
Synthesis:
A component without a corresponding
design entity is synthesized as a black
box
In VHDL'93, components are not necessary. It is
possible instead to directly instantiate an entity
within an architecture.
Example
component Counter
generic (N: INTEGER);
port (Clock, Reset, Enable: in Std_logic;
Q: buffer Std_logic_vector (N-1 downto 0));
end component ;
Instantiation
A concurrent statement used to define the
design hierarchy by making a copy of a
lower level design entity within an
architecture
In VHDL'93, a direct instantiation of an
entity bypasses the component and
configuration
Syntax:
InstanceLabel: [component] ComponentName
[GenericMap] [PortMap];
InstanceLabel: entity
EntityName[(ArchitectureName)]
[GenericMap] [PortMap];
InstanceLabel: configuration ConfigurationName
[GenericMap] [PortMap];
Where:
architecture begin - <HERE> - end
block begin - <HERE> - end
generate begin - <HERE> - end
Rules:
An entity, architecture or configuration
must be compiled into a library before the
corresponding instance can be compiled
However, an instance of a component can
be compiled before the corresponding
design entity has even been written
Example :
G1: NAND2 generic map (1.2 ns)
port map (N1, N2, N3);
G2: entity WORK.Counter(RTL)
port map (Clk, Rst, Count);
Generic Map
Used to define the values of generics
Usually given in an Instance, but may also
appear in a configuration
Syntax
generic map ([Formal =>] Actual, ...)
Where :
Label : ComponentName <HERE> port map ();
for - use - <HERE> port map ()
block generic (); <HERE> ; port begin - end
Rules :
The two forms of syntax (ordered list or
explicitly named choices) can be mixed, but the
ordered list must come before the named choices
Example:
architecture Structure of Ent is
component NAND2
generic (TPLH, TPHL: TIME := 0 NS);
port (A, B: in STD_LOGIC;
F : out STD_LOGIC);
end component;
begin
G1: NAND2 generic map (1.9 NS, 2.8 NS)
port map (N1, N2, N3);
G2: NAND2 generic map (TPLH => 2 NS, TPHL => 3 NS)
port map (N4, N5, N6);
end Structure;
Port Map
A port map is typically used to define the
interconnection between instances in a
structural description (or netlist)
A port map maps signals in an
architecture to ports on an instance within
that architecture
Port maps can also appear in a
configuration or a block
Syntax:
port map ([Formal =>] Actual, ...);
Rules:
The two forms of syntax (ordered list or explicitly named
ports) can be mixed, but the ordered list must come
before the named ports
Within an instance, the formals are ports on the
component or entity being instanced, the actuals are
signals visible in the architecture containing the instance
Within a configuration, the formals are ports on the
entity, the actuals are ports on the component
If the actual is a conversion function, this is called
implicitly as values are passed in
If the formal is a conversion function, this is called
implicitly as values are passed out
Use the port names rather than order to improve readability and
reduce the risk of making connection errors
Example:
component COUNTER
port (CLK, RESET: in Std_logic;
UpDown: in Std_logic := '0';-- default value
Q: out Std_logic_vector(3 downto 0));
end component;
...
-- Positional association...
G1: COUNTER port map (Clk32MHz, RST, open, Count);
-- Named association (order doesn't matter)...
G2: COUNTER port map ( RESET => RST,
CLK => Clk32MHz,
Q(3) => Q2MHz,
Q(2) => open, -- unconnected
Q(1 downto 0) => Cnt2,
UpDown => open);
RESET
RST
Clk32MHz
Q2MHz
Cnt2
TOP LEVEL ENTITY
COUNT
CLK
Updown
COUNTER
(LOWER LEVEL ENTITY)
RST
Clk32MHz
Q2MHz
RESET
RESET
CLK
CLK
Cnt2
Q
Updown
Q(3)
G1
Updown
G2
Q(0)
COUNT
infers
ND4
IN1
c
b
U1
IN2
a
c
b
U3
IN3
a
c
b
IN4
U2
Generate statement
A concurrent statement used to create
regular structures or conditional structures
during elaboration
Used to create multiple copies of
components , processes or blocks
It provides a compact description of
regular structures such as memories ,
registers and counters
if generate
Zero or one copy is made conditionally
Syntax :
Label: for ParameterName in Range generate
[Declarations...
begin]
ConcurrentStatements...
end generate [Label];
Label: if Condition generate
[Declarations...
begin]
ConcurrentStatements...
end generate [Label];
Where:
architecture begin - <HERE> - end
block begin - <HERE> - end
generate begin - <HERE> - end
Rules :
The Range and Condition must both be
static, i.e. they cannot include signals
The Label at the beginning of the generate
statement cannot be omitted
Synthesis:
Synthesis is straightforward, but not all
synthesis tools support generate!
Example:
architecture ABC of full_add4 is
component full_add
port (PA , PB , PC : in std_logic ;
PCOUT , PSUM : out std_logic) ;
end component ;
signal c: std_logic_vector(4 downto 0);
begin
c(0) <= cin ; -- cin is declared in entity
GK : for k in 3 downto 0 generate
FA :full_add port map(A(k),B(k),C(k),C(k+1),SUM(k);
end generate GK ;
cout <= c(4) ; -- cout is declared in entity
end ABC ;
infers
A(3)
Cout
B(3)
A(2)
FA3
B(1)
C(2)
SUM(2)
A(0)
FA1
FA2
C(3)
SUM(3)
A(1)
B(2)
B(0)
FA0
C(1)
SUM(1)
SUM(0)
Cin
Another example
architecture SHIFTER_ARCH of SHIFTER is
component DFF
port (D , CLK : in std_logic ;
Q : out std_logic) ;
end component ;
begin
GK : for k in 0 to 3 generate
GK0 : IF k=0 generate
DFILPFLOP : DFF port map (count , clock , Q(k));
end generate GK0 ;
GK1_3 : if k > 0 generate
DFILPFLOP : DFF port map (Q(k-1), clock , Q(k));
end generate GK1_3 ;
end generate GK ;
end SHIFTER_ARCH ;
infers
CLOCK
COUNT
DF0
DF2
DF1
Q(0)
Q(1)
DF3
Q(2)
Q(3)
Structural Method
At the structural level, which is the lowest level, you
have to first manually design the circuit.
Use VHDL to specify the components and gates that
are needed by the circuit and how they are
connected together by following your circuit exactly
Synthesizing a structural VHDL description of a
circuit will produce a netlist that is exactly like your
original circuit
The advantage of working at the structural level is
that you have full control as to what components are
used and how they are connected.
But you need to first come up with the circuit and so
the full capabilities of the synthesizer are not utilized
Dataflow Method
At the dataflow level, you use the built-in logical
functions of VHDL in signal assignment statements
to describe a circuit, which again you have to first
design manually
Boolean functions that describe a circuit can be
easily converted to signal assignment statements
using the built-in logical functions
The only drawback is that the built-in logical
functions such as the AND and OR function only
take two operands. This is like having only 2-input
gates to work with !
All the statements use in the structural and dataflow
level are executed concurrently
Behavioral Method
Describing a circuit at the behavioral level is
most similar to writing a computer program
You have all the standard high-level
programming constructs such as the FOR
LOOP, WHILE LOOP, IF THEN ELSE,
CASE, and variable assignments
The statements are enclosed in a process
block and are executed sequentially
Example
BCD to 7- segment display decoder
a
I3
I2
I1
I0
BCD to 7-segment
display decoder
b
g
c
d
Truth-table
Logic Equations
a = I 3 + I1 + ( I 2 : I 0 )
b = I 2 + ( I1 : I 0 )
'
c = I 2 + I1 + I 0
'
d = I1I 0 + I 2 I 0 + I 2 I1 + I 2 I1 I 0
'
'
e = I1I 0 + I 2 I 0
'
'
'
'
'
'
f = I 3 + I 2 I1 + I 2 I 0 + I1 I 0
'
'
g = I 3 + ( I 2 I1 ) + I1I 0
'
'
'
Logic gates
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY bcd IS PORT(i0, i1, i2, i3: IN BIT;
a, b, c, d, e, f, g: OUT BIT);
END bcd;
ARCHITECTURE Structural OF bcd IS
COMPONENT inv PORT (i: IN BIT ;o: OUT BIT);
END COMPONENT;
COMPONENT myand2 PORT(i1, i2: IN BIT;o: OUT BIT);
END COMPONENT;
COMPONENT myand3 PORT(i1, i2, i3: IN BIT;o: OUT BIT);
END COMPONENT;
COMPONENT myor2 PORT(i1, i2: IN BIT;o: OUT BIT);
END COMPONENT;
COMPONENT myor3 PORT(i1, i2, i3: IN BIT;o: OUT BIT);
END COMPONENT;
COMPONENT myor4 PORT(i1, i2, i3, i4: IN BIT;o: OUT BIT);
END COMPONENT;
COMPONENT myxnor2 PORT(i1, i2: IN BIT;o: OUT BIT);
END COMPONENT;
COMPONENT myxor2 PORT(i1, i2: IN BIT;o: OUT BIT);
END COMPONENT;
Behavioral;
Output
Assignment No 3
xi
hsi
yi
si
xi-1
x0
yi-1
ci
Carry Lookahead Logic
g i= x i . y i
pi=xi + yi
y0
c0
ci+1= gi + pi . ci
c1= g0 + p0 . c0
Additional Information
c2= g1 + p1 . g0 + p1.p0.c0
c3= g2 + p2 . g1 + p2.p1.g0+p2.p1.p0.c0
c4= g3 + p3 . g2 + p3.p2.g1+p3.p2.p1.g0+p3.p2.p1.p0.c0
G_L= (g3+p3.g2+p3.p2.g1+p3.p2.p1.g0)
P_L=(p3.p2.p1.p0)
Next Class
Sequential Statements
generated doubt !
A[3:0]
B[3:0]
Cin
[3:0]
[3:0]
[0]
[0]
[1]
[1]
[1]
fulladder
PA
PB
PC
PCOUT
PSUM
[1]
[0]
[2]
[2]
[2]
fulladder
PA
PB
PC
PCOUT
PSUM
[2]
[1]
[3]
[3]
[3]
fulladder
PA
PB
PC
PCOUT
PSUM
[3]
[2]
fulladder
PA
PB
PC
PCOUT
PSUM
[4]
[3]
[4]
[3:0]
COUT
SUM[3:0]
[4]
[3:0]
COUT
SUM[3:0]
GK.3.FA
GK.2.FA
GK.1.FA
GK.0.FA
A[3:0]
B[3:0]
Cin
[3:0]
[3:0]
[0]
[0]
[1]
[1]
[1]
fulladder
PA
PB
PC
PCOUT
PSUM
[1]
[0]
[2]
[2]
[2]
fulladder
PA
PB
PC
PCOUT
PSUM
[2]
[1]
[3]
[3]
[3]
fulladder
PA
PB
PC
PCOUT
PSUM
[3]
[2]
fulladder
PA
PB
PC
PCOUT
PSUM
[4]
[3]
GK.3.FA
GK.2.FA
GK.1.FA
GK.0.FA
GK : for k in 0 to 3 generate
Sequential Statements
R.B.Ghongade
Lecture 12
Sequential Statements
VHDL code is inherently concurrent
Sections of code that are executed
sequentially are :
PROCESS
FUNCTION
PROCEDURE
Process
A PROCESS is a sequential section of
VHDL code
It is characterized by the presence of IF,
WAIT, CASE, or LOOP, and by a
sensitivity list (except when WAIT is used)
A PROCESS must be installed in the main
code, and is executed every time a signal
in the sensitivity list changes (or the
condition related to WAIT is fulfilled)
Syntax
[label:] [postponed] PROCESS (sensitivity list)
[VARIABLE name type [range] [:= initial_value;]]
BEGIN
(sequential code)
END [postponed] PROCESS [label];
Where
entity - begin - <HERE> - end
architecture - begin - <HERE> - end
block - begin - <HERE> - end
generate - begin - <HERE> - end
POSTPONED
is a reserved
VHDL word
Rules
A process must contain either a sensitivity
list or wait statements, but not both
Every process executes once during
initialization, before simulation starts
A postponed process is not executed until
the final simulation cycle of a particular
simulation time, and thus sees the stable
values of signals and variables
A process with neither a sensitivity list nor a wait
will loop forever !
IF construct
A sequential statement which executes one
branch from a set of branches dependent
upon the conditions, which are tested in
sequence
Syntax
[Label:] if Condition then
SequentialStatements...
[elsif Condition then
SequentialStatements...]
... {any number of elsif parts}
[else
SequentialStatements...]
end if [Label];
Be careful about the spelling of elsif and end if
Synthesis
Assignments within if statements generally
synthesize to multiplexers
Incomplete assignments, where outputs remain
unchanged for certain input conditions,
synthesize to transparent latches in unclocked
processes, and to flip-flops in clocked
processes
In some circumstances, nested if statements
synthesize to multiple logic levels. This can be
avoided by using a case statement instead
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY dff IS
PORT (d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END dff;
ARCHITECTURE behavior OF dff IS
BEGIN
PROCESS (clk, rst)
BEGIN
IF (rst='1') THEN
q <= '0';
ELSIF (clk'EVENT AND clk='1') THEN
q <= d;
END IF;
END PROCESS;
END behavior;
Output
clk
d
D[0]
Q[0]
R
rst
clk
d
D[0]
Q[0]
R
rst
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY counter IS
PORT (clk : IN STD_LOGIC; digit : OUT INTEGER
RANGE 0 TO 9);
END counter;
ARCHITECTURE counter OF counter IS
BEGIN
count: PROCESS (clk)
VARIABLE temp : INTEGER RANGE 0 TO 10;
BEGIN
IF (clk'EVENT AND clk='1') THEN
temp := temp + 1;
IF (temp=10) THEN temp := 0;
END IF;
END IF;
digit <= temp;
END PROCESS count;
END counter;
Output
[3]
digit[3:0]
[1]
[32]
[0]
[31]
[31]
[29]
count.un9_temp
[1]
[3]
temp_3[1]
[1]
[32]
D[3:0]
Q[3:0]
count.temp[3:0]
[3:0]
[3:0]
[29]
un2_temp[29:32]
[31:32]
clk
[29]
[3]
temp_3[3]
<
count.un1_temp
[31]
[1]
temp_3[1]
clk
Extra Hardware
[29]
[3]
temp_3[3]
[3]
[30]
[1]
[32]
D[3:0]
Q[3:0]
count.temp[3:0]
[3:0]
[3:0]
1
[29:32]
un2_temp[29:32]
digit[3:0]
Next Class
Sequential Statements II
R.B.Ghongade
Lecture 13
Wait statement
The operation of WAIT is sometimes
similar to that of IF
PROCESS cannot have a sensitivity list
when WAIT is employed
Three flavours of WAIT statements are:
WAIT UNTIL
WAIT ON
WAIT FOR
Syntax
Output changes
only with clk
clk
inp[7:0]
rst
[7:0]
[7:0]
D[7:0]
R
Q[7:0]
op[7:0]
[7:0]
[7:0]
op[7:0]
Syntax
Output changes
with clk and rst
clk
inp[7:0]
[7:0]
[7:0]
D[7:0]
Q[7:0]
R
rst
op[7:0]
[7:0]
[7:0]
op[7:0]
clk
d
D[0]
Q[0]
R
rst
Syntax
Case statement
CASE is another statement intended exclusively
for sequential code
The CASE statement (sequential) is very similar
to WHEN (combinational)
All permutations must be tested, so the keyword
OTHERS is often helpful
Another important keyword is NULL (the
counterpart of UNAFFECTED), which should be
used when no action is to take place
CASE allows multiple assignments for each test
condition while WHEN allows only one
Syntax
[Label:] case Expression is
when Choices =>
SequentialStatements...
when Choices =>
SequentialStatements...
... {any number of when parts}
end case [Label];
Where
process begin - <HERE> - end
function begin - <HERE> - end
procedure begin - <HERE> - end
if then - <HERE> - elsif then - <HERE>else - <HERE> - end
case - => - <HERE> - when - => - <HERE>end
loop-<HERE>-end
Rules
The Expression must not be enclosed in
parenthesis
The type of the Expression must be
enumeration, integer, physical, or a one
dimensional array
Every case of the Expression must be
covered once and only once by the
Choices
Synthesis
Assignments within case statements
generally synthesize to multiplexers
Incomplete assignments (i.e. where
outputs remain unassigned for certain
input conditions) in unclocked processes
synthesize to transparent latches
Incomplete assignments in clocked
processes synthesize to recirculation
around registers
Example
case ADDRESS
when 0 => -A <= '1';
when 1 =>
A <= '1'; --B <= '1';
when 2 to 15
is
Select a single value
C <= '1';
when 16 | 20 | 24 => -- Pick out several
-- ADDRESS values
B <= '1';
C <= '1';
D <= '1';
when others => -- Mop up the rest
null;
end case;
a
f
g
e
c
d
c
d
CLK
COUNTER
7 BITSDIGIT 2
DIGIT 1
RST
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY counter IS
PORT (clk, rst : IN STD_LOGIC;
digit1, digit2 : OUT STD_LOGIC_VECTOR (6 DOWNTO 0));
END counter;
ARCHITECTURE counter OF counter IS
BEGIN
PROCESS (clk, rst)
VARIABLE temp1: INTEGER RANGE 0 TO 10;
VARIABLE temp2: INTEGER RANGE 0 TO 10;
BEGIN
IF (rst='1') THEN
temp1 := 0;
temp2 := 0;
ELSIF (clk'EVENT AND clk='1') THEN
temp1 := temp1 + 1;
IF (temp1=10) THEN
temp1 := 0;
temp2 := temp2 + 1;
IF (temp2=10) THEN
temp2 := 0;
END IF;
END IF;
END IF;
CASE temp1 IS
WHEN 0 => digit1 <= "1111110"; --7E
WHEN 1 => digit1 <= "0110000"; --30
WHEN 2 => digit1 <= "1101101"; --6D
WHEN 3 => digit1 <= "1111001"; --79
WHEN 4 => digit1 <= "0110011"; --33
WHEN 5 => digit1 <= "1011011"; --5B
WHEN 6 => digit1 <= "1011111"; --5F
WHEN 7 => digit1 <= "1110000"; --70
WHEN 8 => digit1 <= "1111111"; --7F
WHEN 9 => digit1 <= "1111011"; --7B
WHEN OTHERS => NULL;
END CASE;
CASE temp2 IS
WHEN 0 => digit2 <= "1111110"; --7E
WHEN 1 => digit2 <= "0110000"; --30
WHEN 2 => digit2 <= "1101101"; --6D
WHEN 3 => digit2 <= "1111001"; --79
WHEN 4 => digit2 <= "0110011"; --33
WHEN 5 => digit2 <= "1011011"; --5B
WHEN 6 => digit2 <= "1011111"; --5F
WHEN 7 => digit2 <= "1110000"; --70
WHEN 8 => digit2 <= "1111111"; --7F
WHEN 9 => digit2 <= "1111011"; --7B
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END counter;
Output
Inference
Next Class
Test !!!
Loop statement
LOOP is useful when a piece of code must
be instantiated several times
Like IF, WAIT, and CASE, LOOP is
intended exclusively for sequential code,
so it too can only be used inside a
PROCESS, FUNCTION, or
PROCEDURE.
There are several ways of using LOOP
A loop is an infinite loop (and thus an
error) unless it contains an exit or wait
statement
Syntax
[label:] LOOP
(SequentialStatements)
END LOOP [label];
FOR / LOOP: The loop is repeated a fixed number of
times
[label:] FOR identifier IN range LOOP
(sequential statements)
END LOOP [label];
WHILE / LOOP: The loop is repeated until a condition no
longer holds
[label:] WHILE condition LOOP
(sequential statements)
END LOOP [label];
FOR i IN 0 TO 5 LOOP
x(i) <= enable AND w(i+2);
y(0, i) <= w(i);
END LOOP;
Example of EXIT :
FOR i IN data'RANGE LOOP
CASE data(i) IS
WHEN '0' => count:=count+1;
WHEN OTHERS => EXIT;
END CASE;
END LOOP;
Synthesis
Not generally synthesizable. Some tools
do allow loops containing wait statements
to describe implicit finite state machines,
but this is not a recommended practice
b
TOP LEVEL
cin
cout
a
a0 b0
cin
c0
s0
a1 b1
c1
a7 b7
c2
c7
s1
s
sj = aj XOR bj XOR cj
cj+1 = (aj AND bj) OR (aj AND cj) OR (bj AND cj)
s7
c8
cout
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY adder IS
GENERIC (length : INTEGER := 8);
PORT ( a, b: IN STD_LOGIC_VECTOR (length-1 DOWNTO 0);
cin: IN STD_LOGIC; s: OUT STD_LOGIC_VECTOR (length-1 DOWNTO 0);
cout: OUT STD_LOGIC);
END adder;
ARCHITECTURE adder OF adder IS
BEGIN
PROCESS (a, b, cin)
VARIABLE carry : STD_LOGIC_VECTOR (length DOWNTO 0);
BEGIN
carry(0) := cin;
FOR i IN 0 TO length-1 LOOP
s(i) <= a(i) XOR b(i) XOR carry(i);
carry(i+1) := (a(i) AND b(i)) OR (a(i) AND
carry(i)) OR (b(i) AND carry(i));
END LOOP;
cout <= carry(length);
END PROCESS;
END adder;
Output
0 0 0 1 1 0 0 0
3
2
1
0
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY LeadingZeros IS
PORT ( data: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
zeros: OUT INTEGER RANGE 0 TO 8);
END LeadingZeros;
ARCHITECTURE behavior OF LeadingZeros IS
BEGIN
PROCESS (data)
VARIABLE count: INTEGER RANGE 0 TO 8;
BEGIN
count := 0;
FOR i IN data'RANGE LOOP
CASE data(i) IS
WHEN '0' => count := count + 1;
WHEN OTHERS => EXIT;
END CASE;
END LOOP;
zeros <= count;
END PROCESS;
END behavior;
Output
Comparison between
Concurrent and Sequential
Constructs
R.B.Ghongade
Lecture 15
CASE versus IF
Though in principle the presence of ELSE in the
IF/ELSE statement might infer the
implementation of a priority decoder (which
would never occur with CASE), this will generally
not happen
When IF (a sequential statement) is used to
implement a fully combinational circuit, a
multiplexer might be inferred instead
Therefore, after optimization, the general
tendency is for a circuit synthesized from a
VHDL code based on IF not to differ from that
based on CASE
Same inference !
---- With IF: -------------IF (sel="00") THEN x<=a;
ELSIF (sel="01") THEN x<=b;
ELSIF (sel="10") THEN x<=c;
ELSE x<=d;
---- With CASE: -----------CASE sel IS
WHEN "00" => x<=a;
WHEN "01" => x<=b;
WHEN "10" => x<=c;
WHEN OTHERS => x<=d;
END CASE;
CASE
Statement type
Concurrent
Sequential
Usage
Only outside
PROCESSES,
FUNCTIONS, or
PROCEDURES
Only inside
PROCESSES,
FUNCTIONS, or
PROCEDURES
Yes for
WITH/SELECT/WHEN
Yes
Max. # of assignments
per test
No-action keyword
One
Any
UNAFFECTED
NULL
Same functionality !
---- With WHEN: ---------------WITH sel SELECT
x <= aWHEN "000",
b WHEN "001",
c WHEN "010",
UNAFFECTED WHEN OTHERS;
---- With CASE: ---------------CASE sel IS
WHEN "000" => x<=a;
WHEN "001" => x<=b;
WHEN "010" => x<=c;
WHEN OTHERS => NULL;
END CASE;
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY example IS
PORT (a, b, c, d: IN STD_LOGIC; sel: IN INTEGER RANGE 0 TO 3;
x,y: OUT STD_LOGIC);
END example;
ARCHITECTURE example OF example IS
BEGIN
PROCESS (a, b, c, d, sel)
BEGIN
IF (sel=0) THEN
x<=a;
y<=0;
ELSIF (sel=1) THEN
x<=b;
y<=1;
ELSIF (sel=2) THEN
x<=c;
ELSE
x<=d;
END IF;
END PROCESS;
END example;
Output
Implementing RAM
The circuit has a data input bus (data_in), a data output bus
(data_out), an address bus (addr), plus clock (clk) and write
enable (wr_ena) pins
When wr_ena is asserted, at the next rising edge of clk the
vector present at data_in must be stored in the position
specified by addr
The output, data_out, on the other hand, must constantly
display the data selected by addr
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY ram IS
GENERIC ( bits: INTEGER := 8; -- # of bits per word
words: INTEGER := 16); -- # of words in the memory
PORT ( wr_ena, clk: IN STD_LOGIC; addr: IN INTEGER RANGE 0 TO words-1;
data_in: IN STD_LOGIC_VECTOR (bits-1 DOWNTO 0);
data_out: OUT STD_LOGIC_VECTOR (bits-1 DOWNTO 0));
END ram;
ARCHITECTURE ram OF ram IS
TYPE vector_array IS ARRAY (0 TO words-1) OF
STD_LOGIC_VECTOR (bits-1 DOWNTO 0);
SIGNAL memory: vector_array;
BEGIN
PROCESS (clk, wr_ena)
BEGIN
IF (wr_ena='1') THEN
IF (clk'EVENT AND clk='1') THEN
memory(addr) <= data_in;
END IF;
END IF;
END PROCESS;
data_out <= memory(addr);
END ram;
Output
data_in[7:0]
addr[3:0]
wr_ena
clk
RADDR[3:0]
[7:0]
DATA[7:0]
[7:0]
[3:0]
[3:0]
ram1
[3:0]
WADDR[3:0]
WE[0]
CLK
DOUT[7:0]
memory[7:0]
[7:0]
[7:0]
data_out[7:0]
COVERED SO FAR
Packages
Frequently used pieces of VHDL code are usually written
in the form of COMPONENTS, FUNCTIONS, or
PROCEDURES
Such codes are then placed inside a PACKAGE and
compiled into the destination LIBRARY
Packages allow code partitioning, code sharing, and
code reuse
Besides COMPONENTS, FUNCTIONS, and
PROCEDURES, it can also contain TYPE and
CONSTANT definitions
A package is split into a declaration and a body
The package declaration defines the external interface to
the package, the package body typically contains the
bodies of any functions or procedures defined in the
package declaration
Syntax
{declaration}
package PackageName is
Declarations...
end [package] [PackageName];
{body}
package body PackageName is
Declarations...
end [package body] [PackageName];
REMEMBER THIS !
A simple package
LIBRARY ieee;
USE ieee.std_logic_1164.all;
PACKAGE my_package IS
TYPE state IS (st1, st2, st3, st4);
TYPE color IS (red, green, blue);
CONSTANT vec: STD_LOGIC_VECTOR(7 DOWNTO 0) := "11111111";
END my_package;
Example
LIBRARY ieee;
USE ieee.std_logic_1164.all;
PACKAGE my_package IS
TYPE state IS (st1, st2, st3, st4);
TYPE color IS (red, green, blue);
CONSTANT vec: STD_LOGIC_VECTOR(7 DOWNTO 0) := "11111111";
FUNCTION positive_edge(SIGNAL s: STD_LOGIC) RETURN BOOLEAN;
END my_package;
PACKAGE BODY my_package IS
FUNCTION positive_edge(SIGNAL s: STD_LOGIC) RETURN BOOLEAN IS
BEGIN
RETURN (s'EVENT AND s='1');
END positive_edge;
END my_package;
Functions
Used to group together executable,
sequential statements to define new
mathematical or logical functions
Also used to define bus resolution
functions, operators, and conversion
functions between data types
When defined in a package, the function
must be split into a declaration and a body
Rules :
The function_name may be an identifier or
an operator
Functions cannot assign signals or
variables defined outside themselves, nor
can then contain wait statements
A function must execute a return
statement
Pure functions cannot have side effects they must do nothing but return a value
REMEMBER THIS !
Synthesis :
Each call to a function is synthesized as a separate
block of combinational logic
Example :
FUNCTION f1 (a, b: INTEGER; SIGNAL c: STD_LOGIC_VECTOR)
RETURN BOOLEAN IS
BEGIN
(sequential statements)
END f1;
Function Call
A function is called as part of an expression. The
expression can obviously appear by itself or
associated to a statement (either concurrent or
sequential)
Examples of function calls:
x <= conv_integer(a); -- converts a to an integer
-- (expression appears by
-- itself)
y <= maximum(a, b); -- returns the largest of a
-- and b
-- (expression appears by itself)
IF x > maximum(a, b) ... -- compares x to the
-- largest of a, b
-- (expression associated to a
-- statement)
Function positive_edge( )
The FUNCTION below detects a positive
(rising) clock edge.
It is similar to the
IF (clkEVENT and clk = 1) statement
------ Function body: ----------------------------FUNCTION positive_edge(SIGNAL s: STD_LOGIC) RETURN
BOOLEAN IS
BEGIN
RETURN (s'EVENT AND s='1');
END positive_edge;
------ Function call: ----------------------------...
IF positive_edge(clk) THEN...
...
Function locations
PACKAGE
+
(PACKAGE BODY)
LIBRARY
FUNCTION/PROCEDURE
LOCATION
ENTITY
MAIN CODE
ARCHITECTURE
DECLARATIVE
PART
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE work.my_package.all;
ENTITY dff IS
PORT ( d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END dff;
ARCHITECTURE my_arch OF dff IS
BEGIN
PROCESS (clk, rst)
BEGIN
IF (rst='1') THEN q <= '0';
ELSIF positive_edge(clk) THEN q <= d;
END IF;
END PROCESS;
END my_arch;
Function conv_integer( )
LIBRARY ieee;
USE ieee.std_logic_1164.all;
PACKAGE my_package IS
FUNCTION conv_integer (SIGNAL vector:
STD_LOGIC_VECTOR) RETURN INTEGER;
END my_package;
PACKAGE BODY my_package IS
FUNCTION conv_integer (SIGNAL vector:
STD_LOGIC_VECTOR) RETURN INTEGER IS
VARIABLE result: INTEGER RANGE 0 TO 2**vector'LENGTH-1;
BEGIN
IF (vector ( vector'HIGH )='1') THEN result:=1;
ELSE result:=0;
END IF;
FOR i IN (vector'HIGH-1) DOWNTO (vector'LOW) LOOP
result:=result*2;
IF(vector(i)='1') THEN result:=result+1;
END IF;
END LOOP;
RETURN result;
END conv_integer;
END my_package;
Algorithm
3
vectorLENGTH=4
vectorHIGH=3
vector ( vector'HIGH )= 0
vector
Since vector ( vector'HIGH )= 0
result=0
Iteration 1:
since vector(2)= 1
( i = 1)
Iteration 2:
result= 1 x 2
result= 2 + 0
since vector(1)= 0
( i = 0)
Iteration 3:
result= 2 x 2
result= 4 + 1
RETURNED : result = 5
since vector(0)= 1
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE work.my_package.all;
ENTITY conv_int2 IS
PORT ( a: IN STD_LOGIC_VECTOR(0 TO 3);
y: OUT INTEGER RANGE 0 TO 15);
END conv_int2;
ARCHITECTURE my_arch OF conv_int2 IS
BEGIN
y <= conv_integer(a);
END my_arch;
PROCEDURE
A PROCEDURE is very similar to a FUNCTION
and has the same basic purposes
A procedure can return more than one value
Like a FUNCTION, two parts are necessary to
construct and use a PROCEDURE:
the procedure itself (procedure body)
procedure call
Procedure Body
PROCEDURE procedure_name [<parameter list>] IS
[declarations]
BEGIN
(sequential statements)
END procedure_name;
Example
PROCEDURE my_procedure ( a: IN BIT; SIGNAL b,
c: IN BIT;
SIGNAL x: OUT BIT_VECTOR(7 DOWNTO 0);
SIGNAL y: INOUT INTEGER RANGE 0 TO 99) IS
BEGIN
...
END my_procedure;
Procedure Call
Contrary to a FUNCTION, which is called as
part of an expression, a PROCEDURE call is a
statement on its own
It can appear by itself or associated to a
statement (either concurrent or sequential)
Examples of procedure calls:
compute_min_max(in1, in2, 1n3, out1, out2);
-- statement by itself
divide (dividend, divisor, quotient, remainder);
-- statement by itself
IF (a>b) THEN compute_min_max(in1, in2, 1n3,
out1, out2);
-- procedure call
-- associated to another
-- statement
R.B.Ghongade
Lecture 18,19
Copyright, R.B.Ghongade
Introduction
A design is always incomplete without
verification
There are several ways to verify VHDL
designs
Test benches are one of them
Test benches are also called Test cases
Concept of Testbench
Writing
stimuli
can be
performed
Simulation
of the
test bench
is the
last
DESIGN phaseconcurrently
with
of a design process.
Here youwriting
specifications
fortoeach
new design
will receive
an answer
the question;
When
stimuliThe
are specified,
aset
test should
block.
stimuli
Design
Specification
"does the system behave as
bench
specification
can
be written
contain
such
set
of
input
(and state)
expected?"
Remember
that
the
answer
It will
contain
the stimuli
and an as much
signal
values
that
covers
received
from simulating
test bench is
instantiation
of
the
designed
realonly
life
situations
asdetermined
possible.
The design
process
consists
of design
and
VERIFICATION
reliable
to
the
extent
under test).
It isfirst
the one is
verification system
phases (unit
The objective
of the
bytest
thebench
test bench
accuracy
and
and
not
design
that
will the
to create a new VHDL specification that
meets
coverage
area. during
The better
a test bench
be simulated
the verification
Stimuli
Definitions
system requirements.
is,phase.
the more confident you can be that
your system is properly designed.
Example : Multiplexer
Testbench
Waveforms
Waveforms
Error Report
SUMMARY
A Test bench thus is an effective builtin tool for verifying VHDL designs
Troubleshooting becomes easier and
faster because of the ASSERTREPORT
clause
Automation of verification is possible
because of the seamless integration of
language elements.
THANK YOU!!!
SIMULATION ISSUES
R.B.Ghongade
Lecture 20,21,22
SIMULATION ISSUES
SIMULATION
SIMULATION PROCESS
DELAY MODELING
TYPES OF SIMULATION
Simulation
Simulation is a functional emulation of a
circuit design through software programs,
that use models to replicate how a device
will perform in terms of timing and results
Simulation
Simulation eliminates the time-consuming
need for constant physical prototyping
Simulation can be performed during ALL
stages of verification
Motivation of simulation comes from the
need to verify that the HDL code is
correctly implementing the design
Simply verify that the design meets its
required specification
Flavours of Simulation
Functional Simulation: Is functional verification
of the design without any delays
Pre- Layout simulation: Is functional verification
of the design including logic cell delays
Post- Layout simulation: Is performed after
physical place and route( interconnect delays are
taken into account)
0
a1 Vcc1 b1
a2
b2
a3
b3
a4 GND b4
0
1
2
3
4
0
1
2
3
4
a1
Vcc1
b1
a2
b2
a3
b3
a4
GND
b4
5
6
7
1
2
3
4
0
a1 Vcc1 b1
a2
b2
a3
b3
a4 GND b4
0
5
6
7
8
1
2
3
4
0
a1 Vcc1 b1
a2
b2
a3
b3
a4 GND b4
0
5
6
7
8
Register
5
6
7
8
Q1
Q4
ENB
Long card
Module
Subsystem
Chip
System
Subsystem
Chip
Stimuli Development
Easier
Simulation Efficiency
Low
System
All kinds
Higher
Late
Steps in simulation
ELABORATION
INITIALISATION
EXECUTION
Steps in Simulation
COMPILATION
* Checks VHDL source code to check syntax and
semantic rules of VHDL
* If a syntax or semantic error occurs, then the
compiler flags off an error message
* Else the compiler generates an intermediate
MECHANISM
code
SEMANTICS
SCIENCE OF
MEANING
SYNTAX
OF
LANGUAGE
Steps in Simulation
cont...
ELABORATION
* Ports are created for each instance of a
component
* Memory storage is allocated for the required
signal
* Interconnections among the port signals are
specified
* Mechanism is established for executing the
VHDL process in proper sequence
Steps in Simulation
cont...
INITIALIZATION
* Initial values preset in the declarations
statements are assigned to signals/variables
Steps in Simulation
cont...
EXECUTION
* Every process is executed until it suspends.
Signal values are updated only after this.
* Simulator accepts simulation commands
like: RUN, ASSIGN,WATCH , which
control the simulation of the system
* Simulation ends when all signals have been
updated and new values have been assigned
to the signals
SIMULATION PROCESS
BASIC DEFINITIONS
EVENT
A CHANGE ON COMPONENT OUTPUT THAT
WILL BE PROPAGATED
TRANSACTION
A CHANGE ON COMPONENT INPUT THAT
DOES NOT PROPAGATE
SIMULATION PROCESS
BASIC DEFINITIONS
cont.
SCHEDULING
FUTURE EVENTS GENERATED BY
EVALUATION OF A PROCESS
EVALUATION
CALCULATING THE OUTPUTS OF
COMPONENTS BASED ON INPUTS AND
CURRENT STATE
SIMULATION PROCESS
Time Jargon
Real Time
(As it happens)
Simulation Time
(Relative to some arbitrary t=0)
SIMULATION PROCESS
Simulation executes as follows:
At t=0 , all gate outputs are set to an unknown value
Two queues are set up
SIGNALS TO BE UPDATED
PROCESSES TO BE EXECUTED
SIMULATION PROCESS
When Simulation time is incremented :
Signal is updated
All processes sensitive to that signal are
placed on the process execution queue
One loop is
called DELTA
CYCLE
SIMULATION DELTA
What is simulation delta?
Several logic changes occur simultaneously in a circuit
(concurrent operations)
But simulator being run by a sequential machine,
hence it cannot process events concurrently.
To take care this, time is frozen within the simulator.
The real time the simulator takes to complete all
concurrent operations in the queue is called
SIMULATION DELTA
SIMULATION DELTA
Zero simulation time
t=0 ns
t=1 ns
t=2 ns
t=3 ns
t=4 ns
Real Time
SIMULATION DELTA
SUMMARY
Simulation deltas allow ordering of events that occur
at the same simulation time during simulation
Simulation deltas are infinitesimal amount of time used
as synchronism mechanism when zero delay events are
present
DELAY MODELING
Delays are timing parameters given by the user for
modeling physical characteristics of hardware
Types of delays
INERTIAL DELAY
TRANSPORT DELAY
INERTIAL DELAY
It is used to model the inherent inertia of
physical devices
Example:
The input value must be stable for a specified
minimum pulse duration before the value is
allowed to propagate to the output
If the input is not stable for the specified limit,
no output change occurs
TRANSPORT DELAY
It represents pure propagation delay i.e.,
wires and interconnect delays
Signal value is assigned with a specified
delay independent of the width of the input
waveform
DELAYS
10 ns
X
3 ns
6 ns
10 ns
2 ns
Z1
Z2
Z3
TYPES OF SIMULATION
FUNCTIONAL SIMULATION
BEHAVIORAL SIMULATION
STATIC TIMING SIMULATION
GATE-LEVEL SIMULATION
SWITCH-LEVEL SIMULATION
TRANSISTOR-LEVEL OR CIRCUITLEVEL SIMULATION
TYPES OF SIMULATION
FUNCTIONAL SIMULATION
It ignores timing aspects
Verifies only the functionality of the design
BEHAVIORAL SIMULATION
A given functionality is modeled using HDL
Timing aspects are considered
TYPES OF SIMULATION
STATIC TIMING SIMULATION
A built in tool that computes delay for each
timing path
Does not require input stimuli
GATE-LEVEL SIMULATION
Is used to check the timing performance of design
Delay parameters of logic cells are used to
verify things
TYPES OF SIMULATION
SWITCH-LEVEL SIMULATION
Is one level below the gate level simulation
It models transistors as switches
It provides more accurate timing predictions
than gate-level simulation
TYPES OF SIMULATION
TRANSISTOR-LEVEL SIMULATION
Requires transistor models. Circuit is described in
terms of resistances, capacitances and voltage and
current sources
A set of mathematical equations relating current and
voltages is setup and solved numerically
Gives analog results and is most accurate
Requires large amount of computing resources
And finally!!
Simulation time depends on :
Simulation levels of logic
Physical Memory of PC
Speed of PC
State Machines
Finite state machines (FSM) constitute a
special modeling technique for sequential
logic circuits.
Such a model can be very helpful in the
design of certain types of systems,
particularly those whose tasks form a welldefined sequence
Examples are : counters, digital
controllers, sequence generators/
detectors etc
Clocked
Synchronous
Circuits
Multiple Inputs can
change at arbitrary
times and so the
output but state
changes only on clock
Feedback
Sequential
Circuits
Inputs can
change one at a
time
Combinational
+
Sequential ( Memory)
Asynchronous
Circuits
Clock-less
machines
Absence of F/F
Combinational ckts
with feedback
Outputs depend
on STATE and
INPUTS
INPUTS
NEXT STATE
LOGIC
EXCITATION
STATE
MEMORY
CURRENT STATE
OUTPUT
LOGIC
OUTPUTS
CLOCK INPUT
Outputs depend
on STATE only
CLOCK SIGNAL
MEALY MACHINE
INPUTS
NEXT STATE
LOGIC
EXCITATION
STATE
MEMORY
CURRENT STATE
OUTPUT
LOGIC
OUTPUTS
CLOCK INPUT
MOORE MACHINE
High
0/0
1/1
Rising Edge Detector
State Table
Present
State
Next State
Output
Input
Input
0
1
LOW
LOW HIGH
HIGH
LOW HIGH
Timing diagram
1/0
HIGH
clk
input
0/0
1/1
present state
LOW
output
0/0
1/1, LOW
Input :
1001
Output :
00
101
Present State :
H
H
LL
0/0, LOW
1/1, HIGH
0/0, LOW
0/0, HIGH
1/0, HIGH
Excitation Table
Present
State(S)
Input
(I)
Next State
(S*)
Output
(O)
Design
K-map for Next Sate (S*)
I
S
S* = I
I
S
O = S. I
Using D F/F
Characteristic Equation for D F/F is Q* = D
I
S*
S
D
Q
D F/F
CLK
VHDL Code
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity edge_det is port (
reset, clk, input: in bit;
output: inout bit;
mea_output: out bit );
end edge_det;
reset
clk
input
D[0]
Q[0]
D[0]
Q[0]
mea_output
present_state[0]
mealy_output.un6_present_state
mea_output
output
Sequence Detector
A state machine is to be designed to
detect a sequence such that :
X=1 , X=0, X=1, X=0
The machine will generate high output
only when it detects the proper sequence
After testing is complete it starts all over
again
State Diagram
1/0
0/0
Output
High
1/0
0/0
A
00
1/0
B
01
0/0
C
10
1/0
D
11
0/1
State Table
P_S
A
B
C
D
00
01
10
11
N_S
X=0
X=1
00
01
10
00
00
11
11
00
OUTPUT
X=0
X=1
0
0
0
0
0
0
1
0
Excitation Table
0
1
2
3
4
5
6
7
A
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
X
0
1
0
1
0
1
0
1
A*
0
0
1
0
0
1
1
0
B*
0
1
0
0
0
1
1
0
Y
0
0
0
0
0
0
1
0
K-map minimization
K-map for Next Sate (A*)
BX
00
01
11
10
A
0
1
0
0
0
4
0
1
1
5
0
0
3
7
1
1
2
6
BX
00
01
11
10
A
0
1
0
04
1
1
1
5
0
0
3
7
0
6
1
00
01
11
10
B* = BX + ABX
BX
A* = BX + ABX
0
04
0
0
1
5
0
0
3
7
0
16
Y = ABX
Hardware implementation
A
B
X
DA
QA
D F/F
(A)
A
B
X
DB
QB
D F/F
(B)
B
X
A
B
X
CLK
VHDL implementation
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity sd is
port(
x ,clk: in STD_LOGIC;
y : out STD_LOGIC;
temp : inout STD_LOGIC
);
end sd;
architecture sd of sd is
type StateType is (A, B,C,D);
signal present_state, next_state: StateType;
begin
state_machine: process(present_state) begin
case present_state is
when A =>
if (x='1') then
next_state
else
next_state
end if;
when B =>
if (x='1') then
next_state
else
next_state
end if;
when C =>
if (x='1') then
next_state
else
next_state
end if;
when D =>
if (x='1') then
next_state
else
next_state
end if;
end case;
end process state_machine;
<= B;
<= A;
<= A;
<= C;
<= D;
<= A;
<= A;
<= D;
state_clocking: process(clk)
begin
if (clk'event and clk='1') then
present_state <= next_state;
y <= temp;
end if;
end process state_clocking;
mealy_output: process(x, present_state)
begin
if (present_state=D and x='0') then
temp <= '1';
else
temp<= '0';
end if;
end process mealy_output;
end sd;
Timing diagram
Incorrect sequence
leads to state A (00)
Correct sequence
generates Y=1
[0]
[1]
Synthesis result
state_machine.next_state16
next_state_0_sqmuxa_1
next_state_1_sqmuxa_1
clk
[0]
[1]
state_machine.next_state17
next_state_0_sqmuxa_2
01
e
d
00
e
d
00
e
d
10
e
d
next_state_1_sqmuxa_2
[0]
[1]
11
e
d
00
e
d
00
e
d
[1:0]
[1:0]
D[1:0]
Q[1:0]
[0]
[1]
[1:0]
state_machine.next_state19
present_state[1:0]
next_state_1_sqmuxa
D[0]
Q[0]
11
state_machine.next_state18
d
next_state_0_sqmuxa_3
next_state[1:0]
temp
x
next_state_1_sqmuxa_3
next_state_0_sqmuxa
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity SM is
port(.. );
end SM;
architecture SM of SM is
type StateType is (A, B,C,D);
signal present_state, next_state: StateType;
begin
state_machine: process (present_state)
begin
case present_state is
when A =>
if (input condition) then
next_state <= B;
else
next_state <= A;
Use when
end if;
others as
when B =>
if (input condition) then
last case
next_state <= C;
else
next_state <= B;
end if;
when others =>
end case;
end process state_machine;
next_state <= A;
State Diagram
a3
a2
a1
001/0
001/0
001/0
001/0
001/1
010/0
010/0
a4
010/1
001/0
001/0
ab1
Start
term
010/1
010/0
b1
b2
001/1
010/0
100/1
000/0
Rs.5
0/1
Rs.2
0/1
Re.1
0/1
OP
0/1
VHDL code
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity vms is
port( clk, rst : in bit;
inp : in bit_VECTOR(2 downto 0);
rel : out bit
);
end vms;
architecture vms of vms is
type StateType is
start,a1,a2,a3,a4,ab1,b1,b2,term);
signal ps, ns: StateType;
signal temp:bit;
begin
state_machine: process(ps,inp) begin
case ps is
--start
when start => if (inp="001") then
ns <= a1;
temp<='0';
elsif (inp="010") then
ns <= b1;
temp<='0';
elsif (inp="100") then
ns <= term;
temp<='1';
else
ns <= start;
temp<='0';
end if;
--a1
when a1 => if (inp="001") then
ns <= a2;
temp<='0';
elsif (inp="010") then
ns <= ab1;
temp<='0';
else
ns <= a1;
temp<='0';
end if;
--a2
when a2 => if (inp="001") then
ns <= a3;
temp<='0';
elsif (inp="010") then
ns <= a4;
temp<='0';
else
ns <= a2;
temp<='0';
end if;
--a3
when a3 => if (inp="001") then
ns <= a4;
temp<='0';
elsif (inp="010") then
ns <= term;
temp<='1';
else
ns <= start;
temp<='0';
end if;
--a4
when a4 => if (inp="001") then
ns <= term;
temp<='1';
else
ns <= a4;
temp<='0';
end if;
--ab1
when ab1 => if (inp="010") then
ns <= term;
temp<='1';
elsif (inp="001") then
ns <= a3;
temp<='0';
else
ns <= ab1;
temp<='0';
end if;
--b1
when b1 => if (inp="010") then
ns <= b2;
temp<='0';
elsif (inp="001") then
ns <= a3;
temp<='0';
else
ns <= b1;
temp<='0';
end if;
--b2
when b2 => if (inp="001") then
ns <= term;
temp<='1';
else
ns <= b2;
temp<='0';
end if;
when term =>
ns <= start;
temp<='0';
when others =>
ns<=start;
temp<='0';
end case;
end process state_machine;
Results
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity SM is
port(.. );
end SM;
architecture SM of SM is
type StateType is (A, B,C,D);
signal present_state, next_state: StateType; signal temp: bit;
begin
state_machine: process (present_state,input)
begin
case present_state is
when A =>
if (input condition) then
next_state <= B;
temp <= 1;
else
next_state <= A;
temp <= 0;
end if;
when B =>
if (input condition) then
next_state <= C;
temp <= 0;
else
next_state <= B;
temp <= 1;
end if;
when others =>
next_state <= A;
end case;
end process state_machine;
Additional
assignment
statement
end SM;
BCD counter
State Diagram
reset
ONE
TWO
THREE
FOUR
0001
0010
0011
0100
ZERO
FIVE
0000
0101
NINE
EIGHT
SEVEN
SIX
1001
1000
0111
0110
VHDL code
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity bcd is
port(
clk : in bit;
reset : in bit;
d : out bit_vector(3 downto 0)
);
end bcd;
state_machine: process(ps)
begin
case ps is
when zero =>
d<="0000"; ns<= one;
when one =>
d<="0001";ns<= two;
when two =>
d<="0010";ns<= three;
when three =>
d<="0011";ns<=four;
when four =>
d<="0100";ns<= five;
when five =>
d<="0101";ns<=six;
when six =>
d<="0110";ns<= seven;
when seven =>
d<="0111";ns<=eight;
when eight =>
d<="1000";ns<= nine;
when nine =>
d<="1001";ns<=zero;
end case;
end process state_machine;
clocking:process(clk,reset)
begin
if (reset='1') then
ps<= zero;
elsif (clk'event and clk='1') then
ps<=ns;
end if ;
end process clocking;
end bcd;
Simulation Output
State
Reset
condition
State condition
Transition
(for Mealy , use
condition here)
begin
<= S2;
<= S3;
<= S4;
<= S5;
when S5 =>
ctr <= S6;
when S6 =>
ctr <= S7;
when S7 =>
ctr <= S8;
when S8 =>
ctr <= S9;
when S9 =>
ctr <= S10;
when S10 =>
ctr <= S1;
when others =>
null;
end case;
end if;
end if;
end process;
(ctr
(ctr
(ctr
(ctr
(ctr
(ctr
(ctr
(ctr
(ctr
(ctr
=
=
=
=
=
=
=
=
=
=
S1) else
S2) else
S3) else
S4) else
S5) else
S6) else
S7) else
S8) else
S9) else
S10) else
After synthesis
statemachine
reset
clk
I[0]
C
R
Q[9:0]
ctr[0:9]
[0:9]
[9]
0000
e
d
[8]
0001
e
d
[7]
0010
e
d
[6]
0011
e
d
[5]
0100
e
d
[4]
0101
e
d
[3]
0110
e
d
[2]
0111
e
d
[1]
1000
e
d
[0]
1001
e
d
[0:3]
[0:3]
un10[0:3]
d[3:0]
Next class
Synthesis Issues
Synthesis Issues
R.B.Ghongade
Lecture 27,28
Agenda
What is synthesis ?
Synthesis Tools : Expectations
Synthesis Tools : Features
Hardware modeling examples
Good coding Practices
Synthesis guidelines
What is synthesis ?
Synthesis is an automatic process that
converts users hardware description into
structural logic description
When we use VHDL as textual file, the
process is called VHDL Synthesis
Synthesis is a means of converting HDL
into real world hardware
Synthesis tools generate a gate-level
netlist for the target technology
What is synthesis ?
SYNTHESIS = TRANSLATION + OPTIMIZATION
x <= ( a and b ) or ( c and d );
a
a
x
x
c
d
c
d
LUT
c
d
Mix of Boolean ,
other operations
and memory
elements
Mapping
Gate Level
Technology
Specific
Netlist
RTL Synthesis
RTL Optimization
Logic extraction
High-level
description with
Boolean equations
Structured
Boolean equations
Logic Optimization
Structured
Boolean equations
Technology mapping
Gate-level
optimization
Optimized Netlist
Synthesis process
Flattening
The aim is to generate Boolean equations for each
output of module in such a way that the output value is a
direct function of inputs. These equations reflect two
level logic in SOP form.
Resulting equations do not imply any structure
Good optimization results are obtained
Caution: In case of structured logic this process would
destroy the characteristic structure and its associated
properties . e.g. carry look ahead adder
Flattening cannot be applied to every logic circuit
because the number of product terms may become very
large
Structuring
New intermediate variables are inserted
during the structuring process
E.g. If (A.B.C) occurs 10 times then the
tool may assign X= (A.B.C) and use X
everywhere
Finally , the sub-functions are substituted
into original equations
Compared to the logic before structuring,
the resulting area is reduced
DESIGN
SYNTHESIS
NETLIST
Translation process
converts RTL to a Boolean
form
Optimization is done on the
converted Boolean
equations
Optimized logic is mapped
to technology library
REPORT
Replicate logic
Replicate logic to
meet fan-out
demands
E.g. WR may be
connected to 100
points hence add
buffers to split
internally
BUF
BUF
BUF
BUF
BUF
BUF
Duplicating logic
We can duplicate the logic which generates the
signal , for minimizing fan-out
Trade-off : Loading effect of signals is reduced
hence lowering propagation delay but at the
cost of logic and interconnect complexity
D
Resource sharing
Some synthesis tools automatically perform a
limited amount of resource sharing ( for
arithmetic expressions that are mutually
exclusive)
Consider the code:
ADDSEL: process( sel, a ,b,c,d)
begin
if (sel=1 ) then
y<= a + b ;
else
y<= c + d ;
end if ;
end process ADDSEL ;
Resource sharing
a
a
c
+
+
b
y
d
sel
sel
Before resource
sharing
After resource
sharing
Signals or Variables
process (clk, a, b, c, d)
variable y, x, w : std_logic ;
begin
if (clk=1 and clkevent) then
z1<= y ;
variables are read
y : = x ;
before being written
x : = a and b ;
to , this infers a
w : = c and d ;
memory element
z2<= w ;
end if;
end process ;
Hardware inferred
Hardware inferred
Multiplexer optimization
The hardware inferred depends on the
condition given in the when others clause
case sel is
when 000 => y<= data(0);
when 001 => y<= data(1);
when 010 => y<= data(2);
when 011 => y<= data(3);
1) when others => y<= 0;
2) when others => y<= Z;
3) when others => y<= X;
4) when others => NULL;
end case;
Case 1
when others => y<= 0;
Case 2
when others => y<= Z;
Case 3
when others => y<= X;
Case 4
when others => NULL;
Design constraints
Constraining designs:
constraints are means of communicating our
requirements to the synthesis and back-end tools
maximum frequency
duty cycle
input delays
output delays
Layout constraints
Design constraints
Avoid over-constraining the design
Consequences of over-constraining are:
Design performance suffers:
critical timing paths get the best placement and
fastest routing options
as the number of critical paths increase , the ability
to obtain the design performance objectives
decrease
Synthesis guidelines
Simulate your design before synthesis
Avoid combinational loops in processes
If a port is declared to be an integer data
type, the range should be specified, else
the synthesis tool will infer a 32-bit port
Avoid mixed clock edges
if a large number of both positive and
negative edge flip-flops are required they
should be placed in different modules
Synthesis guidelines
For best results:
use technology primitives (macros) from the target
technology libraries wherever possible
try small designs on target technology to fing its
limitations and strengths
Partition the design correctly
eliminate glue logic at the top level
partition block size based on the logic function, CPU
resources and memory
separate random logic from structured logic
separate timing-sensitive modules from area -sensitive ones
Next class
CPLD, FPGA
Programmable Logic
R.B.Ghongade
Lecture 29,30,31
Programmable Logic
Programmable digital integrated circuit
Standard off-the-shelf parts
Desired functionality is implemented by configuring on-chip
logic blocks and interconnections
Advantages (compared to an ASIC):
Low development costs
Short development cycle
Device can (usually) be reprogrammed
C
Programmable switch or fuse
f1 = A B C + A B C
f2 = A B + A B C
AND plane
3
PLD - Macrocell
Can implement combinational or sequential logic
Select
A
Enable
Flip-flop
f1
MUX
D
Clock
AND plane
CPLD Structure
Integration of several PLD blocks with a programmable
interconnect on a single chip
PLD
PLD
Block
Block
PLD
PLD
Block
Block
I/O Block
Block
I/O
I/O Block
Block
I/O
Interconnection
Interconnection Matrix
Matrix
PLD
PLD
Block
Block
PLD
PLD
Block
Block
I/O Block
Block
I/O
I/O Block
Block
I/O
CPLDs Architecture
CPLD
architecture
Problems:
n times the number of inputs and outputs requires
n2 as much chip area -- too costly
logic gets slower as number of inputs to AND array
increases
CPLD families
Identical individual PLD blocks (Xilinx FBs)
replicated in different family members.
Different number of PLD blocks
Different number of I/O pins
Xilinx CPLDs
72 ==>
XC9572
10
18 macrocells per FB
36 inputs per FB (partitioning challenge, but
also reason for relatively compact size of FBs)
Macrocell outputs can go to I/O cells or back
into switch matrix to be routed to this or other
FBs.
11
OE control
12
13
9500-series
I/O block
14
Switch matrix
for XC95108
FPGAs
Historically, FPGA architectures and
companies began around the same time as
CPLDs
FPGAs are closer to programmable ASICs -large emphasis on interconnection routing
Timing is difficult to predict -- multiple hops vs. the
fixed delay of a CPLDs switch matrix.
But more scalable to large sizes.
FPGA
architecture
18
Interconnection switches
I/O
I/O
I/O
Logic block
I/O
19
Embedded microprocessors/microcontrollers
High-speed serial transceivers
20
Out
A
B
C
D
LUT
LUT
Clock
21
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0
1
1
1
0
1
1
1
0
1
1
1
0
0
0
Truth-table
A
B
C
D
LUT
LUT
LUT implementation
A
B
Z
C
D
Gate implementation
22
LUT Implementation
Example: 3-input LUT
Based on multiplexers (pass
transistors)
LUT entries stored in
configuration memory cells
X1
X2
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
Configuration memory
cells
0/1
0/1
X3
23
Programmable Interconnect
Interconnect hierarchy (not shown)
Fast local interconnect
Horizontal and vertical lines of various lengths
LE
LE
LE
LE
Switch
Matrix
LE
LE
LE
LE
Switch
Matrix
LE
LE
LE
LE
24
After Programming
Special Features
Clock management
PLL,DLL
Eliminate clock skew between external clock input and onchip clock
Low-skew global clock distribution network
27
28
FPGA specsmanship
Two flip-flops per CLB, plus two per I/O cell.
25 gates per CLB if used for logic.
32 bits of RAM per CLB if not used for logic.
All of this is valid only if your design has a
perfect fit.
29
30
32
Detail
connections
controlled by
RAM bits
33
34
I/O blocks
36
CPLD
Interconnect style
Architecture and timing
Software compile times
In-system performance
Power consumption
Applications addressed
Continuous
Predictable
Short
Fast
High
Combinational and
registered logic
FPGA
Segmented
Unpredictable
Long
Moderate
Moderate
Registered
logic only
Source: Altera
38
39
Altera
Stratix/Stratix-II
High-performance SRAM-based
FPGAs
Actel
Anti-fuse based FPGAs
Radiation tolerant
Flash-based FPGAs
Lattice
Flash-based FPGAs
CPLDs (EEPROM)
QuickLogic
ViaLink-based FPGAs
Cyclone/Cyclone-II
Low-cost feature reduced version for
cost-critical applications
MAX3000/7000 CPLDs
MAX-II: Flash-based FPGA
40
41
Altera Stratix-II
90nm process
Up to 960 I/Os
>200000 logic cells
Up to 552 18kb block RAMs (~10Mb
RAM)
192 DSP slices (18x18 multiplieraccumulator)
20 digital clock managers (DCM)
24 high-speed serial transceivers
(622Mb/s to 11.1Gb/s)
Up to four PowerPC 405 cores
90nm process
Up to 1170 I/Os
179000 logic elements
9.6Mb embedded RAM
96 DSP blocks: 380 18x18
multipliers
12 PLLs
42
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
R.B.Ghongade
Inversion
The bulk has to have the
lowest potential to ensure
reverse biased pn-junctions
(no current must flow
between drain/source
and bulk!)
VSB = 0 in the following
we relate all voltages to the
source voltage
VGS > VT n-channel is
induced (blue area between
drain and source)
White area depletion
region
A current can flow between
drain
and source, if VDS > 0
Ohmic region
Increasing VDS to a value VDS > 0
leads to a current ID.
Near the drain the voltage
responsible for the inversion is
(VGS - VT) - VDS and thus smaller
than near the source.
The channel acts like a linear
resistor - thats why this region of
operation is called ohmic.
Pinch-off
If VDS rises to the point
where it is VGS - VT,
there is no voltage near
the drain to induce an
inversion layer - the
channel is pinched off
at the drain
Saturation
Further increasing VDS
causes the pinch-off
point to move in the
direction of the source
The voltage at the pinch
off point is always VGS
VT
When the electrons
coming from the source
reach the pinch off point,
they are injected into the
depleted region and the
electric field in this
region sweeps the
electrons from the pinch
off point to the drain.
p-channel MOSFET
Cg =
K=
Cg =
K=
Cg
WL
Cg
WL
ins 0WL
D
Cg =
ins 0WL
D
ins 0WL
D
High-Frequency MOSFET
Small Signal Model
High-Frequency MOSFET
Small Signal Model
Velocity saturation
Process variations
Variations in the process parameters, such as
impurity concentration densities, oxide thicknesses,
and diffusion depths. These are caused by non-uniform
conditions during the deposition and/or the diffusion
of the impurities. This introduces variations in the sheet
resistances and transistor parameters such as the
threshold voltage
Variations in the dimensions of the devices, mainly
resulting from the limited resolution of the
photolithographic process. This causes (W/L)
variations in MOS transistors and mismatches in the
emitter areas of bipolar devices
CMOS Technology
R.B.Ghongade
Lecture 35
Wafer terminology
1. Chip = Die = Microchip = Bar
2. Scribe Lines
3. Engineering Test Die
4. Edge Die
5. Crystal Planes
6. Wafer Flats
Layering
Patterning
Doping
Change conductivity type and resistivity on selected regions of
wafer
Doping takes place to the wafer through the holes patterned in
the surface layer
Two techniques are used:
Thermal diffusion
Ion implantation
Thermal diffusion:
- heat the wafer to the vicinity of 1000C
- expose the wafer to vapors containing the desired dopant
- the dopant atoms diffuse into the wafer surface creating a p/n
region
Ion implantation:
- room temperature
- dopant atoms are accelerated to a high speed and shot into
the wafer surface
- an annealing (heating) step is necessary to reorder the crystal
structure damaged by implant
Device isolation
MOS transistors must be electrically isolated from each other in order to:
prevent unwanted conduction paths between devices
avoid creation of inversion layers outside the channel regions
reduce the leakage currents
Each device is created in dedicated regions - active areas
Each active area is surrounded by a field oxide barrier using few techniques:
A) Etched field-oxide isolation
1) grow a field oxide over the entire surface of the chip
2) pattern the oxide and define active areas
Drawbacks: -large oxide steps at the boundaries between active areas and field
regions!
-cracking of polysilicon/metal subsequent deposited layers!
Not used!
B) Local Oxidation of Silicon (LOCOS)
References
VLSI Design by Weste & Eshraghian
CMOS VLSI Design by Rabaey
VLSI Technology by Sanders
CMOS Inverter
R.B.Ghongade
Lecture 36,37
Noise Margins
NML: Noise margin associated with
a low input level
NML = VIL VOL
NMH: Noise margin associated with
a high input level
NMH = VOH - VIH
Example
On - Resistance
Output
Voltage
vO
vI VTN
Linear
High
Saturation
Linear
vI = VDD/2
VDD/2
Saturation
Saturation
Linear
Saturation
vI (VDD + VTP)
Linear
Cutoff
Region
VOL = 0
NMOS
Transistor
PMOS
Transistor
Calculation of VIL
Calculation of VIH
Calculation of Vth
Power Dissipation
Two kinds of power
dissipation in digital
electronics:
static power dissipation
(logic gate output is
stable)
dynamic power
dissipation (during
switching of logic gate)
With CMOS nearly no
static power dissipation!
Summary
AND - serially connected FET
OR - parallel connected FET
NMOS network implements
zeros
PMOS network implements
ones
W/L ratio has to be
determined as a design
parameter
Device Implementation
We now have a design netlist that completely describes our design
using the gates for a specific vendor/ device family and it has been
fully verified. It is now time to put this in a chip, referred to as Device
Implementation.
Translate consists of a number of various programs that are used to
import the design netlist and prepare it for layout. The programs will
vary among vendors. Some of the more common programs during
translate include: optimisation, translation to the physical device
elements, device-specific design rule checking (e.g. does the design
exceed the number of clock buffers available in this device). It is
during the stage of the design flow that you will be asked to select the
target device, package, speed grade and any other device-specific
options.
The translate step usually ends with a comprehensive report of the
results of all the programs executed. In addition to warnings anderrors, there is
usually a listing of device and I/O utilisation, which
helps the designer to determine if he has selected the best device.
Fitting
For CPLDs, the design step is called Fitting to Fit the design to the
target device. A section of the design is fit to the CPLD. CPLDs are a fixed
architecture so the software needs to pickthe gates and interconnect paths that
match the circuit. This is usuallya fast process.
The biggest potential problem here is if the designer has previously
assigned the exact locations of the I/O pins, commonly referred to as
Pin Locking. (Most often this is from a previous design iteration and
has now been committed to the printed circuit board layout).
Architectures (like the Xilinx XC9500 & CoolRunner CPLDs) that
support I/O pin locking have a very big advantage. They permit the
designer to keep the original I/O pin placements regardless of the
number of design changes, utilisation or required performance.
Pin locking is very important when using In-System Programming ISP. This means that if you layout your PCB to accept a specific pin
out then if you need to change the design you can re-programme
confident that you pin out will stay the same.
Downloading Design
Download generally refers to volatile devices such as SRAM FPGAs.
As the name implies, you download the device configuration
information into the device memory. The Bitstream that is transferred
contains all the information to define the logic and interconnect of the
design and is different for every design. Since SRAM devices lose their
configuration when the power is turned off, the bitstream must be
stored somewhere for a production solution. A common such place is
a serial PROM. There is an associated piece of hardware that
connects from the computer to a board containing the target device.
Program is used to program all non-volatile programmable logic
devices including serial PROMs. Programming performs the same
function as download except that the configuration information is
retained after the power is removed from the device. For antifuse
devices, programming can only be done one per device. (Hence the
term One-Time Programmable, OTP).
System Debug
At this point in the design flow, the device is now working but were not
done yet. We need to do a System Debug - verify that our device
works in the actual board. This is truly the moment of truth because
any major problems here means the engineer has made a assumption
on the device specification that is incorrect or has not considered
some aspect of the signal required to/from the programmable logic
device. If so, he will then collect data on the problem and go back to
the drawing (or behavioural) board!
Additional Topics
R.B.Ghongade
Lecture 39
th
CLK
tplh
tphl
Inputs(X)
Combinational
Network
Next State
Clock
State
Reg
State
Assume :
max propagation delay for combinational network = tcmax
max propagation delay from the time the clock changes to the FF
output changes= tpmax where tpmax=max(tphl,tplh)
Then the max time from active clock edge to the time the change in Q
propagates back to DFF inputs= tpmax+tcmax
If clock period is tck, the D inputs must be stable tsu before the end of
clock peiod, hence
tck tpmax+tcmax+tsu
E.g. If max gate delay is 15 ns , tpmax=15 ns, tsu=5 ns then
tck ( 2 x 15 ) +15 + 5 = 50 ns
therefore max clock frequency= 1/tck = 20 MHz
A hold time violation could occur if the change in Q fed back through the
combinational network and caused D to change too soon after the clock
edge.
The hold time is satisfied if
tpmin +tcmin th