escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture...

37
1 Hardware Description Languages Basic Language Concepts

Transcript of escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture...

Page 1: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

1

Hardware

Description

Languages

Basic Language Concepts

Page 2: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

2

Outline

VHDL Basic Constructs:

Design Elements: Entity, Architecture and Configuration

Object Types: Constants, Variables, Signals and Files

Events, Propagation Delays and Concurrency

Concurrent Signal Assignment Statements

Signal Drivers, Shared Signals, and Resolved types

Delay Models

Inertial delay, Transport delay, Delta delay

Page 3: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

3

VHDL Basic Language Concepts

For now we will focus only on

basic language constructs.

Our immediate objective is to become

familiar only with the constructs provided

for describing digital systems

Page 4: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

4

Describing Digital Systems

What do we need to describe a digital system ?

Interface: how do we connect to the design

Behavior: what does it do?

b

a sum

carry How the design “talks”

to the external world

What is the internal behavior of the design

Page 5: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

5

Describing the Interface: the Entity

The interface is a collection of ports

Ports are special programming objects called signals

Ports have a type, e.g., bit (Guideline: avoid the type bit !!)

Ports have a mode: in, out, inout (bidirectional)

b

a sum

carry

entity half_ADder is port ( a, b : in bit;

sum, carry :out bit); end entity half_adder;

case insensitive

VHDL 1993

Page 6: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

6

Example: Entity Descriptions

Q

Q Q

D

clk

R

S

op

N Z

A B

C

entity ALU32 is port( A, B: in bit_vector (31 downto 0);

C : out bit_vector (31 downto 0); Op: in bit_vector (5 downto 0);

N, Z: out bit); end entity ALU32;

entity D_ff is port( D, Clk, Rbar, Sbar: in bit;

Q, Qbar : out bit); end entity D_ff;

MSB

LSB

Page 7: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

7

VHDL Object Types

VHDL supports four basic objects: variables, constants, signals and file types

The variable and constant types They works as in conventional programming languages

Variable values can be changed.

Constant values cannot be changed

The signal type is a programming object specifically introduced to model the behavior of digital systems

A variable is simply a value in a location of memory. There is no association of time with the value.

A signal is a sequence of time-value pairs !

The file type Let’s procrastinate it

Page 8: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

8

Describing Behavior: the Architecture

To describe behavior we need:

Signal assignment statements: events on output signals in terms of events on input signals

Specification of propagation delays

The operation of digital systems is inherently concurrent

b

a sum

carry

entity half_adder is port (a, b : in bit;

sum, carry :out bit); end entity half_adder;

architecture behavioral of half_adder is begin

sum <= (a xor b) after 5 ns; carry <= (a and b) after 5 ns;

end architecture behavioral;

VHDL 1993

Page 9: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

9

Describing Behavior: the Architecture

library IEEE;use IEEE.std_logic_1164.all;

entity half_adder isport (a, b : in std_ulogic;sum, carry :out std_ulogic);end entity half_adder;

architecture behavioral of half_adder isbeginsum <= (a xor b) after 5 ns;carry <= (a and b) after 5 ns;end architecture behavioral;

The type bit is not powerful enough for realistic simulation: use the IEEE 1164 value system

Use of the IEEE 1164 value system requires inclusion of the library and package declaration statements

b

a sum

carry

Declarations for a design entity

use clause

Page 10: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

10

Libraries and Packages

Libraries are logical units that are mapped to physical directories. The units of a library are called packages.

Packages are repositories for type definitions, procedures, and functions

Libraries and packages can be system defined or user defined

Page 11: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

11

architecture-3 architecture-2

architecture-1

entity configuration

Configurations “separate” the specification of the interface from that of the implementation

An entity may have multiple architectures

Configurations associate an entity with an architecture

Binding rules: default and explicit

More on configurations later!

Binding entity and architecture:

the Configuration

Page 12: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

12

Design Units

Primary design units (not dependent on other design units)

Entity

Configuration

Package Declaration

Secondary design units

Package body

Architecture

Design units are arranged in files

Now you know the layout of a VHDL program!

Page 13: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

13

Concurrent Statements

The operation of digital systems is inherently concurrent

Signals are assigned values at specific points in time using signal assignment statements

Signal assignments are denoted by the operator <=

Signals can be initialized using the operator := Initialization is not required. (Guideline: do not use signal initialization!)

There are several forms of Concurrent Signal Assignments (Guideline: do not use CSAs)

Page 14: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

14

Simple CSA

in1 in2

c_in

c_out

sum

s1

s3

s2

library IEEE;use IEEE.std_logic_1164.all;entity full_adder isport (in1, in2, c_in: in std_ulogic; sum, c_out: out std_ulogic);end entity full_adder;

architecture dataflow of full_adder issignal s1, s2 : std_ulogic;Signal s3 : std_ulogic := ‘0’;constant gate_delay: Time:= 5 ns;beginL1: s1 <= (in1 xor in2) after gate_delay;L2: s2 <= (c_in and s1) after gate_delay;L3: s3 <= (in1 and in2) after gate_delay;L4: sum <= (s1 xor c_in) after gate_delay;L5: c_out <= (s2 or s3) after gate_delay;end architecture dataflow;

Declarations

Page 15: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

15

Simple CSA

Use of signals in the architecture

Internal signals connect components

A statement is executed when an event (signal

transition) takes place on a signal in the RHS of an

expression

1-1 correspondence between signal assignment

statements and signals (wires) in the circuit

Order of statement execution follows propagation

of events in the circuit

Textual order does not imply execution order

Page 16: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

16

Implementation of Signals

10 1 0

23 1 Z

24 0 1

s <= ( in1 nand in2 ) after gate_delay ;

value expr e ssion time expr e ssion

waveform element

Driver or projected waveform

Transaction

transaction = time-value

pair representing the future (with respect to the current

simulation time ) value assigned to signal

Page 17: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

17

Implementation of Signals (cont.)

In the absence of initialization, default values are

determined by signal type

Waveform elements describe time-value pairs

Transactions are internal representations of signal

value assignments

Events correspond to new signal values

A transaction may lead to the same signal value

Page 18: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

18

Implementation of Signals (cont.)

Driver is the set of future signal values: current signal value is provided by the transaction at the head of the list

We can specify multiple waveform elements in a single assignment statement

Specifying multiple future values for a signal

Rules for maintaining the driver

Conflicting transactions

0 1

@24ns

1 0

@30ns

0 1

@20ns

1 0

@18ns

driver head

Page 19: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

19

Example: Waveform Generation

Multiple waveform elements can be specified in a

single signal assignment statement

10 40 20 30

signal <= ‘0’,‘1’ after 10 ns,‘0’ after 20 ns,‘1’ after 40 ns;

signal

Page 20: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

20

Resolved Signal Types

At any point in time what is the value of the bus signal?

We need to “resolve” the value

Take the value at the head of all drivers

Select one of the values according to a resolution

function

Predefined IEEE 1164 resolved types are std_logic and

std_logic_vector

Page 21: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

21

Resolved Logic System

Page 22: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

22

Conditional CSA

First true conditional expression determines the output value

Note that Sel can have more values that 0 or 1 hence we

need the last statement to cover all cases

library IEEE;use IEEE.std_logic_1164.all;entity mux4 isport ( In0, In1, In2, In3 : in std_logic_vector (7 downto 0);Sel: in std_logic_vector(1 downto 0);Z : out std_logic_vector (7 downto 0));end entity mux4;architecture behavioral of mux4 isbeginZ <= In0 after 5 ns when Sel = “00” elseIn1 after 5 ns when Sel = “01” elseIn2 after 5 ns when Sel = “10” elseIn3 after 5 ns when Sel = “11” else“00000000” after 5 ns;end architecture behavioral;

note type

Evaluation Order is

important!

Page 23: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

23

Unaffected Signals

Value of the signal is not changed

VHDL 1993 only!

library IEEE;use IEEE.std_logic_1164.all;entity pr_encoder isport (S0, S1,S2,S3: in std_logic;Z : out std_logic_vector (1 downto 0));end entity pr_encoder;architecture behavioral of pr_encoder isbeginZ <= “00” after 5 ns when S0 = ‘1’ else“01” after 5 ns when S1 = ‘1’ elseunaffected when S2 = ‘1’ else“11” after 5 ns when S3 = ‘1’ else“00” after 5 ns;end architecture behavioral;

Page 24: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

24

Selected CSA

The “when others” clause can be used to ensure that

all options are covered

The “unaffected” clause may also be used here

library IEEE;use IEEE.std_logic_1164.all;entity mux4 isport ( In0, In1, In2, In3 : in std_logic_vector (7 downto 0);Sel: in std_logic_vector(1 downto 0);Z : out std_logic_vector (7 downto 0));end entity mux4;architecture behavioral-2 of mux4 isbeginwith Sel selectZ <= (In0 after 5 ns) when “00”,(In1 after 5 ns) when “01”,(In2 after 5 ns) when “10”,(In3 after 5 ns) when “11”(In3 after 5 ns) when others;end architecture behavioral;

All options must be covered

and only one

must be true!

Page 25: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

25

A VHDL Model Template library library-name-1, library-name-2;

use library-name-1.package-name.all;

use library-name-2.package-name.all;

entity entity_name is

port( input signals : in type;

output signals : out type);

end entity entity_name;

architecture arch_name of entity_name is

-- declare internal signals

-- you may have multiple signals of different types

signal internal-signal-1 : type := initialization;

signal internal-signal-2 : type := initialization;

begin

-- specify value of each signal as a function of other signals

internal-signal-1 <= simple, conditional, or selected CSA;

internal-signal-2 <= simple, conditional, or selected CSA;

output-signal-1 <= simple, conditional, or selected CSA;

output-signal-2 <= simple, conditional, or selected CSA;

end architecture arch_name;

Declare external libraries and visible components

Define the interface

Declare signals used to connect components

Definition of how & when internal signal values are computed

Definition of how & when external signal

values are computed

Page 26: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

26

Delay Models in VHDL

Inertial delay

Default delay model

Suitable for modeling delays through devices with inertia such as

gates

Transport delay

Model delays through devices with no inertia, e.g., wires

no inertia = all input events are propagated to output signals

Delta delay

What about models where no propagation delays are specified?

Infinitesimally small delay is automatically (after 0ns) inserted

by the simulator to preserve correct ordering of events

Page 27: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

27

Inertial Delays: Example

VHDL 1993 enables specification of pulse rejection width

General form: signal <= reject time-expression inertial value-expression after time-expression;

Input

Out 1

Out 2

5 10 15 20 25 30 35

input output 8 ns

2 ns Out 1: gate propagation delay 8ns

Out 2: gate propagation delay 2ns

Page 28: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

28

Transport Delays: Example

a

b

sum

carry

s1

s2

Transport

architecture transport_delay of half_adder issignal s1, s2: std_logic:= ‘0’;begins1 <= (a xor b) after 2 ns;s2 <= (a and b) after 2 ns;sum <= transport s1 after 4 ns;carry <= transport s2 after 4 ns;end architecture transport_delay;

Inertial

Page 29: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

29

Delta Delays: Example

In1

In2

z

s1

s2

s3

s4

library IEEE;use IEEE.std_logic_1164.all;entity combinational isport (in1, in2: in std_logic;z : out std_logic);end entity combinational;

architecture behavior of combinationalsignal s1, s2, s3, s4: std_logic:= ‘0’;begins1 <= not in1;s2 <= not in2;s3 <= not (s1 and in2);s4 <= not (s2 and in1);z <= not (s3 and s4);end architecture behavior;

Page 30: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

30

Delta Delays: Behavior IN1

IN2

Z

S1

S2

S3

S4

10 20 30 40 50 60 70

10 2 3

In2

S2

S3

Z

Delta

Events

Internal ordering established by the simulator

Page 31: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

31

Delay Models: Summary

Delay models

Inertial

• For devices with inertia such as gates

• VHDL 1993 supports pulse rejection widths

Transport

• Ensures propagation of all events

• Typically used to model elements such as wires

Delta

• Automatically inserted to ensure functional correctness of

code that do not specify timing

• Enforces the data dependencies specified in the code

Page 32: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

32

Summary

Design elements: Entity, Architecture, Configuration

Object Types: Constants, Variables, Signals (and Files)

Events, propagation delays, and concurrency

Transactions and waveform elements

Signal Drivers, Shared Signals, resolved types, and

resolution functions

Concurrent Signal Assignment statements

Simple CSA, Conditional CSA, Selected CSA

Modeling Delays

Inertial delay, Transport delay, Delta delay

Page 33: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

33

And once more …

VHDL Object Types:

Constants

Signals

Variables

Files

Page 34: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

34

Constant

You can think of it just as a name for a value reset_c := ‘0’; bus_width_c := 32;

The value assigned to a constant cannot be changed (the location of memory that stores the value cannot be modified)

Benefits:

a better documented design.

it is easier to update the design.

But do not exaggerate !!! since you have to remember all these names you defined !

Page 35: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

35

Signals

It models a physical signal (you can think of it

like a piece of wire)

A signal is a sequence of time-value pairs

A signal assignment takes effect only after a

certain delay (the smallest possible delay is

called a “delta time”).

Page 36: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

36

Variables

All assignment to variables are scheduled (takes effect)

immediately.

If a variable is assigned a value, the corresponding

location in memory is written with the new value while

destroying the old value.

This effectively happen immediately so if the next

executing statement in the program uses the value of the

variable, it is the new value that is used.

Page 37: escription D - EWU · end entity half_adder; case insensitive VHDL 1993 . 6 ... architecture dataflow of full_adder is ... Suitable for modeling delays through devices with inertia

37

Signals vs. Variables

Signals assignments are scheduled after a certain delay

Variables assignments happen immediately, there is no delay