eem 334 digital systems iieem.eskisehir.edu.tr/userfiles/atdogan/files/l02-vhdl intro.pdf · •...
Post on 05-Jul-2020
2 Views
Preview:
TRANSCRIPT
3/2/12
1
EEM 334 Digital Systems II
Outline
• Overview on VHDL • Lexical Elements • Basic VHDL Program • STD_LOGIC • Modeling Wires and Buses
3/2/12
2
Overview on VHDL
Traditional Programming Language
• Can we use C or Java as HDL? • Modeled after a sequential process
– Operations performed in a sequential order – Help human's thinking process to develop an
algorithm step by step – Resemble the operation of a basic computer
model
3/2/12
3
HDL
• Characteristics of digital hardware – Connections of parts – Concurrent operations – Concept of propagation delay and timing
• Characteristics cannot be captured by traditional PLs
• Require new languages: HDL
Modern HDL
• Capture characteristics of a digital circuit: – entity – connectivity – concurrency – timing
• Cover description – In gate level and RT level – In structural view and behavioral view
3/2/12
4
Two HDLs Used Today • VHDL and Verilog • Syntax and ``appearance'' of the two
languages are very different • Capabilities and scopes are quite similar • Both are industrial standards and are
supported by most software tools
VHDL
• VHDL: VHSIC (Very High Speed Integrated Circuit) HDL
• Initially sponsored by DoD as a hardware documentation standard in early 80s
• Transferred to IEEE and ratified it as IEEE standard 1176 in 1987 (known as VHDL-87)
• Major modification in ’93 (known as VHDL-93)
• Revised continuously
3/2/12
5
IEEE Extensions • IEEE standard 1076.1 Analog and Mixed Signal
Extensions (VHDL-AMS) • IEEE standard 1076.2 VHDL Mathematical Packages • IEEE standard 1076.3 Synthesis Packages • IEEE standard 1076.4 VHDL Initiative Towards ASIC
Libraries (VITAL) • IEEE standard 1076.6 VHDL Register Transfer Level
(RTL) Synthesis • IEEE standard 1164 Multivalue Logic System for
VHDL Model Interoperability • IEEE standard 1029 VHDL Waveform and Vector
Exchange to Support Design and Test Verification (WAVES)
Lexical Elements
3/2/12
6
Lexical Elements
• Lexical element: – Basic syntactical units in a VHDL program
• Types of Lexical elements: – Comments – Identifiers – Reserved words – Numbers – Characters – Strings
Comments
• Comments in VHDL are indicated with a “double dash”, i.e., “--” – Comment indicator can be placed anywhere in
the line – Any text that follows in the same line is treated
as a comment – Carriage return terminates a comment – No method for commenting a block extending
over a couple of lines
3/2/12
7
Comments
Identifiers
• All names should start with an alphabet character (a-z or A-Z)
• Use only alphabet characters (a-z or A-Z) digits (0-9) and underscore (_)
• Do not use any punctuation or reserved characters within a name (!, ?, ., &, +, -, etc.)
• Do not use two or more consecutive underscore characters (__) within a name (e.g., Sel__A is invalid)
• All names and labels in a given entity and architecture must be unique
3/2/12
8
Valid or Invalid?
7segment_display A87372477424 Adder/Subtractor /reset And_or_gate AND__OR__NOT Kogge-Stone-Adder Ripple&Carry_Adder My adder
Identifiers
• VHDL is case insensitive • Names or labels
databus
Databus
DataBus DATABUS
are all equivalent
3/2/12
9
Reserved Words
Numbers
• Integer: 0, 1234, 98E7 (E: exponent) • Real: 0.0,1.23456, 9.87E6 • Other number bases are possible
– 45 = 2#101101# – 45 = 16#2D#
• Underscore for readability – 12_3456 = 123456 – 2#0011_1010_1101# = 2#001110101101#
3/2/12
10
Characters and Strings
• Character – ‘A’, ‘Z’ and ‘3’ – 1 and ‘1’ are different!
• String: a sequence of characters – “Hello” and “1000111” – 2#10110010# and 10110010 are different – “10100010” and “1011_0010” are different
Free Format
• VHDL is a “free format” language • No formatting conventions, such as
spacing or indentation, imposed by VHDL compilers.
• Space and carriage return treated the same way.
3/2/12
11
Free Format
A Good Header
3/2/12
12
Basic VHDL Program
Even Parity Detector
3/2/12
13
Language Organization
Entity
Architecture
Library
Library
• Library is a collection of commonly used pieces of code, grouped for reuse.
TYPES CONSTANTS FUNCTIONS
PROCEDURES COMPONENTS
TYPES CONSTANTS FUNCTIONS
PROCEDURES COMPONENTS
LIBRARY
PACKAGE 1 PACKAGE 2
3/2/12
14
Library Declaration Library
declaration
Use all definitions from
package std_logic_1164
Library Declaration - Syntax
LIBRARY library_name;
USE library_name.package_name.package_parts;
3/2/12
15
Commonly Used Libraries • ieee
– Specifies multi-level logic system including STD_LOGIC and STD_LOGIC_VECTOR data types
– Needs to be explicitly declared • std
– Specifies pre-defined data types (BIT, BOOLEAN, INTEGER, REAL, SIGNED, UNSIGNED, etc.), arithmetic operations, basic type conversion functions, basic text i/o functions, etc.
– Visible by default • work
– User-created designs after compilation – Visible by default
Design Entity
• Most basic building block of a design
• Represent arbitrarily complex systems
• One entity – many different architectures
entity declaration
architecture 1
architecture 2
architecture 3
design entity
3/2/12
16
Design Entity
• VHDL design entity has two main parts: – Interface (Entity)
• Specification – What a design does • Boundary (Inputs and outputs) between
system and its environment – Body (Architecture)
• Implementation – How a design implements • Describes how the outputs responds to
inputs
Entity
• Name of the circuit: even_detector • One input port – a
– Three element array: a(2), a(1), a(0) • One output port – even
3/2/12
17
Entity Declaration
• entity_name: any legal identifier • No semicolon after the last port • File extension for a VHDL file is .vhd • Name of the file should be the same as
the entity name (even_detector.vhd) – Place each entity in a different file
Port Declaration
• port name: any legal identifier • mode:
– in, out, inout, buffer • data type: a set of legal values for the port
– std_logic, std_logic_vector, integer, signed, etc.
3/2/12
18
a
Entity Port signal
Driver resides outside the entity
Port Mode IN
Entity
Port signal
Driver resides inside the entity
Output cannot be read within the entity
z
c <= z
c
Port Mode OUT
3/2/12
19
Port signal
Entity
Driver resides inside the entity
Signal x can be read inside the entity
x
c
z
z <= x c <= x
Port Mode OUT (with extra signal)
Entity
Port signal
Driver resides inside the entity
Port signal Z can be read inside the entity
c
z
c <= z
Port Mode BUFFER
3/2/12
20
Signal can be read inside the entity
Entity Port signal
Driver may reside both inside and outside of the entity
a
Port Mode INOUT
Port Modes: Summary • The Port Mode of the interface describes the direction in which
data travels with respect to the component – In: Data comes in this port and can only be read within
the entity. It can appear only on the right side of a signal or variable assignment.
– Out: The value of an output port can only be updated within the entity. It cannot be read. It can only appear on the left side of a signal assignment.
– Inout: The value of a bi-directional port can be read and updated within the entity model. It can appear on both sides of a signal assignment.
– Buffer: Used for a signal that is an output from an entity. The value of the signal can be used inside the entity, which means that in an assignment statement the signal can appear on the left and right sides of the <= operator
INOUT AND BUFFER NOT USED IN EEM334
3/2/12
21
Architecture
• sop_arc is an realization of even_detector • signal – wires that connect internal parts • begin, end – architecture description
Declarations
Architectural Description
Architecture Declaration
• arch_name: any legal identifier • entity_name: always linked to an entity • declarations: optional • concurrent statement: operation
performed by the circuit
3/2/12
22
STD_LOGIC
BIT versus STD_LOGIC
• BIT type can only have a value of ‘0’ or ‘1’ • STD_LOGIC can have nine values
– 'U',‘0’,’1’,’X’,’Z’,’W’,’L’,’H’,’-’ – Useful mainly for simulation – ‘0’,’1’, and ‘Z’ are synthesizable
3/2/12
23
STD_LOGIC Type
Value Meaning
'U' Uninitialized
‘X’ Forcing (Strong driven) Unknown
‘0’ Forcing (Strong driven) 0
‘1’ Forcing (Strong driven) 1
‘Z’ High Impedance
‘W’ Weak (Weakly driven) Unknown
‘L’ Weak (Weakly driven) 0. Models a pull down.
‘H’ Weak (Weakly driven) 1. Models a pull up.
‘-’ Don't Care
More on STD_LOGIC Meanings (1)
‘1’
‘0’
‘X’
Contention on the bus
3/2/12
24
More on STD_LOGIC Meanings (2)
‘0’
VDD
‘H’
‘0’
‘1’
‘L’
VDD
More on STD_LOGIC Meanings (3)
3/2/12
25
More on STD_LOGIC Meanings (4)
• ‘-’: do not care • Can be assigned to outputs for the case of
invalid inputs (may produce significant improvements in resource utilization after synthesis)
• Use with caution – ‘1’=‘-’ gives FALSE
Resolving Logic Levels
U X 0 1 Z W L H - U U U U U U U U U U X U X X X X X X X X 0 U X 0 X 0 0 0 0 X 1 U X X 1 1 1 1 1 X Z U X 0 1 Z W L H X W U X 0 1 W W W W X L U X 0 1 L W L W X H U X 0 1 H W W H X - U X X X X X X X X
3/2/12
26
STD_LOGIC Rules
• In EEM 334, use std_logic or std_logic_vector for all entity input or output ports – Do not use integer, unsigned, signed, bit for ports – Can use other types inside an architecture if
desired – Can use other types in generics
• Instead use std_logic_vector and a conversion function inside your architecture
MODELING WIRES AND BUSES
3/2/12
27
Single Wire Versus Bus
wire
a
bus
b
1
8
SIGNAL a : STD_LOGIC;
SIGNAL b : STD_LOGIC_VECTOR(7 downto 0);
Standard Logic Vectors
SIGNAL a: STD_LOGIC; SIGNAL b: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL c: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL e: STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL f: STD_LOGIC_VECTOR(8 DOWNTO 0); ………. a <= '1'; b <= "0000"; -- Binary base assumed by default c <= B"0000"; -- Binary base explicitly specified d <= "0110_0111"; -- You can use '_' to increase readability e <= X"AF67"; -- Hexadecimal base f <= O"723"; -- Octal bas
3/2/12
28
Single versus Double Quote
• Use single quote to hold a single bit signal – a <= '0', a <='Z'
• Use double quote to hold a multi-bit signal – b <= "00", b <= "11"
Vectors and Concatenation
SIGNAL a: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL b: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL c, d, e: STD_LOGIC_VECTOR(7 DOWNTO 0); a <= "0000"; b <= "1111"; c <= a & b; -- c = "00001111" d <= '0' & "0001111"; -- d <= "00001111" e <= '0' & '0' & '0' & '0' & '1' & '1' & '1' & '1'; -- e <= "00001111"
3/2/12
29
STD_LOGIC versus STD_ULOGIC
• STD_LOGIC resolves types which conflict via the conflict resolution table
• STD_ULOGIC does not allow for conflicts on buses and will not resolve multiple sources for a signal
• We only use STD_LOGIC in this course
top related