Transcript ppt
INTRO TO VLSI DESIGN (CPE 448)
(VHDL Tutorial)
Prof: Asuif Mahmood
VHDL is a language that is used to describe the behavior of
digital circuit designs.
VHDL designs can be simulated and translated into a form
suitable for hardware implementation.
Introduction to VHDL
Developed by Department of Defense (DoD) between 1970s
and 80s, it was officially standardized as IEEE 1076 in 1987.
IEEE 1164 is the latest standardization that bring about the
interoperability between the common packages used by EDA
venders.
VHDL is now used extensively by industry and academia for
the purpose of simulating and synthesizing digital circuit
designs.
History of VHDL
Process flow of Digital System Design can be described more
by following flow:
Requirement
Functional Design
Behavioral Simulation
Register Transfer Level Design
RTL Simulation Validation
Logic Design
Logic Simulation Verification, Fault Simulation
Circuit Design
Timing Simulation , Circuit Analysis
Physical Design
Design Rule Checking
Digital System Design
Based on implementation the type and level of abstraction is
decided.
In most of the implementation one is preferred over other.
Register Transfer
Registers
Gates
Boolean Expressions
Transistors
Transfer Functions
Cell
Modules
Chips
Boards
PHYSICAL
Design View and Abstraction Level
Interoperability : The VHDL language provides set of constructs
that can be applied at multiple levels of abstractions and multiple
view of system. This significantly expands the scope of the
application of the language.
Technology Independence: Independent of CPLD or FPGA can
be used for ASIC as will.
Design Reuse: Once created be used components for future
usages.
Benefits of VHDL
Case Sensitivity: VHDL is not case sensitive.
Dout <= A and B;
doUt <= a AND b;
White Space : VHDL is not sensitive to white space (spaces and
tabs).
nQ <= In_a or In_b;
nQ <= In_a or
In_b;
Comments: Comments in VHDL begin with “--“ .
-- This next section of code is used to blah-blah
-- blah-blah blah-blah. This type of comment is the best
-- fake for block-style commenting.
PS <= NS_reg;
-- Assign next state value to present state
VHDL Invariants
Parenthesis: a better idea is to practice liberal use of parenthesis
to ensure the human reader of your source code understands the
purpose the code.
if x = ‘0’ and y = ‘0’ or z = ‘1’ then
blah;
end if;
if ( ((x = ‘0’) and (y = ‘0’)) or (z = ‘1’) ) then
blah;
end if;
VHDL Statements : Every VHDL statement is terminated with a
semicolon.
big_sig_b : in std_logic;
sv0, sv1 : in std_logic;
VHDL Invariants(cont.)
if, case, and loop Statements:
Every if statement has a corresponding then component
Each if statement is terminated with an “end if”
If you need to use an “else if” construct, the VHDL version is
“elsif”
Each case statement is terminated with an “end case”
Each loop statement has a corresponding “end loop“
statement
VHDL Invariants(cont.)
Identifiers : An identifier refers to the name given to discern
various items in VHDL (variable names, signal names, and
port names).
Listed below are the hard and soft rules:
Identifiers should be self-commenting. In other words, the text
you apply to identifiers should provide information as to the use
and purpose of the item the identifier represents.
Identifiers can be as long as you want (contain many characters).
Shorter names make for more readable code, but longer names
present more information. It’s up to the designer to choose a
reasonable identifier length.
VHDL Invariants(cont.)
Identifiers must start with an alphabetic character.
Identifiers must not end with an underscore and must never have
two consecutive.
Examples:
VHDL Invariants(cont.)
Reserved Words: There is a list of words that have been
assigned special meaning by the VHDL language:
VHDL Invariants(cont.)
Coding style refers to the appearance of the VHDL source
code.
Best Practice :
Purposes for VHDL is Documentation , Synthesis and Simulation.
Document your code . So other people can understand your code.
Your code should be written readable.
Use uppercase for all VHDL keywords.
Use lowercase for all identifiers.
The color highlighting used be Altera Quartus II has been used to
enhance the readability of the VHDL code fragments.
VHDL Coding Style
VHDL Operators
A digital system in VHDL consists of a design Entity that can
contain other entities that are then considered components of
the top-level entity.
Each entity is modeled by an entity declaration and an
architecture body.
Entity declaration consider as the interface to the outside
world that defines the input and output signals.
Architecture body contains the description of the entity and is
composed of interconnected entities , processes and
components, all operating concurrently.
Basic VHDL Design Units
VHDL Entity
Ports
Interface
(Entity declaration)
Body
(Architecture )
Sequential,
Combinational
processes
Subprogram
Basic VHDL Design Units (Cont.)
A. Entity Declaration: The entity declaration defines the NAME
of the entity and lists the input and output ports. The general
form is as follows:
ENTITY NAME_OF_ENTITY IS
PORT (signal_names: mode type;
signal_names: mode type;
:
signal_names: mode type);
END [NAME_OF_ENTITY] ;
An entity always starts with the keyword entity, followed by its name
and the keyword is.
Entity
Next are the port declarations using the keyword port.
An entity declaration always ends with the keyword end, optionally [ ]
followed by the name of the entity.
The NAME_OF_ENTITY is a user-selected identifier.
signal names consists of a comma separated list of one or more userselected identifiers that specify external interface signals.
mode: is one of the reserved words to indicate the signal direction:
in – indicates that the signal is an input
out – indicates that the signal is an output of the entity whose value can only
be read by other entities that use it.
buffer – indicates that the signal is an output of the entity whose value can
be read inside the entity’s architecture.
inout – the signal can be an input or an output.
Entity (cont.)
Type: a built-in or user-defined signal type. Examples:
bit – can have the value 0 and 1.
bit_vector – is a vector of bit values (e.g. bit_vector (0 to 7)
std_logic, std_ulogic, std_logic_vector, std_ulogic_vector: can have 9
values to indicate the value and strength of a signal. Std_ulogic and std_logic
are preferred over the bit or bit_vector types.
boolean – can have the value TRUE and FALSE.
integer – can have a range of integer values.
real – can have a range of real values.
character – any printing character.
time – to indicate time.
Entity (Cont.)
Example 1:
Full adder:
a
b
c
Full
Adder
sum
carry
Entity fulladder IS
PORT(a, b, c: IN std_logic;
sum, carry: OUT std_logic);
END fulladder;
Entity (cont.)
Example2:
AND Gate:
a
b
c
Entity andgate IS
PORT(
a: IN std_logic;
b: IN std_logic;
c: OUT std_logic);
END andgate;
Entity (cont.)
B. Architecture body:
The architecture body specifies how the circuit operates and how it is
implemented.
An entity or circuit can be specified in a variety of ways, such as
behavioral, structural (interconnected components), or dataflow.
The architecture body looks as follows:
ARCHITECTURE architecture_name OF NAME_OF_ENTITY IS
-- Declarations
-- components declarations
-- signal declarations
-- constant declarations
-- function declarations
-- procedure declarations
-- type declarations
BEGIN
-- Statements
END architecture_name;
Entity (cont.)
Example :
AND Gate:
a
b
Entity andgate IS
PORT(
a: IN std_logic;
b: IN std_logic;
c: OUT std_logic);
END andgate;
ARCHITECTURE synthesis1 OF andgate IS
BEGIN
c <= a AND b;
END synthesis1;
Entity (cont.)
c
C. Library and Packages: library and use keywords
A library can be considered as a place where the compiler stores
information about a design project.
A VHDL package is a file or module that contains declarations of
commonly used objects, data type, component declarations, signal,
procedures and functions that can be shared among different VHDL
models.
std_logic is defined in the package ieee.std_logic_1164 in the ieee
library.
In order to use the std_logic one needs to specify the library and
package.
Entity (cont.)
This is done at the beginning of the VHDL file using the library and the
use keywords as follows:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
The .all extension indicates to use all of the ieee.std_logic_1164
package.
Entity (cont.)
Example1:
a
Half Adder
b
Half
Adder
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY half_adder IS
PORT( a,b
: in bit;
sum,carry : out bit);
END half_adder;
ARCHITECTURE bool OF half_adder IS
BEGIN
sum <= (a xor b);
carry <= (a and b);
END bool;
Simple System Design
sum
carry
Example 2:
4 bit comparator:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
Entity eq_comp4 IS
PORT (
a,b
equals
END eq_comp4;
: in bit_vector(3 downto 0);
: out bit);
AECHITECTURE dataflow OF eq_comp4 IS
BEGIN
equals <= '1'
when (a = b)
else '0';
END dataflow;
Simple System Design (cont.)
From the level of abstraction systems can be described in
there types:
1. Behavioral
2. Dataflow
3. Structural
Basic System Descriptions
We can describe a system in terms of processing it performs
on its input signals and the type of output it signals it produces.
Example :
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
IF (a=b) then
equals <= '1';
Else
ENTITY eq_comp4 is
equals <= '0';
PORT(
END IF;
a,b
: in std_logic_vector(3 downto 0);
END PROCESS comp;
equals : out std_logic);
END behvioral;
END ;
ARCHITECTURE behvioral OF eq_comp4 IS
BEGIN
comp: PROCESS (a,b)
BEGIN
Behavioral
Dataflow architecture specifies how data will be transferred
from signal to signal and input to input without the sequential
statements.
Some distinguish between dataflow and behavioral others
lump them together in behavioral description.
Primary difference is that behavioral uses processes while
dataflow does not.
The other main difference between dataflow and behavioral
architectures is that the body of the process statement
contains only sequential statements.
Dataflow
Example 1 :
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
Entity eq_comp4 IS
PORT (
a,b
equals
END eq_comp4;
: in bit_vector(3 downto 0);
: out bit);
AECHITECTURE dataflow OF eq_comp4 IS
BEGIN
equals <= '1'
when (a = b)
else '0';
END dataflow;
Dataflow
Example 2:
library ieee;
use ieee.std_logic_1164.all;
entity eq_comp4 is
port (
a,b
equals
end eq_comp4;
: in std_logic_vector(3 downto 0);
: out std_logic);
architecture bool of eq_comp4 is
begin
equals <= not (a(0) xor b(0))
and not (a(1) xor b(1))
and not (a(2) xor b(2))
and not (a(3) xor b(3));
end bool;
Dataflow (cont.)
One way to describe a system is to describe component chips and
the interconnections assuming that the user is familiar with it.
This kind of definition is the structural definition.
Example 1:
library ieee;
use ieee.std_logic_1164.all;
architecture bool of full_adder is
signal s1,s2,s3 : std_ulogic;
begin
entity full_adder is
u0: s1 <= (a xor b);
port(
u1: s2 <= (ci and s1);
a,b,ci : in std_logic;
u2: s3 <= (a and b);
sum,co : out std_logic);
u3: sum <= (s1 xor ci);
u4 : co <= (s2 or s3);
end full_adder;
end bool;
Structural
Example 2:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity fa_en is
port(A,B,Cin:in bit; SUM, CARRY:out bit);
end fa_en;
architecture fa_ar of fa_en is
component ha_en
port(A,B:in bit;S,C:out bit);
end component;
signal C1,C2,S1:bit;
begin
HA1:ha_en port map(A,B,S1,C1);
HA2:ha_en port map(S1,Cin,SUM,C2);
CARRY <= C1 or C2;
end fa_ar;
entity ha_en is
port(
A,B : in BIT;
S,C : out BIT);
end ha_en;
architecture ha_beha_ar of ha_en is
begin
process_beh:process(A,B)
begin
S<= A xor B;
C<=A and B;
end process process_beh;
end ha_beha_ar;
Structural (cont.)
Example 3 (not complete):
library ieee;
use ieee.std_logic_1164.all;
entity eq_comp4 is
port (
a,b
equals
: in std_logic_vector(3 downto 0);
: out std_logic);
end eq_comp4;
architecture struct of eq_comp4 is
signal x : std_logic_vector(3 downto 0);
Begin
U0: xnor_2 port map (a(0),b(0),x(0));
U1: xnor_2 port map (a(1),b(0),x(0));
U2: xnor_2 port map (a(2),b(0),x(0));
U3: xnor_2 port map (a(3),b(0),x(0));
U4: and_4 port map (x(0),x(1),x(2),x(3),equals);
End struct;
Structural (cont.)
Component declaration
COMPONENT identifier IS
[ generic (generic_interface_list ); ]
[ port (port_interface_list ); ]
END COMPONENT [ identifier ];
COMPONENT flipflop IS
generic (Tprop, Tsetup, Thold : delay_length);
port (clk, clr, d
:
in bit;
q
:
out bit );
END COMPONENT flipflop;
Components
Example:
entity reg4 is
port (clk, clr : in
bit;
d
: in
bit_vector(0 to 3);
q
: out
bit_vector(0 to 3);
end entity reg4;
architecture struct of reg4 is
component flipflop is
generic (Tprop, Tsetup, Thold
: delay_length);
port ( clk, clr, d
: in bit;
q
: out bit);
end component flipflop;
begin
bit0:
component flipflop
generic map ( Tprop => 2 ns, Tsetup => 2ns, Thold => 1ns)
port map ( clk => clk, clr => clr, d => d(0), q => q(0) );
bit1:
component flipflop
generic map ( Tprop => 2 ns, Tsetup => 2ns, Thold => 1ns)
port map ( clk => clk, clr => clr, d => d(1), q => q(1) );
bit2:
component flipflop
generic map ( Tprop => 2 ns, Tsetup => 2ns, Thold => 1ns)
port map ( clk => clk, clr => clr, d => d(2), q => q(2) );
bit3:
component flipflop
generic map ( Tprop => 2 ns, Tsetup => 2ns, Thold => 1ns)
port map ( clk => clk, clr => clr, d => d(3), q => q(3) );
end architecture struct;
Component Example
We will use in this course Quartus II Software to write the
VHDL projects.
The software already installed on all Computers at the
technology Building LAB110,LAB111 and LAB113.
You can install the Quartus II Software on your PC or your
laptop.
To install the software on your computer Click Here
Quartus II Software
Handout: Quick Start Guide.pdf
You can watch the videos online or you can download it:
Online:
1. https://mysupport.altera.com/etraining/webex/QII_80_Intro/player.html
2. https://mysupport.altera.com/etraining/webex/Tutorial/qtutorial.htm
Download:
1. https://mysupport.altera.com/etraining/webex/QII_80_Intro/QII80.zip
2. https://mysupport.altera.com/etraining/webex/Tutorial/Tutorial.zip
Handout and Videos
Read all Handouts what I gave you in the lab.
Watch the videos.
Practice the all examples which in the handouts:
Understand each later in the example.
You have to submit hard copy of your assignment.
You have to do demo during the next lab.
Be ready for questions.
Please do not copy from any one.
First Assignment