+ All Categories
Home > Documents > VHDL Overview

VHDL Overview

Date post: 31-Jan-2016
Category:
Upload: lilac
View: 37 times
Download: 0 times
Share this document with a friend
Description:
VHDL Overview. A Quick Start Tutorial. What does VHDL stand for ?. V HSIC H ardware D escription L anguage VHSIC: V ery H igh S peed I ntegrated C ircuits. HDLs. VHDL USA Department of Defense IEEE Std 1076-1993 Verilog IEEE Std 1364-1995 Super Verilog SystemC …. - PowerPoint PPT Presentation
Popular Tags:
52
1 VHDL Overview A Quick Start Tutorial
Transcript
Page 1: VHDL Overview

1

VHDL Overview

A Quick Start Tutorial

Page 2: VHDL Overview

2

What does VHDL stand for ?

VHSIC Hardware Description Language

VHSIC: Very High Speed Integrated Circuits

Page 3: VHDL Overview

3

HDLs

VHDLUSA Department of DefenseIEEE Std 1076-1993

VerilogIEEE Std 1364-1995

Super Verilog SystemC …

Page 4: VHDL Overview

4

HDL applications

High Level Modeling (Behavioral style) Design Entry (Structural & RTL styles) Simulation (Behavioral style)

validation by mean of a test bench

generate stimuli

observeresponses

instantiatedesign to

test

dut.vhd

TESTBENCH

dut_tb.vhd

Page 5: VHDL Overview

5

HDL vs. Schematic Entry

The Design Description is independent from the IC Vendors Cell Libraries (in other words independent from physical implementation)Enable portability Foster reuse

Higher Level of Abstraction (hiding details)The design task become simplerThe design is less error proneProductivity is increased

Page 6: VHDL Overview

6

HDLs vs. Software Languages

Concurrent (parallel) Statements vs. Sequential Statements

Page 7: VHDL Overview

7

HDL coding Styles

Register Transfer Level Structural Behavioral

Be careful NOT everybody givesthe same meaning to the term BEHAVIORAL !

Page 8: VHDL Overview

8

RTL

Only a small subset of the Language statements can be mapped in real “Silicon”.

translationHDL code

generic technology

unoptimizedgenericboolean netlist optimization

& mapping

target technology

area and timing

constraints

optimizedgate level netlist

SYNTHESIS

Page 9: VHDL Overview

9

Structural

Sub-Modules interconnection Primitive cells interconnection

(net-list) The code describes a bunch of port

mappings.

Page 10: VHDL Overview

10

Behavioral

Modeling a system (mimic functionality and performances)

All language constructs can be used

Page 11: VHDL Overview

11

Levels of Abstraction

Behavioral

RTL

Structural

Page 12: VHDL Overview

12

VHDL Design Organization

Entitythe “symbol” (input/output ports)

Architectureone of the several possible implementation of the design

Configurationbinding between the symbol and one of the many possible implementation. Can be used to express hierarchy.

Page 13: VHDL Overview

13

Entity

AB

S

F

MUXentity mux isport (

a: in std_logic;b: in std_logic;s: in std_logic;f: out std_logic

)end mux;

Page 14: VHDL Overview

14

Architecture #1

architecture first_rtl of mux is begin mux_p: process (a,b,s) begin

f <= (a and s) or (b and not s); end process mux_p;

end first_rtl;

Page 15: VHDL Overview

15

Architecture #2

architecture rtl of mux is begin mux_p: process (a,b,s) begin

if (s=‘1’) then f <= a;

else f <= b; end if;

end process mux_p;end rtl;

Page 16: VHDL Overview

16

Configuration

configuration mux_c of mux isfor rtlend for;

end mux_c;

Page 17: VHDL Overview

17

Where did we get std_logic ?

Ohps !! We need to include some library before we can use this predefined data type

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;

Page 18: VHDL Overview

18

Predefined data types

bit: ‘0’ , ‘1’ boolean: false, true integer: from negative 231-1 to positive 231-1 std_ulogic: ‘1’,’0’,’H’,’L’,’X’,’U’,’Z’,’-’,’W’ std_logic: ‘1’,’0’,’H’,’L’,’X’,’U’,’Z’,’-’,’W’

Page 19: VHDL Overview

19

std_logic, and std_ulogic

‘1’, ’0’, ’X’ logic 1, logic 0, unknown ‘H’, ’L’, ’W’ weak 1,

weak 0, weak unknown

‘U’, ‘Z’, ‘-’ uninitialized, high impedance,don’t care

Page 20: VHDL Overview

20

resolved or unresolved ?

VHDL Driver – it is one contributor to the final value of a signal

Drivers are created by concurrent signal assignments

Recommendation: use std_logic, but always check that you do not have any multiple drivers (you don’t want any wired OR inside an ASIC !!!)

Page 21: VHDL Overview

21

Bad Multiple Drivers!!!

architecture bad of mux isbegin -- the two assignment works in parallel f <= a when s = ‘0’ else ‘0’; f <= b when s = ‘1’ else ‘0’;end bad;

Page 22: VHDL Overview

22

Better way of coding the mux

architecture better of mux isbegin f <= a when s = ‘0’ else f <= b when s = ‘1’ else ‘X’; -- what should the synthesis tool do here ? end better;

Page 23: VHDL Overview

23

One more coding for the mux

architecture even_better of mux isbegin f <= a when s = ‘0’ else f <= b when s = ‘1’ else ‘-’; -- there are tools that won’t appreciate all this

-- freedom (e.g. some formal verification tool)

end even_better;

Page 24: VHDL Overview

24

Good way of coding the mux

architecture good of mux isbegin f <= a when s = ‘0’ else f <= b; -- here all ambiguity are gone !!!end good;

Page 25: VHDL Overview

25

What is a process ?

A process statement is a concurrent statement, but all statements contained in it are sequential statement (statements that executes serially, one after the other).

The use of processes makes your code more modular, more readable, and allows you to separate combinational logic from sequential logic.

Page 26: VHDL Overview

26

The sensitivity list

List of all signals that the process is sensitive to. Sensitive means that a change in the value of these signals will cause the process to be invoked.

Page 27: VHDL Overview

27

The sensitivity list must be complete !!!

process (a)variable a_or_b;begin a_or_b := a or b; z <= a_or_b;end process;

-- since b is not in the-- sensitivity list, when-- a change occurs on b-- the process is not-- invoked, so the value-- of z is not updated-- (still “remembering”

the -- old value of z)

Page 28: VHDL Overview

28

Incomplete sensitivity list effect

a

b

z (VHDL)

z (gate level)

Page 29: VHDL Overview

29

What to put in sensitivity list ?

All signals you do a test on and all signals that are on the right side of an assignment.

In other words all the signals you are “reading” in the value

Don’t read and write a signal at the same time !!!

Page 30: VHDL Overview

30

Object Types

Constants Signals Variables

Page 31: VHDL Overview

31

Constant

It is just a name for a value.reset_c := ‘0’; bus_width_c := 32;

- 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 32: VHDL Overview

32

Signals

It is a physical signal (you can think of it like a piece of wire)

It is possible to define global signals (signals that can be shared among entities)

But more often signals are just locally defined for a given architecture

A signal assignment takes effect only after a certain delay (the smallest possible delay is called a “delta time”).

Page 33: VHDL Overview

33

Variables

It is a used as a local storage mechanism, visible only inside a process

All assignment to variables are scheduled immediately

Page 34: VHDL Overview

34

Signals vs. Variables

Signals assignments are scheduled after a certain delay

Variables assignments happen immediately, there is no delay

Page 35: VHDL Overview

35

Delta Time

architecture rtl of logic issignal a_or_b : std_logic; begin a_or_b <= a or b; -- a_or_b is scheduled @ t+

z <= a_or_b and c; -- z is scheduled @ t+2

end rtl;

Page 36: VHDL Overview

36

Bad example !!!

architecture bad of logic is signal a_or_b : std_logic; begin logic_p: process(a,b,c) begin a_or_b <= a or b; z <= a_or_b and c; end process;end bad;

Do not “read” and “write” a signal at the same time !!!

write

read

Page 37: VHDL Overview

37

How to fix the bad example

architecture good of logic is variable a_or_b : std_logic; begin logic_p: process(a,b,c) begin a_or_b := a or b; z <= a_or_b and c; end process;end good;

Page 38: VHDL Overview

38

Packages

Packages offers a mechanism to globally define and share values, types, components, functions and procedures that are commonly used.

package declaration and package body

Page 39: VHDL Overview

39

Subprograms

Procedures can return more than one value (they can have both input and output parameters)

Functions return always just one value (can have only input parameters)Example: conversion functions, resolution functions, …

Page 40: VHDL Overview

40

Attributes

Info attached to VHDL objects Some predefined attributes:

‘left the leftmost value of a type‘right‘high the greatest value of a type‘low‘length the number of elements in an array‘event a change on a signal or variable‘range the range of the elements of an array object

Page 41: VHDL Overview

41

Generic

parameter that pass information to an entity

entity adder isgeneric (width: integer := 5);port ( in_a : std_logic_vector(width-1 downto 0); in_b : std_logic_vector(width-1 downto 0); z : std_logic_vector(width-1 downto 0); carry: std_logic));end entity adder;

The initialization value is optional

Page 42: VHDL Overview

42

Component (socket mechanism)

Declare the name and interface of a “sub-unit”, to be used in the current level of design hierarchy.

component addergeneric (width : integer := 5)port ( in_a, in_b: in std_logic_vector; z : std_logic_vector; carry: std_logic);end component;

adder

adderinstance #1

adderinstance #2

Page 43: VHDL Overview

43

Example: a 7 bit adder (with bugs )

4 bits

3 bitsa(6:4)b(6:4)

z(6:0)

c

• big-adder-struct.vhd

• adder-rtl.vhd

a(3:0)b(3:0)

Page 44: VHDL Overview

44

adder-rtl.vhd-- -- author: Claudio Talarico-- file: adder-rtl.vhd-- comment: example of how to use generics and components --

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;

entity adder isgeneric (width : integer := 2);port ( a : in std_logic_vector(width-1 downto 0); b : in std_logic_vector(width-1 downto 0); c : out std_logic; --carry z : out std_logic_vector(width-1 downto 0) );end adder;

architecture rtl of adder isbegin

adder_p: process (a,b) variable a_v, b_v : unsigned(a'range); -- use of attributes variable z_v : unsigned(z'length downto z'low); begin a_v := unsigned(a); -- type casting b_v := unsigned(b); z_v := a_v + b_v; z <= std_logic_vector(z_v(width-1 downto 0)); -- type casting c <= z_v(width); end process adder_p;

end rtl;

Page 45: VHDL Overview

45

big-adder-struct.vhd-- -- author: Claudio Talarico-- file: big-adder-struct.vhd-- comment: example of how to use generics and components--

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;

entity big_adder isport ( a : in std_logic_vector(6 downto 0); b : in std_logic_vector(6 downto 0); c : out std_logic; --carryout z : out std_logic_vector(6 downto 0) );end big_adder;

architecture struct of big_adder is component adder generic( width : integer := 3); -- if there is more than one generic the separator is ; port ( a : in std_logic_vector(width-1 downto 0); b : in std_logic_vector(width-1 downto 0); c : out std_logic; --carry z : out std_logic_vector(width-1 downto 0) ); end component;

-- signal declaration -- It would be better to use the same names of the components signal a_in : std_logic_vector(width-1 downto 0); signal b_in : std_logic_vector(width-1 downto 0); signal z_out: std_logic_vector(width-1 downto 0); signal c_l: std_logic; -- carryout low signal c_h: std_logic; -- carryout high

-- CONTINUE on NEXT PAGE

Page 46: VHDL Overview

46

big-adder-struct.vhd

-- CONTINUE FROM PREVIOUS PAGE

begin

inst_add_l: adder -- low adder generic map (width => 4) -- if there is more than one generic the separator is , port map ( a => a_in(3 downto 0), b => b_in(3 downto 0), z => z_out(3 downto 0), c => c_l );

inst_add_h: adder -- high adder generic map (width => 3) -- if there is more than one generic the separator is , port map ( a => a_in(6 downto 4), b => b_in(6 downto 4), z => z_out(4 downto 4), c => c_h );

-- dummy assignment c <= c_h; end struct;

Page 47: VHDL Overview

47

ASSERT statement

The ASSERT checks a boolean expression and if the value is true does nothing, else will output a text string to std output.It can have different severity levels:NOTE, WARNING, ERROR, FAILURE

ASSERT falseREPORT “End of TestBench”SEVERITY ERROR;

Page 48: VHDL Overview

48

COMPLEX TYPES:

enumerated typesTYPE color is (red, blue, yellow, green)

ARRAYTYPE dbus is ARRAY (31 downto 0) of std_logic

Page 49: VHDL Overview

49

COMPLEX TYPES:

RECORD

TYPE instruction isRECORD opcode: integer; src: integer; dest: integer;END RECORD

Page 50: VHDL Overview

50

COMPLEX TYPES:

FILE

TYPE ram_data_file_t IS FILE OF INTEGER;FILE ram_data_file : ram_data_file_t IS IN “/claudio/vhdl/tb/ram.txt”

Page 51: VHDL Overview

51

More on FILEs

use std.textio.all; READ, WRITE, READLINE, WRITELINE,

ENDFILE, …

Page 52: VHDL Overview

52

Advanced Topics

VHDL supports overloading


Recommended