vhdl final

Upload: manish-yadav

Post on 05-Apr-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/31/2019 VHDL Final

    1/152

    1

    Agenda

    INTRODUCTIONELEMENTS OF VHDL

    LANGUAGE ELEMENTS

    CONCURRENT STATEMENTS

    SEQUENTIAL STATEMENTS

    SIGNALS & VARIABLES

    GENERICS

    MULTIVALUED LOGIC SYSTEM

    OPERATOR OVERLOADING

    PACKAGES

  • 7/31/2019 VHDL Final

    2/152

    2

    Introduction

    WHAT IS VHDL?

    FEATURES OF VHDL

    HISTORY OF VHDL

    LEVELS OF ABSTRACTION

  • 7/31/2019 VHDL Final

    3/152

    3

    What is VHDL?

    VHDL stands for

    Very High Speed Integrated Circuits Hardware

    Description Language.

    It is a Hardware description Language

    Digital system design using HDLs is an established methodology in

    EDA ( Electronic Design Automation).

  • 7/31/2019 VHDL Final

    4/152

    4

    Features of VHDL

    VHDL is the amalgamation of following languages:

    Concurrent Language

    Sequential Language

    Timing Specification

    Simulation Language

    Test Language

    Design Hierarchies to create Modular designs

    Facilitates device independent design and Portability

    It has all the features that

    real life hardware has

  • 7/31/2019 VHDL Final

    5/152

    5

    Concurrent Language

    Concurrent Statements execute at the same time in parallel, as inHardware.

    Z

  • 7/31/2019 VHDL Final

    6/152

    6

    Sequential Language

    Sequential Statements execute one at a time in sequence.As the case with any conventional language

    Sequence of statements is important.

  • 7/31/2019 VHDL Final

    7/152

    7

    Timing Specification

    clock waveform

    process

    beginclock

  • 7/31/2019 VHDL Final

    8/152

    8

    Test Language

    Test bench- Is part of a VHDL model that generates a set of test vectors and

    sends them to the Module being tested.

    - Collects the responses made by the Module Under Test and

    compares them against a specification of correct results.

    Need

    To ensure that design is correct.

    Model is operating as required.

  • 7/31/2019 VHDL Final

    9/152

    9

    Design Hierarchy

    Hierarchy can be represented using VHDL.

    Consider example of a Full-adder which is the top-level module,

    being composed of three lower level modules i.e. Half-Adder and

    OR gate.

  • 7/31/2019 VHDL Final

    10/152

    10

    History of VHDL

    In 1981 the Institute for Defense Analysis (IDA) had arranged aworkshop to study

    Various Hardware Description methods

    Need for a standard language

    Features required by such a standard.

    A team of three companies, IBM, Texas Instruments, and Intermetricswere awarded contract by DoD to develop a language.

    Version 7.2 of VHDL was released along with Language Reference

    Manual (LRM) in 1985.

    Standardized by IEEE in 1987 known as the IEEE Std 1076-1987.

  • 7/31/2019 VHDL Final

    11/152

    11

    DETAIL

    ABSTRACTION =DETAIL

    1

    OR

    ABSTRACTION =

    Abstraction

    THEREFORE Highest Level of abstraction means Lowest Level Ofdetail.

    DETAILS OF WHAT ??Finally we want to make a Chip,Hence Levels of Abstraction Tell us as too how close is our descriptionto What is required to make a chip.

  • 7/31/2019 VHDL Final

    12/152

    12

    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.

    There are four main levels of Abstraction.

    Layout Level

    Logic level

    Register Transfer Level

    Behavioral Level

  • 7/31/2019 VHDL Final

    13/152

    13

    Layout Level

    Lowest level of Abstraction.

    Specifies

    Actual layout of design on

    Silicon

    Contains

    Detailed timing information,

    and analog effects.

  • 7/31/2019 VHDL Final

    14/152

    14

    Logic Level

    Design has information about

    Function

    Architecture

    Technology

    Detailed timings

    Layout information and analog

    effects are ignored.

  • 7/31/2019 VHDL Final

    15/152

    15

    Register Transfer Level

    Using HDLs every register in

    the design, and the logic in

    between is defined

    Design contains Architecture information

    No details of Technology

    No specification of

    absolute timing delays.

  • 7/31/2019 VHDL Final

    16/152

    16

    Register Transfer Level

    Entire Design is partitioned between clocked and combinationalprocesses. E.g. up down / synchronous counter

    Comblogic

    ComblogicFLIP

    FLOP

    FLIP

    FLOP

  • 7/31/2019 VHDL Final

    17/152

    17

    Behavioral Level

    Describing function of a designusing HDLs, without specifying

    the architecture of registers.

    Contains timing information

    required to represent a function.

  • 7/31/2019 VHDL Final

    18/152

    18

    Behavioral Level

    Behavioral Model of an AND gate.

    architecture and_gate_arch of and_gate is

    begin

    process(a,b)

    begin

    if (a = '1' and b = '1') then

    c

  • 7/31/2019 VHDL Final

    19/152

  • 7/31/2019 VHDL Final

    20/152

    20

    Entity

    Equivalent to pin configuration of an IC.

    Syntax:

    entity entity_name is

    port (port_list) ;

    end entity_name;

    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 ;

  • 7/31/2019 VHDL Final

    21/152

    21

    Entity

    VHDL design description must include, ONLY ONE ENTITY

    Entity Declaration

    Defines the input and output ports of the design.

    Each port in the port list must be given,

    a name

    data flow direction

    a type.

    Can be used as a component in other entities after being compiledinto a library.

  • 7/31/2019 VHDL Final

    22/152

    22

    Entity

    Proper documentation of the ports in an entity is very important.

    A specified port should have a self explanatory name that provides

    information about its function.

    Ports should be well documented with comments at the end of the

    line providing additional information about the signal.

    Consider example of an ALU.

  • 7/31/2019 VHDL Final

    23/152

    23

    Entity

    entity ALU isport (

    In1 : in std_logic_vector (3 downto 0); -- first operand

    In2 : in std_logic_vector (3 downto 0); -- second operand

    Opsel : in std_logic_vector (3 downto 0); -- operation select

    Cin : in std_logic; -- carry in

    Mode : in std_logic; -- mode arithm/logic

    Result : out std_logic_vector (3 downto 0); -- operation result

    Cout : out std_logic; -- carry out

    Equal : out std_logic ); -- Is 1 when In1 = In2end ALU;

  • 7/31/2019 VHDL Final

    24/152

    24

    Modes

    Signal in the port has a Mode which indicates the driver direction.

    Mode also indicates whether or not the port can be read from within

    the entity.

    Four types of Modes are used in VHDL.

    Mode IN

    Mode OUT

    Mode INOUT

    Mode BUFFER

  • 7/31/2019 VHDL Final

    25/152

    25

    Mode IN

    Value can be read but not assigned.

    Example:

    entity driver isport ( A : in std_logic;

    ) ;

    end driver ;

    Drivers reside

    outside the entity

    Port Signal Entity

  • 7/31/2019 VHDL Final

    26/152

    26

    Mode OUT

    Value can be assigned but not read.

    Example:

    entity driver is

    port ( B : out std_logic;

    ) ;

    end driver ;

    Entity

    Drivers resideinside the entity

    Port Signal

  • 7/31/2019 VHDL Final

    27/152

    27

    Mode INOUT

    Bi-directionalValue can be read and

    assigned

    Example:

    entity driver is

    port (Data : inout std_logic) ;

    end driver;

    Entity

    Drivers may reside both

    inside and outside the entity

    Port signal

    Signal can be

    read insidethe entity.

    Data

    Always need a control signal to control direction of signal flow.

  • 7/31/2019 VHDL Final

    28/152

    28

    Mode BUFFER

    Output port with Internal read

    capability

    Example:

    entity driver is

    port (Count : buffer std_logic ) ;

    end driver ;

    Count

    Entity

    Driver reside

    Inside the entity

    Signal inside can beread inside the entity

    Note does not exists in real life hardware but are included for

    convenience.

  • 7/31/2019 VHDL Final

    29/152

    29

    Architecture

    Specifies,

    Behavior

    Function

    Relationship between inputs and outputs of an entity.

    Syntax:

    architecture architecture_name ofentity_name is

    declarations

    beginconcurrent_statements

    end [ architecture_name ];

  • 7/31/2019 VHDL Final

    30/152

    30

    Architecture

    Equivalent to truth table.

    Example:

    A B C

    L L L

    L H L

    H L L

  • 7/31/2019 VHDL Final

    31/152

    31

    Architecture

    Can contain only Concurrent Statements.

    A design can be described in an Architecture using various Levels

    of Abstraction.

    To facilitate faster design

    Better understanding

    Lesser complexity.

    AN ENTITY CAN HAVE MORE THAN ONE ARCHITECTURE!!

    There can be no architecture without an Entity.

  • 7/31/2019 VHDL Final

    32/152

    32

    Architecture Bodies

    Behavioral

    Also known as High-level

    Descriptions.

    Consists of a set of

    assignment statements to

    represent behavior.

    No need to focus on thegate-level implementation

    of a design.

  • 7/31/2019 VHDL Final

    33/152

    33

    Architecture Bodies

    Dataflow

    Use concurrent signal assignment statements.

  • 7/31/2019 VHDL Final

    34/152

    34

    Architecture Bodies

    Structural

    Components from libraries are

    connected together.

    Designs are hierarchical.

    Each component can be

    individually simulated.

    Consists of VHDL netlists.

    It is possible to mix the three Modeling styles in a single

    architecture body.

  • 7/31/2019 VHDL Final

    35/152

    35

    Comparing Architectural Bodies

    A structural design methodology is used to

    Split a design into manageable units.

    Silicon vendors provide libraries which can be used to instantiatecomponents that represent device-specific resources and

    optimized structures.

    eg. LogiBLOX in Xilinx Tool.

    Synthesis tools have in-built algorithms that find the optimal

    solution regardless of the form of description.

  • 7/31/2019 VHDL Final

    36/152

    36

    Configuration

    NEED:

  • 7/31/2019 VHDL Final

    37/152

    37

    Configuration declaration is used to select one of the many

    architectures that an entity may have.

    Syntax:

    Configuration

    configuration configuration_name of entity_name is

    for architecture_name

    for instantiation:component_name

    use library_name.entity_name(architecture_name);

    end for;

    end for;

    end configuration_name;

  • 7/31/2019 VHDL Final

    38/152

    38

    Configuration

    entity gates is

    port (a,b : in STD_LOGIC;

    c: out STD_LOGIC );

    end gates;

    architecture and2_arch of gates isbegin

    c

  • 7/31/2019 VHDL Final

    39/152

    39

    Language Elements

    VHDL is a strongly TYPED Language.

    VHDL is not case sensitive.

    VHDL supports a variety of data types and operators.

    OBJECTS

    OPERATORS

    AGGREGATES

  • 7/31/2019 VHDL Final

    40/152

    40

    OBJECTS

    Objects are used to represent & store the data in the system being

    described in VHDL.

    Object contains a value of a specific type. For ex:

    object

    SIGNAL COUNT : INTEGER

    class Data type

    The name given to object (also port ) is called as identifier.

    RESERVED WORDS cannot be used as identifiesEach object has a type & class.

    Class indicates how the object is used in the model & what can bedone with the object.

    Type indicates what type of data the object contains.

    results in an object calledcount which holds integer value

  • 7/31/2019 VHDL Final

    41/152

    41

    OBJECTS

    Each object belong to one of the following

    CLASS

    CONSTANT SIGNAL VARIABLE

    The set of values that each object can hold is specified byDATA TYPES

    SCALAR ACCESS FILE COMPOSITE

    Integer Real Enumerated Physical Array

  • 7/31/2019 VHDL Final

    42/152

    42

    CONSTANTS

    These are identifiers with fixed value.

    The value is assigned only once, when declared.

    Value cannot be changed during simulation.

    Example:

    constant Bus_Width : Integer := 16;

    constant CLK_Period : Time := 15 ns;

    Constants makes the design description more readable.

    Design changes at later time becomes easy.

  • 7/31/2019 VHDL Final

    43/152

    43

    Scalar data types Enumerated

    This declaration defines a set of user-defined values consisting of

    identifiers & character literals.

    User defined enumeration

    type micro_op is ( load, store, add, sub, mul, div )

    As shown micro_op is enumerated types & supports the values load,

    store, add & sub. Values of enumeration type has position number associated with them.

    Compiler encodes these enumeration literals in ascending order.

    Predefined enumeration types :

    Bit :Supports the values 0 & 1.

    Boolean : Supports literals FALSE & TRUE is defined as

    variable error_flag : boolean := true.

    Std_logic_type : Data type defined in the std_logic_1164 package of

    IEEE library. It is defined as

    type std_logic is (U, X, 0, 1, Z, W, L, H);

  • 7/31/2019 VHDL Final

    44/152

    44

    SCALAR DATA TYPES

    OBJECTS OF PHYSICAL TYPE ARE NOT SYNTHESISABLE ??

    Data type Meaning Example

    Integer Has set of values that

    follow within specific range

    signal count : integer range 0

    to 8

    Real Has a set of values ingiven range of real

    numbers.

    signal real_data : real range0.0 to 35.5

    Physical Used to represent physical

    quantities such as current,

    time distance

    Constant set_up : time := 2 ns.

  • 7/31/2019 VHDL Final

    45/152

    45

    COMPOSITE DATA TYPES

    Composite Data Types represents collection of values.

    ARRAY - : Consists of the elements that have same type.

    Vector ( special case of single dimensional array )

    Ex signal A : std_logic_vector (7 downto 0);

    Two dimensional array (typical application is a memory device)

    Ex : type memory_1K4 is array ( 0 to 1023 ) of std_logic_vector

    ( 3 downto 0);

    signal memory : memory_1K4

  • 7/31/2019 VHDL Final

    46/152

    46

    Operators

    Logical Operators Lowest priority (except not) ??

    Relational Operators

    Shift Operators

    Adding Operators

    Multiplying Operators

    Miscellaneous Operators Highest priority

  • 7/31/2019 VHDL Final

    47/152

    47

    Logical Operators

    Are defined for

    Types BIT and BOOLEAN.

    One dimensional arrays of BIT and BOOLEAN.

    AND OR NAND NOR XOR XNOR NOT

    Incorrect Examples:port ( a, b, c : bit_vector (3 downto 0);

    d, e, f, g : bit_vector (1 downto 0);h, i, j, k : bit;l, m, n, o, p : boolean );

    h

  • 7/31/2019 VHDL Final

    48/152

    48

    Relational ( Conditional ) Operators

    Are used to check conditions.

    = and /= are predefined for all types.= are predefined for

    For integer types

    Enumerated types

    One-dimensional arrays of enumeration and integer types.

    = /= < > =

  • 7/31/2019 VHDL Final

    49/152

    49

    Relational Operators

    No numerical meaning is associated with a BIT vectorElements of a vector are just a collection of objects of the same

    type.

    For array types operands are aligned to the left and compared to

    the right.

  • 7/31/2019 VHDL Final

    50/152

    50

    Shift Operators VHDL 93

    sll Shift left logical

    srl Shift right logicalsla Shift left arithmetic

    sra Shift right arithmetic

    rol Rotate left logical

    ror Rotate right logical

    sll srl sla sra ror rol

  • 7/31/2019 VHDL Final

    51/152

    51

    Shift Operators

    Each operatorTakes an array of BIT or BOOLEAN as the left operand

    Integer value as the right operand

    Ex: A is a bit_vector equal to 10010101

    A sll 2 is 01010100 (shift left logical, filled with 0)

    A srl 3 is 00010010 (shift right logical, filled with 0)

    A sla 3 is 10101111 (shift left arithmetic, filled with right bit )

    A sra 2 is 11100101 (shift right arithmetic, filled with left bit )

    A rol 3 is 10101100 (rotate left)A ror 2 is 01100101 (rotate right)

  • 7/31/2019 VHDL Final

    52/152

    52

    Adding Operators

    Concatenation Operator (&)

    Operands can be one-dimensional array type or element type

    & Operator works on vectors only.

    Example:

    signal a: std_logic_vector ( 5 downto 0 );

    signal b,c,d: std_logic_vector ( 2 downto 0 );

    beginb

  • 7/31/2019 VHDL Final

    53/152

    53

    Adding Operators

    Do not use Concatenation operator on the left of the assignmentsymbol.

    architecture bad of ex is

    signal a : std_logic_vector ( 2 downto 0 );

    signal b : std_logic_vector ( 3 downto 0 );

    begin

    0 & a

  • 7/31/2019 VHDL Final

    54/152

    54

    Multiplying Operators

    ( * ) and ( / ) are predefined for: Integers, Floating point numbers

    mod ( modulus ) and rem ( remainder ) are predefined for Integersonly.

    * / mod rem

    Example:

    variable A,B : Integer;

    Variable C : Real;

    C

  • 7/31/2019 VHDL Final

    55/152

    55

    Miscellaneous Operators

    The abs operator has only one operand. It allows defining the

    operands absolute value. The result is of the same type as the

    operand.

    ** ( Exponential Operator ) is defined for any integer or floating point

    number

    Abs **

    Examples :

    2 ** 8 = 256

    3.8 ** 3 = 54.872

    abs (-1) = 1

  • 7/31/2019 VHDL Final

    56/152

    56

    Aggregates

    Assigns values to the elements of an array.

    Example :

    a 0; ) identical to a 1, others =>0 );

    signal data_bus : std_logic_vector ( 15 downto 0 );

    data_bus '0', others => '1 );

  • 7/31/2019 VHDL Final

    57/152

    57

    Aggregates

    Elements in a vector can also be assigned values of other signals.

    Example : a has a length of 5 bits.

    a c(2), 3=> c(1), others => d(0);

    identical to

    a

  • 7/31/2019 VHDL Final

    58/152

    58

    Concurrent Statements

    MEANING IN HARDWARE TERMS

    CONCURRENT CONSTRUCTS

    WHEN_ELSE STATEMENT

    WITH_SELECT STATEMENT

    COMPONENT INSTANTIATION

    USE OF GENERATE STATEMENT

    CONCURRENT STATEMENT CHARACTERISTICS

    C t St t t

  • 7/31/2019 VHDL Final

    59/152

    59

    Concurrent Statements

    ConsiderX = X+Y;

    In software:

    X and Y are register

    locations

    The contents of X and Y

    are added and the result is

    stored in X.

    C t St t t

  • 7/31/2019 VHDL Final

    60/152

    60

    Concurrent Statements

    In concurrent statements,there are no implied registers.

    Feedback is described around

    Combinational logic.

    S l t d Si l A i t h t t t

  • 7/31/2019 VHDL Final

    61/152

    61

    Selected Signal Assignmentwhen statement

    Z

    >

    >

    z

    S l t d Si l A i t h t t t

  • 7/31/2019 VHDL Final

    62/152

    62

    Selected Signal Assignmentwhen statement

    Z A

    z

    x

    ??

    S l t d Si l A i t h t t t

  • 7/31/2019 VHDL Final

    63/152

    63

    Selected Signal Assignmentwhen statement

    Z A

    z

    x

    0

    1

    y

    B

    C

    >

    >

    S l t d Si l A i t h t t t

  • 7/31/2019 VHDL Final

    64/152

    64

    Selected Signal Assignmentwhen statement

    Modeling Tri-state buffer

    architecture tri_ex_a of tri_ex is

    begin

    out1

  • 7/31/2019 VHDL Final

    65/152

    65

    Syntax

    with...select statement evaluates choice_expression and compares

    that value to each choice value.

    In when statement the matching choice value has its expression

    assigned to target.

    Each value in the range of the choice_expression type must be

    covered by one choice.

    Selected Signal Assignmentwith statement

    with choice_expression selecttarget

  • 7/31/2019 VHDL Final

    66/152

    66

    Selected Signal Assignmentwith statement

    signal A, B, C, D, Z: std_logic;

    signal CONTROL:std_logic_vector (1 downto 0);

    with CONTROL select

    Z

  • 7/31/2019 VHDL Final

    67/152

    67

    Selected Signal Assignmentwith statement

    Modeling multiplexer

    architecture with_ex_a of with_ex is

    begin

    with in1 select

    out1

  • 7/31/2019 VHDL Final

    68/152

    68

    Design Hierarchy

    Hierarchy can be implemented using VHDL. Predefined design can be

    used to model complex functionality.

    Full adder can be implemented using two half adders as shown below

    A S

    U1

    B C

    A S

    U2

    B C

    IN1

    IN2

    IN3

    sum

    carry

    Top level

    Component

    Design Hierarchy

  • 7/31/2019 VHDL Final

    69/152

    69

    Design Hierarchy

    entity half is

    port ( A,B : in BIT;S1,Carry : out BIT);

    end half;

    architecture add_arch of half is

    component xor

    port ( A,B : in BIT;

    C : out BIT);

    end component;

    component nd2

    port ( A,B : in BIT;

    C : out BIT);

    end componentsignal s1,c1, c2 : BIT;

    begin

    U1: xor port map (A => a, B =>b, S => S1);

    U2: ND2 port map ( A =>a, B =>b, C=>carry);

    Component Instantiation

  • 7/31/2019 VHDL Final

    70/152

    70

    Component Instantiation

    Component

    Represents a precompiled Entity- Architecture pair.

    Instantiation

    Is selecting a compiled specification in the library and linking it

    with the architecture where it will be used.

    Port mapping

    Assignment ofactual signals in the system to the formal ports of

    the component declaration.

    Component Instantiation

  • 7/31/2019 VHDL Final

    71/152

    71

    Syntax:

    instance_name names this instance of the component type by

    component_name - WHY?port map connects each port of this instance of component_name to a

    signal-valued expression in the current entity.

    Component Instantiation

    instance_name : component_name

    port map (

    [ port_name => ] expression

    [port_name => ] expression );

    Component Instantiation

  • 7/31/2019 VHDL Final

    72/152

    72

    Component Instantiation

    entity ND4 IS

    port ( IN1,IN2,IN3,IN4 : in BIT;Z : out BIT);

    end ND4;

    architecture gate_arch of ND4 is

    component ND2port ( A, B: in BIT;

    C : out BIT);

    end component;

    signal TEMP_1,TEMP_2 : BIT;

    begin

    U1: ND2 port map ( A =>IN1, B =>IN2, C=>TEMP1 );

    U2: ND2 port map ( A =>IN3, B =>IN4, C=>TEMP2 );

    U3: ND2 port map ( A =>TEMP1, B =>TEMP2, C=>Z );

    Component Instantiation

  • 7/31/2019 VHDL Final

    73/152

    73

    Component Instantiation

    Ports can be mapped to signals by Positional or mixed notation.

    U1: ND2 port map ( IN1,IN2, TEMP_1 ); -- positional

    U2: ND2 port map (A => X, C => Z, B => Y); -- Named

    U3: ND2 port map (IN1,IN2, C => TEMP1); -- Mixed

    Named association is preferred because it makes the code more

    readable and pins can be specified in any order.

    All positional connections should be placed before any namedconnections.

    Generate Statement

  • 7/31/2019 VHDL Final

    74/152

    74

    Generate Statement

    Concurrent statements can be conditionally selected or replicated

    using generate statement.

    Used to create multiple copies of components, processes, or blocks.

    For ex: Provides a compact description of regular structuressuch as memories, registers, and counters.

    No simulation semantics are associated.

    Generate Statement

  • 7/31/2019 VHDL Final

    75/152

    75

    Generate Statement

    Two forms of generate statement

    Note: Range must be a computable integer, in either of these forms:

    integer_expression to integer_expression

    integer_expression downto integer_expression

    Each integer_expression evaluates to an integer.

    forgenerate

    Number of copies is determined

    by a discrete range

    Syntax:label: foridentifierinrangegenerate

    { concurrent_statement }

    end generate [ label] ;

    ifgenerate

    Zero or one copy is made,

    conditionally

    Syntax:label: ifexpressiongenerate

    { concurrent_statement }

    end generate [ label];

    Generate Statement

  • 7/31/2019 VHDL Final

    76/152

    76

    Generate Statement

    for.generate

    Example:

    Generate Statement

  • 7/31/2019 VHDL Final

    77/152

    77

    Generate Statement

    Example:

    Generate Statement

  • 7/31/2019 VHDL Final

    78/152

    78

    Generate Statement

    ifgenerate

    Example:

    Generate Statement

  • 7/31/2019 VHDL Final

    79/152

    79

    Generate Statement

    Example:

    Drivers

  • 7/31/2019 VHDL Final

    80/152

    80

    Drivers

    Are created by signal assignment statements

    Concurrent signal assignment produces one driver for each signal

    assignment

    Drivers

  • 7/31/2019 VHDL Final

    81/152

    81

    Drivers

    As shown Z is assigned two times. Hence has multiple drives

    Drivers

  • 7/31/2019 VHDL Final

    82/152

    82

    Drivers

    Signals with multiple sources can be found in numerousapplications.

    Ex. : Computer data bus may receive data from the processor,memory, disks, and I/o devices.

    Each of the above devices drives the bus and each bus signalline may have multiple drivers.

    Such multiple source signals require a method for determining theresulting value when several sources are concurrently feeding thesame signal line.

    When defining a synthesizable design do not initialize ports orsignals.

    Resolution Function

  • 7/31/2019 VHDL Final

    83/152

    83

    Resolution Function

    VHDL uses a Resolution Function to determine the actual output.

    For a multiple driven signal, values of all drivers are resolved together

    to create a single value for the signal.

    This is known as Resolution Function

    Examines the values of all of the drivers and returns a single

    value called the resolved value of the signal.

    Std_Logic and Std_Logic_Vector are resolved Functions. The de facto industrial standard types.

    Resolution Function

  • 7/31/2019 VHDL Final

    84/152

    84

    Bad Model

    ENTITY mux ISPORT (i0, i1, i2, i3, a, b : INstd_logic;

    q : OUT std_logic);

    END mux;

    ARCHITECTURE bad OF mux

    ISBEGIN

    q

  • 7/31/2019 VHDL Final

    85/152

    85

    SEQUENTIAL STATEMENTS

    HOW DOES PROCESS WORK?

    SEQUENTIAL CONSTRUCTS

    IF STATEMENT

    CASE STATEMENT

    TYPES OF PROCESSES

    HARDWARE MODELING EXAMPLES

    SEQUENTIAL STATEMENTS CHARACTERISTICS

    WAIT STATEMENT

    LOOP STATEMENTS

    Process Statement characteristics

  • 7/31/2019 VHDL Final

    86/152

    86

    Process Statement characteristics

    Are executed one after another, in the order in which they are written.Can appear only in a Process.

    Only sequential statements can use Variables.

    Process is the primary concurrent VHDL statement used to describe

    sequential behavior.Statements in a process, are executed sequentially in zero time.

    All processes in an architecture behave concurrently.

    Process repeats forever, unless suspended.

    NOTE : SEQUENTIAL STATEMENTS DO NOT GENERATE

    SEQUENTIAL HARDWARE

    Sensitivity List

  • 7/31/2019 VHDL Final

    87/152

    87

    Simulator runs a process when any one of the signals in the sensitivitylist changes.

    Process should either have a sensitivity list or a wait statement atthe end.

    Only static signal names for which reading is permitted may appear inthe sensitivity list of a process statement.

    The execution of a process statement consists of the repetitiveexecution of its sequence of statements.

    If Statement

  • 7/31/2019 VHDL Final

    88/152

    88

    If Statement

    Syntax:

    If Statement evaluates each condition in order.

    Statements can be nested.

    Generates a priority structure.

    Corresponds to when-else command in the concurrent part.

    ifcondition1 then

    { sequential_statement }

    elsifcondition2 then

    { sequential_statement }

    else

    { sequential_statement }

    end if;

    if Statement

  • 7/31/2019 VHDL Final

    89/152

    89

    if Statement

    Avoid using more than three levels ofIfelse

    statements .

    When defining the condition, use parentheses to differentiate levels of

    operations on the condition.

    If statement

  • 7/31/2019 VHDL Final

    90/152

    90

    If statement

    process (sel, a, b, c, d)

    begin

    If sel(2) = 1 then

    y

  • 7/31/2019 VHDL Final

    91/152

    91

    Syntax:

    Case Statement is a series of parallel checks to check a condition.

    It selects, for execution one of a number of alternative sequences of

    statements.

    Statements following each when clause is evaluated, only if the

    choice value matches the expression value.

    Case State e t

    case expression iswhen choice1 => { statements }

    when choice2 => { statements }

    when others => { statements }

    end case;

    Case statement

  • 7/31/2019 VHDL Final

    92/152

    92

    process (sel,a,b,c,d)

    begin

    case sel is

    when 0=> y y y

    y

  • 7/31/2019 VHDL Final

    93/152

    93

    Every possible value of the case expression must be covered in

    one and only one when clause.

    Each choice can be either a static expression ( such as 3 ) or a

    static range ( such as 1 to 3 ). we cannot have a when condition

    that changes when it is being evaluated.

    Invalid Case Statements

  • 7/31/2019 VHDL Final

    94/152

    94

    signal VALUE: INTEGER range 0 to 15;

    signal OUT_1: BIT;

    EX2: case VALUE is

    when 0 to 10 =>

    OUT_1

    OUT_1

    OUT_1

    OUT_1

  • 7/31/2019 VHDL Final

    95/152

    95

    Does not perform any action

    Can be used to indicate that when some conditions are met no action

    is to be performed

    Example: case a is

    when 00 => q1 q2 q3

  • 7/31/2019 VHDL Final

    96/152

    96

    p g

    If statement produces priority-encoded logic

    Example:

    process ( s,c,d,e,f )

    begin

    if s = 00 then

    pout

  • 7/31/2019 VHDL Final

    97/152

    97

    p g

    Case statement produces parallel logic

    Example

    process ( s, c, d, e, f )

    begin

    case s is

    when 00 =>pout

    pout

    pout

    pout

  • 7/31/2019 VHDL Final

    98/152

    98

    Two types of processes:

    Combinatorial

    Clocked

    Combinatorial Process

    Generates combinational logic

    All inputs must be present in the sensitivity list.

    process (a,b,c)

    begin

    x

  • 7/31/2019 VHDL Final

    99/152

    99

    Clocked Process: Generates synchronous logic.

    Any signal assigned under a clkevent generates a Flip-flop.

    process (clk)

    begin

    if (clk event and clk =1 ) then

    Q < = D;

    end if;

    end process;

    Process Statement

  • 7/31/2019 VHDL Final

    100/152

    100

    Clocked processes having an else clause will generate wronghardware.

    process(clk)

    beginif (clk'event and clk = '1') then

    out1

  • 7/31/2019 VHDL Final

    101/152

    101

    Flip-flops should be reset or preset to a value on start-up because:

    - Initial state of the flip-flop may not be known after power-up.

    - Initial state of the flip-flop may not be the desired value after power-up.

    - To place the system into a known state during operation.

    Hardware Modeling Examples

  • 7/31/2019 VHDL Final

    102/152

    102

    Process(CLK)begin

    If CLK=1 and CLKevent then

    Q

  • 7/31/2019 VHDL Final

    103/152

    103

    Synchronous Reset : Flip-flops are reset on the active edge of theclock when reset is held active.

    process (CLK)

    begin

    if ( CLK event and CLK = 1)then

    if ( RST = 1 ) then

    Q

  • 7/31/2019 VHDL Final

    104/152

    104

    Asynchronous Reset : Flip-flops are cleared as soon as reset isasserted.

    process (CLK, RST)

    beginif ( RST = 1 ) then

    Q

  • 7/31/2019 VHDL Final

    105/152

    105

    process (clk)

    begin

    if (clkevent and clk = '1') then

    out1

  • 7/31/2019 VHDL Final

    106/152

    106

    process (clk, reset)begin

    if (reset = '1' ) then

    out1

  • 7/31/2019 VHDL Final

    107/152

    107

    ENTITY add IS

    port (a, b : IN INTEGER range 0 to 7;

    z : OUT INTEGER range 0 to 15);

    END add;

    ARCHITECTURE arithm OF add IS

    BEGIN

    z

  • 7/31/2019 VHDL Final

    108/152

    108

    entity test_14 is

    port (

    a, b, SEL : in std_logic;

    c : out std_logic

    );

    end test_14;

    architecture test_14_arch of test_14 is

    begin

    C

  • 7/31/2019 VHDL Final

    109/152

    109

    entity test_14 is

    port (

    a, b, SEL : in integer;

    c : out integer

    );

    end test_14;

    architecture test_14_arch of test_14 is

    begin

    C

    >

    a [31:0]

    b [31:0] c [31:0]

    Sel [0]

    Sel [31]

    Hardware modeling Examples- Latch

  • 7/31/2019 VHDL Final

    110/152

    110

    Incompletely specified Conditional expression infers a latch.

    Latch is a combinational circuit which necessarily has feedback to

    hold the output to previous value for the unspecified

    states/conditions.

    Avoid the inference of latches in synchronous designs. As latches

    infer feedback and they cause difficulties in timing analysis and test

    insertion applications. Most synthesizers provide warnings when

    latches are inferred.

    Hardware modeling Examples Latch

  • 7/31/2019 VHDL Final

    111/152

    111

    incompletely specified

    Conditional expression.

    process (en,a)begin

    if en='1' then

    out1

  • 7/31/2019 VHDL Final

    112/152

    112

    Process places only one driver on a signal.

    Value that the signal is updated with is the last value assigned to itwithin the process execution.

    Signals assigned to within a process are not updated with their new

    values until the process suspends.

    Wait Statement

  • 7/31/2019 VHDL Final

    113/152

    113

    Wait statement : Suspends the execution of a process or procedureuntil some conditions are met.

    Three basic forms:

    wait on [sensitivity clause]

    wait until [condition clause]

    wait for [timeout clause]

    Wait statement simulation view.

    Wait On Clause

  • 7/31/2019 VHDL Final

    114/152

    114

    Wait on statement at the end of the process is equivalent to the

    sensitivity list at the beginning of the process.

    process -- No Sensitivity list

    begin

    if ( clk'event and clk = '1')then q

  • 7/31/2019 VHDL Final

    115/152

    115

    flipflop inference

    process

    begin

    wait until clk = 1;

    q

  • 7/31/2019 VHDL Final

    116/152

    116

    Useful in testbenches for generating waveforms.

    processbegin

    clock

  • 7/31/2019 VHDL Final

    117/152

    117

    downto 0) := 000 ;

    clk

  • 7/31/2019 VHDL Final

    118/152

    118

    g _ g _ ( )

    := "000";

    clk

  • 7/31/2019 VHDL Final

    119/152

    119

    clk

  • 7/31/2019 VHDL Final

    120/152

    120

    Loop statements are used to iterate through a set of sequentialstatements.

    Has a Boolean Iteration Scheme.

    Condition is evaluated before execution.

    Syntax:

    loop_label: while condition loop

    sequence_of_statementsend loop loop_label

    Loop statements

  • 7/31/2019 VHDL Final

    121/152

    121

    Loop statements are used to iterate through a set of sequential

    statements.

    process ( Input )

    variable i : POSITIVE := 1;

    begin

    L1: while i

  • 7/31/2019 VHDL Final

    122/152

    122

    Has an Integer Iteration Scheme. Number of repetitions is

    determined by an Integer rangeThe loop is executed once for each value in the range

    The loop parameters range is tested at the beginning of the loop,

    not at the end.

    Example : factorial := 1;

    for number in 2 to N loop

    factorial := factorial * number;

    end loop;

    Syntax:

    loop_label: for loop_parameter in range loopSequence_of_statements

    end loop loop_label;

    For Loop Rules

  • 7/31/2019 VHDL Final

    123/152

    123

    Loop parameter is implicitly defined.

    Inside the loop, the loop parameter is a constant. Thus, it may be

    used but not altered.

    Discrete range of the loop is evaluated before the loop is first

    executed.

    Loop counter only exists within the loop.

    Labels in loop parameters enable better loop control with the

    next and exit statements.

    Labels also enhance readability and maintainability.

    Loop Statements - For Loop

  • 7/31/2019 VHDL Final

    124/152

    124

    Bit

    ReversalInput_X

    7

    Output _X

    7

    Shift_5: process (Input_X)

    begin

    L5: for index in Input_X'range loop

    Output_X(index)

  • 7/31/2019 VHDL Final

    125/152

    125

    Skips the remaining statements in the current iteration of the specified

    loop.

    Execution resumes with the first statement in the next iteration of the loop.

    Syntax:

    next loop_label when condition;

    for J in 10 downto 5 loop

    if sum < total_sum then

    sum := sum + 2;

    elsif sum = total_sum then

    next;else null;

    end if;

    k : k+1;end loop;

    Loop statements exit Statement

  • 7/31/2019 VHDL Final

    126/152

    126

    Entirely terminates the execution

    of the loop in which it is located.

    Syntax:

    exit;

    exit loop_label when condition;

    sum := 1; j := 0;L3 : loop

    J := J + 21;sum := sum * 10;

    if sum > 100 then

    exit L3;end if;

    end loop L3;

    Note:Exit : Causes the specified loop to be

    terminated.

    Next :Causes the current loop iteration of

    the specified loop to be prematurely

    terminated; execution resumes with the nextiteration.

    Signals and Variables

  • 7/31/2019 VHDL Final

    127/152

    127

    SIGNALS & VARIABLES CHARACTERISTICS

    SYNTHESIS VIEW

    SIMULATION VIEW

    Signals

  • 7/31/2019 VHDL Final

    128/152

    128

    Represents wires within a circuit.

    Thus Signals can be used

    To connect design entities together & communicate changes in values

    within a design.

    Instead of inout signals.

    Each signal has a history of values i.e holds a list of values which

    include current value of signal & set of possible future values that are

    to appear on the signal.

    architecture and_gt of anding is

    signal temp : std_logic;

    begin

    U1 : AND2 portmap (a,b,temp);

    U2 : AND2 portmap (temp,a,b);

    end and_gt;

    >

    Variables

  • 7/31/2019 VHDL Final

    129/152

    129

    These are objects with single current value.

    Are used to store the intermediate values between the sequential

    VHDL statements.

    Variable can be declared & used inside the process statement only.

    But retain their value throughout the entire simulation.

    process ( a )

    variable a_int : integer := 1;

    begin

    a_int := a_int + 1;

    end process;

    Note : a_int contains the total

    number of events that occurred on

    signal a

    Signals vs Variables

  • 7/31/2019 VHDL Final

    130/152

    130

    Signals or variables are the objects used to store intermediate value insequential region.

    A Signal has three properties attached to it Type, Value, Time.

    A Variable has only two properties attached to it Type and Value.

    Variables are used and declared in a process.

    A variable cannot be used to communicate between processes.

    Signal assignments are done using

  • 7/31/2019 VHDL Final

    131/152

    131

    CASE 2 :

    process (clk)

    If (clkevent and clk = 1)

    then

    temp

  • 7/31/2019 VHDL Final

    132/152

    132

    CASE 1 :

    process (clk)

    If (clkevent and clk = 1)

    then

    y

  • 7/31/2019 VHDL Final

    133/152

    133

    process ( clk, a,b,c,d)

    variable y, x, w : std_logic;

    begin

    if clk = '1' and clk'event then

    1. z1

  • 7/31/2019 VHDL Final

    134/152

    134

    Resulting Hardware:

    Draw the Hardware for the statement sequence 3, 2,1, 5,4

    Signals and Variables

  • 7/31/2019 VHDL Final

    135/152

    135

    Hardware for the statement sequence 3, 2,1, 5,4

    Signals and Variables

  • 7/31/2019 VHDL Final

    136/152

    136

    architecture var of parity is

    begin

    process(a)

    variable temp : std_logic;

    begin

    temp := '0';

    for i in 0 to n loop

    temp:=temp xor a(i);

    end loop;

    p

  • 7/31/2019 VHDL Final

    137/152

    137

    architecture sig of par is

    signal temp:std_logic;

    begin

    process (a)

    begin

    temp

  • 7/31/2019 VHDL Final

    138/152

    138

    tb : process

    beginwait for 10 ns;

    sum1

  • 7/31/2019 VHDL Final

    139/152

    139

    Use Variables in combinatorial processes. ( Less Simulation overhead ).

    Order dependency

    Signal assignments are order independent. Signals are updated at theend of process.Signals represent physical wires in the circuit.

    Variable assignments are order dependent, Variables assignments aredone immediately and are executed sequentially. Variables may or maynot represent physical wires.

    Signal assignments under a clocked process are translated into registers.

    Variable assignment under a clocked process may or may not be translatedinto registers.

    Computed value is assigned to signal after specified delay called delta delay

    Variable assignment occurs immediately.

    Generics

  • 7/31/2019 VHDL Final

    140/152

    140

    Are specified in entities inside the generic clause.

    Provides information to a block from its environment.

    Example : Size of interface ports, width of components

    Syntax :

    generic ( [ constant_name : type [ := value ];

    constant_name : type [ := value ] );

    Generics

  • 7/31/2019 VHDL Final

    141/152

    141

    entity AND_GATE is

    generic ( N: NATURAL := 3 );

    port ( A : in std_logic_vector ( 1 to N );

    Z : out bit );

    architecture gen_ex of and_gate is

    beginprocess (A)variable and_out : bit;

    begin

    and_out := 1;

    for K in 1 to N loop

    and_out := and_out and A(K);

    exit when and_out = 0;end loop;

    Z

  • 7/31/2019 VHDL Final

    142/152

    142

    Applications of generics

    Can be used anywhere in a code where a static value is needed. Use of generics facilitates easy design changes.

    Used in behavioral modeling of components.

    For ex. : Timing parameters such as delays, Set-up times,

    Hold times can be modeled using Generics.

    Generics

    Are specified in entities. Hence, any change in the value of a

    generic affects all architectures associated with that entity.

    Constants

    Are specified in architectures. Hence, any change in the value of

    a constant will be localized to the selected architecture only.

  • 7/31/2019 VHDL Final

    143/152

    Multivalued Logic System

  • 7/31/2019 VHDL Final

    144/152

    144

    A 9-value package STD_LOGIC_1164 was developed and accepted

    as IEEE Std 1164-1993. Possible states of signal are represented

    using the 9 values are given below

    U : Uninitialized

    X : Unknown

    0 : Logic 0

    1 : Logic 1Z : High impedance

    W : weak unknown

    L : weak logic 0

    H : weak logic 1

    - : Dont care

    U, X, W, - represent behavior of model itself rather than the behavior

    of hardware being synthesized.

    Multivalued Logic System

  • 7/31/2019 VHDL Final

    145/152

    145

    Nine values models the behavior of the digital circuit accurately

    during simulation.

    Unknown, un-initialized, drive strengths - are necessary to model

    the simulation. Thus represents behavior of model itself rather than

    the behavior of hardware being synthesized

    During synthesis high impedance condition is necessary to

    describe the circuit with output enables, while the dont care state

    can be used to optimize the combinational logic requirements of a

    circuit. It may simplify the logic being synthesized

    Unknown [X] : Value was known, but is not any more.

    Un-initialized [U] : Value was never known in the first place !

    High impedance [Z] : Net has no driver.

    Drive strengths : Handle different output drivers.

    Dont care [-] : Optimizes synthesis implementation.

    Operator Overloading Need

  • 7/31/2019 VHDL Final

    146/152

    146

    Predefined operators are defined only for the operands of certain

    predefined types.

    Example:

    entity add is

    port ( a : in bit;b : in bit;

    c : out bit );

    end add;

    architecture correct of add is

    c

  • 7/31/2019 VHDL Final

    147/152

    147

    Arithmetic operations are not predefined in the language to work onvectors.

    Example:

    entity add is

    port ( a : in std_logic_vector; -------- Error!b : in std_logic_vector;

    c : out std_logic_vector );

    end add;

    architecture wrong of add is

    beginc

  • 7/31/2019 VHDL Final

    148/152

    148

    By using Operator Overloading we can extend the definition of

    predefined operators.

    Function bodies are written to define the behavior of overloaded

    operators.

    When the compiler encounters a function declaration in which the

    function name is an operator enclosed in double quotes, the

    compiler treats this function as an operator overloading function.

    Ex. : function "+"( L: STD_LOGIC_VECTOR; R:STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is

    Packages

  • 7/31/2019 VHDL Final

    149/152

    149

    Package : A convenient way to store & share declarations that are

    common across many design units.

    Package consists of two parts

    Package declaration

    Contains a set of declarations

    Defines interface for package

    Package body

    Specifies the actual behavior

    of the package.

    A Package Declaration

    can have only one Package body. Package body is optional.

    package package_name isdeclarations

    end package_name;

    package bodypackage_nameis

    declarations;

    end package_name;

    Packages

  • 7/31/2019 VHDL Final

    150/152

    150

    No Component declaration

    USE WORK.DECLARE.ALL;use IEEE.std_logic_1164.all;

    entity AND_4BIT is

    port ( X, Y, Z : in STD_LOGIC;

    P :out STD_LOGIC;

    );end AND_4BIT;

    architecture AND_4BIT_arch of AND_4BIT is

    SIGNAL TEMP1 : STD_LOGIC;

    begin

    U1 : and_gt PORT MAP (X,Y,TEMP1);

    U2 : and_gt PORT MAP (Z,TEMP1,P);

    end AND_4BIT_arch;

    Component stored in

    package named

    declare

    Packages

  • 7/31/2019 VHDL Final

    151/152

    151

    Another example of package declaration

    library IEEE;

    use IEEE.STD_LOGIC_1164.ALL;

    package declare is

    component and_gt

    port (

    a: in STD_LOGIC;b: in STD_LOGIC;

    c: out STD_LOGIC

    );

    end component;

    end declare;

    package define is

    constant count : integer := 5;

    type ALU_OP is(add,sub,mul,div,equ);

    end define;

    Packages

    Package can also have function declaration In such case

  • 7/31/2019 VHDL Final

    152/152

    Package can also have function declaration. In such case

    package declaration requires a package body which will describe

    the behavior of package

    package shifting is

    function shift (data : std_logic_vector) return std_logic_vector; is

    end shifting;

    package body shifting is

    function shift (data : std_logic_vector) return std_logic_vector is

    variable done : std_logic_vector (data'range);

    begindone := data sll 2; -- return data sll 2 (no need to declare variable)