Teil 1 - Informatik 12

Grundlagen der Technischen Informatik
Kapitel 10, VHDL, Teil 1
Dr.-Ing. Stefan Wildermann
Lehrstuhl für Hardware-Software-Co-Design
Grundlagen der Technischen Informatik
VHSIC Hardware Description Language
Zur Entwicklung von VHDL
• VHSIC (Very High Speed Integrated Circuit) Projekt,
Projektträger US-Regierung (1980)
• VHDL: VHSIC Hardware Description Language
• IEEE Standard 1076.1 für VHDL (1987)
…
• IEEE Standard 1076-2008 (release 2009)
Grundlagen der Technischen Informatik
2
Vorteile von VHDL
• Standard
einheitliche Schnittstelle zwischen Werkzeugen und Firmen
Portabilität
Entwürfe können durch verschiedene Synthesewerkzeuge
optimiert und durch verschiedene Analysewerkzeuge simuliert
werden
Technologie- und Firmenunabhängigkeit
Wechsel des Technologiepartners leicht möglich
• Unterstützung durch DOD (US Department of Defense)
große Überlebenswahrscheinlichkeit
• Starke Modellierungsmöglichkeiten:
– Entwurf parametrisierter Schaltungen möglich, z.B. Prozessor mit
Bitbreite n,
Wiederverwendbarkeit!
Grundlagen der Technischen Informatik
3
Wie wird VHDL eingesetzt?
• Beschreibung des gewünschten Verhaltens auf hoher
Abstraktionsebene.
• Modellierungssprache
• Dokumentierungssprache
• Simulationssprache
Testen der Spezifikation durch Simulation des Modells
• Synthesesprache
Automatische Synthese für Zielarchitekturen wie Field-Programmable
Gate Arrays (FPGAs) und Application-Specific Integrated Circuits
(ASICs)
Grundlagen der Technischen Informatik
4
Aufbau einer VHDL-Beschreibung
use
Bereitstellung von Bibliotheken
entity
Definition der Schnittstelle zur
Umgebung
architecture
Implementierung der Entity,
Aufbau und Funktion des
Systems
Grundlagen der Technischen Informatik
5
VHDL-Basics: Bezeichner
Bezeichner (Identifiers) werden für Namen (von Entities,
Architectures, Signalen, Variablen) benutzt
Syntax
identifier:
letter_or_digit:
letter { [ underline ] letter_or_digit }
letter | digit
Beispiele
carry_OUT
Count7SUB_2_goX
Beispiele ungültiger Wörter
7AB
@B
PI__A
Wichtig: VHDL beachtet Groß- und Kleinschreibung nicht
Grundlagen der Technischen Informatik
6
VHDL-Basics: Kommentare
Ein Kommentar beginnt mit "--" und endet mit dem
Zeilenenende.
Beispiel
A <= B; -- Weise dem Signal A den Wert von Signal B zu
-- Anweisungen werden mit Semikolon (;) abgeschlossen
Grundlagen der Technischen Informatik
7
Aufbau einer VHDL-Beschreibung
use
Bereitstellung von Bibliotheken
entity
Definition der Schnittstelle zur
Umgebung
architecture
Implementierung der Entity,
Aufbau und Funktion des
Systems
Grundlagen der Technischen Informatik
8
Entities
• Entity beschreibt die Schnittstelle eines Moduls
• Die port_liste ist eine Liste der Ein- und Ausgänge, also der Ports
der Entity,
• ENTITY , IS, PORT und END sind VHDL-Schlüsselwörter und können
nicht als Bezeichner verwendet werden
ENTITY entity_name IS
PORT(
port_liste
);
END [entity_name];
eckige Klammer
bedeutet, die
Angabe ist optional
Grundlagen der Technischen Informatik
9
Entities
• Schnittstellenbeschreibung eines Halbaddierers
• Eine ENTITY kann man sich als „Symbol einer Komponente“ vorstellen
Listenelement:
ENTITY half_adder IS
PORT(
i_x
: IN bit;
i_y
: IN bit;
i_enable : IN bit;
o_carry : OUT bit;
o_result : OUT bit
);
END half_adder;
identifier : PORT_MODUS Datentyp
Strichpunkte trennen nur die
Listenelemente voneinander,
und deshalb hat der letzte
Eintrag keinen Strichpunkt.
Grundlagen der Technischen Informatik
10
Entities: Port-Modus
Es gibt 5 Port-Modi:
•
•
•
•
IN
OUT
INOUT
BUFFER
• LINKAGE
-- der Port ist ein Eingangsport
-- der Port ist ein Ausgangsport
-- bidirektionaler Port
-- bidirektionaler Port; zu jedem Zeitpunkt wird
der Port nur von höchstens einer Quelle
getrieben
-- unbekannt, ob Eingang oder Ausgang
ENTITY half_adder IS
PORT(
i_x
: IN bit;
i_y
: IN bit;
i_enable : IN bit;
o_carry : OUT bit;
o_result : OUT bit
);
END half_adder;
Grundlagen der Technischen Informatik
11
nicht
verwenden
Aufbau einer VHDL-Beschreibung
use
Bereitstellung von Bibliotheken
entity
Definition der Schnittstelle zur
Umgebung
architecture
Implementierung der Entity,
Aufbau und Funktion des
Systems
Grundlagen der Technischen Informatik
12
Datentypen im Package Standard (1)
Package Standard
package STANDARD is
type BOOLEAN is (FALSE, TRUE);
type BIT is ('0', '1');
type CHARACTER is (NUL, SH, STX, EOT, ENQ, ACK, BEL, ...,
'x', 'y', 'z', '{', '|', '}', '~', DEL );
type SEVERITY_LEVEL is (NOTE, WARNING, ERROR, FAILURE);
type INTEGER is range -2147483648 to +2147483647;
type REAL is range -0.1797693134862e+309 to +0.1797693134862e+309;
type TIME is range -9223372036854775807 to +9223372036854775807
units
fs;
-- femtosecond
ps = 1000 fs;
-- picosecond
ns = 1000 ps;
-- nanosecond
us = 1000 ns;
-- microsecond
ms = 1000 us;
-- millisecond
sec = 1000 ms;
-- second
min = 60 sec; -- minute
hr = 60 min; -- hour
end units;
Grundlagen der Technischen Informatik
13
Datentypen im Package Standard (1)
function NOW return TIME;
subtype NATURAL is INTEGER range 0 to INTEGER'HIGH;
subtype POSITIVE is INTEGER range 1 to INTEGER'HIGH;
type STRING is array ( POSITIVE range <> ) of CHARACTER;
type BIT_VECTOR is array ( NATURAL range <> ) of BIT;
end STANDARD;
• Realisierung des Standard-Paketes ist versteckt ("information hiding")
• Wir benutzen die IEEE Library, die auf dem Standard-Package
aufsetzt.
Grundlagen der Technischen Informatik
14
IEEE- Packages
• library- und use-Anweisung:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_misc.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_components.all;
.all bedeutet, dass alle
Teile der Bibliothek
übernommen werden
Grundlagen der Technischen Informatik
15
Package IEEE.std_logic_1164
Die Bibliothek IEEE
• enthält das Paket std_logic_1164, in dem gebräuchliche Typen und
Funktionen vordefiniert sind.
package std_logic_1164 is
-- logic state system
type std_logic is(
'u',
-- Uninitialized
'x',
-- Forcing Unknown
'0',
-- Forcing 0
'1',
-- Forcing 1
'z',
-- High Impedance, hochohmiger Ausgang
'w',
-- Weak Unknown
'l',
-- Weak 0
'h',
-- Weak 1
'-'
-- Don't care
);
type std_logic_vector is array (natural range<>) of std_ulogic;
-- edge detection
FUNCTION rising_edge (SIGNAL s : std_ulogic) RETURN BOOLEAN;
FUNCTION falling_edge (SIGNAL s : std_ulogic) RETURN BOOLEAN;
Grundlagen der Technischen Informatik
16
std_logic
• 9-wertiges Logik-Signal std_logic, std_ulogic
• Modellierung realer Signale: können neben den logischen Zuständen
noch Zwischenzustände wie „Uninitialisiert“ oder „Unbekannt“
annehmen.
• Heute faktisch Industrie-Standard
Wert
‘U‘
‘X‘
‘0‘
‘1‘
‘Z‘
‘W‘
‘L‘
‘H‘
‘-‘
Bedeutung
uninitialisiertes Signal
undefiniert, da mehrere aktive Signaltreiber (Signalquellen)
logische 0
logische 1
hochohmiger Ausgang (Tri-State-Ausgang)
schwach unbekannt, Buskonflikt zwischen „low“ und „high“
schwache logische 0
schwache logische 1
don‘t care
Grundlagen der Technischen Informatik
17
Aufbau einer VHDL-Beschreibung
use
Bereitstellung von Bibliotheken
entity
Definition der Schnittstelle zur
Umgebung
architecture
Implementierung der Entity,
Aufbau und Funktion des
Systems
Grundlagen der Technischen Informatik
18
Architecture
• Architecture beschreibt den inneren Aufbau und die Funktion eines
Moduls
ARCHITECTURE architecture_name OF entity_name IS
-- Deklaration nur intern genutzter Signale
BEGIN
-- Body aus nebenläufigen Prozessen und Anweisungen
END [ARCHITECTURE] architecture_name;
Grundlagen der Technischen Informatik
19
Nebenläufigkeit
ARCHITECTURE … IS
-- Deklaration nur intern genutzter Signale
BEGIN
Prozess (PROCESS)
enthält sequentielle Anweisungen
Prozess (PROCESS)
enthält sequentielle Anweisungen
nebenläufige Anweisung (concurrent statement);
nebenläufige Anweisung (concurrent statement);
nebenläufige Anweisung (concurrent statement);
END …;
Grundlagen der Technischen Informatik
20
laufen nebenläufig
zueinander ab
Modellierungssichtweisen
• Datenflussbeschreibung
• Verhaltensbeschreibung
• Strukturbeschreibung
Grundlagen der Technischen Informatik
21
Datenflussbeschreibung
• Eignet sich für reinkombinatorische, ungetaktete Logik
• Durch ausschließliche Verwendung nebenläufiger Anweisungen möglich
i_enable i_y
i_x
o_carry
o_result
Grundlagen der Technischen Informatik
22
Datenflussbeschreibung
• Eignet sich für reinkombinatorische, ungetaktete Logik
• Durch ausschließliche Verwendung nebenläufiger Anweisungen möglich
i_enable i_y
i_x
o_carry
o_result
architecture dataflow of half_adder is
begin
o_carry <= i_enable and i_x and i_y;
Klammern setzten, um
korrekte Ausführung
zu gewährleisten
o_result <= i_enable and (i_x xor i_y);
end architecture dataflow;
Grundlagen der Technischen Informatik
23
Verhaltensbeschreibung
• Keine (reinen) Logikgleichungen, sondern Verhalten wird auf
algorithmischer Ebene beschrieben
• Im Allgemeinen übersichtlicher und weniger fehlerträchtig
• Durch Verwendung von Prozessen möglich
process (sensitivitaets_liste) is
-- Deklaration lokaler Variablen und Signale
begin
-- Beschreibung des Verhaltens
end process;
Grundlagen der Technischen Informatik
24
VHDL-Basics: Kontrollstruktur if
Syntax
if_statement :
if condition then
sequence_of_statements
{ elsif condition then
sequence_of_statements }
[ else sequence_of_statements ]
end if;
Grundlagen der Technischen Informatik
25
Verhaltensbeschreibung
• Sequentielle Abarbeitung der Anweisungen innerhalb eines Prozesses
• Sensitivitätsliste enthält alle Signale, deren Änderung das Ergebnis
des Prozesses ändern
– Wichtig für die Simulation, da hier die Ausführung nur dann angestoßen wird, wenn
eine entsprechende Signaländerung stattfand
architecture behavior of half_adder is
begin
end architecture behavior;
Grundlagen der Technischen Informatik
26
Sensitivitätsliste
sequentielle
Abarbeitung
process (i_enable, i_x, i_y) is
begin
if i_enable = ‘1’ then
o_result <= i_x xor i_y;
o_carry <= i_x and i_y;
else
o_result <= ‘0’;
o_carry <= ‘0’;
end if;
end process;
Strukturbeschreibung
• Hierarchisches Design aus Komponenten, die durch eigene VHDLModule beschrieben sind
• Im Wesentlichen Umsetzung eines Schaltplans/Blockdiagramms:
Instanziierung der Komponenten und „Verdrahtung“
• Beispiel: Volladdierer aus Halbaddierern
a
b
cin
i_enable
c1
half_
adder
cout
s1
c2
half_
adder
Grundlagen der Technischen Informatik
27
sum
Strukturbeschreibung
c1
a
b
architecture structure of full_adder is
cin
component half_adder
port (i_x, i_y, i_enable: in std_logic;
o_result, o_carry: out std_logic );
end component;
half_
adder
s1
cout
c2
half_
adder
sum
i_enable
signal c1, s1, c2 : std_logic;
begin
Deklaration aller
HA1: half_adder port map (
und
i_x => a, i_y =>b, i_enable => i_enable, o_resultKomponenten
=> s1, o_carry
=> c1);
HA2: half_adder port map (s1, cin, i_enable, sum, c2);
cout <= c1 or c2;
end architecture structure;
Grundlagen der Technischen Informatik
28
Signale, die benötigt
werden
Strukturbeschreibung
„Verdrahtung“ aller Komponenten und
Signale.
Einbindung von Komponenten erfolgt mittels
architecture
port map():structure of full_adder is
• name mapping: Zuweisung über die
component half_adder
PORT-Namen
gemäß
Entityin(siehe
HA1)
port
(i_x, i_y,
i_enable:
std_logic;
• positional
mapping:
Zuweisung
über
o_result,
o_carry:
out std_logic
);
end
component;
Positionen
in PORT-Anweisung der Entity
(siehe HA2)
signal c1, s1, c2 : std_logic;
c1
a
b
cin
half_
adder
s1
half_
adder
cout
c2
sum
i_enable
begin
HA1: half_adder port map (
i_x => a, i_y =>b, i_enable => i_enable, o_result => s1, o_carry => c1);
HA2: half_adder port map (s1, cin, i_enable, sum, c2);
cout <= c1 or c2;
end architecture structure;
Grundlagen der Technischen Informatik
29
VHDL-Basics: Rechnen in VHDL
• Wie werden denn allgemein n-Bit Zahlen in VHDL addiert?
• Muss ich in VHDL tatsächlich selbst Addierer bauen?
• Nein!
Grundlagen der Technischen Informatik
30
VHDL-Basics: Operatoren
•
•
•
•
•
•
Logische Operatoren: and, or, nand, nor, xor
Relationale Operatoren: =, /=, <, <=, >, >=
Addition und Konkatenation: +, -, &
Vorzeichen: +, Multiplikation: *, /, mod, rem
Exponent, Absolutbetrag, Komplement: **, abs,
not
• Beispiele
A and B and C
A nand B nand C
beschreibt ein 3-Input AND-Gatter
beschreibt kein 3-Input
NAND-Gatter!
Grundlagen der Technischen Informatik
31
VHDL-Basics: Datentypen
Integer
• Wertebereich:
-2.147.483.647 bis +2.147.483.647 (-231+1 bis 231-1)
signal x : integer range 0 to 100;
…
x <= x + 1;
Addierer wird
automatisch während
der Synthese erzeugt
• Beschränkung auf den
Wertebereich, der
tatsächlich benötigt wird
• Sonst werden per Default
32-Bit Wörter erzeugt
Grundlagen der Technischen Informatik
32
VHDL-Basics: Arrays = Binärzahlen
• Felder (arrays) dienen der Bündelung von Variablen des gleichen Typs
• 3-Bit breites Wort, Big Endian:
signal x bit_vector (0 to 2);
signal data std_logic_vector (0 to 2);
data <= “011”;
data(0) <= ‘0’;
data(1) <= ‘1’;
data(2) <= ‘1’;
• 3-Bit breites Wort, Little Endian:
signal x bit_vector (2 down to 0);
signal data std_logic_vector (2 down to 0);
data <= “011”;
data(0) <= ‘1’;
data(1) <= ‘1’;
data(2) <= ‘0’;
Grundlagen der Technischen Informatik
33
VHDL-Basics: Rechnen auf Binärzahlen
• Rechenoperationen auf std_logic_vector sind zu vermeiden, da
teilweise gar nicht synthetisierbar
– Ist die Zahl als vorzeichenlos oder vorzeichenbehaftet zu interpretieren?
• ieee.numeric_std (ieee library package) definiert UNSIGNED und
SIGNED als Arrays von std_logic sowie arithmetische Operationen:
–
–
type SIGNED is array(NATURAL range <>) of STD_LOGIC;
type UNSIGNED is array(NATURAL range <>) of STD_LOGIC;
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
…
signal a, b: signed(3 downto 0);
…
a <= a + b;
Addierer wird
automatisch während
der Synthese erzeugt
Grundlagen der Technischen Informatik
34
Konstanten, Variablen und Signale
Grundlagen der Technischen Informatik
Konstanten, Variablen und Signale
• Konstanten
–
der Wert einer Konstante kann nicht verändert werden.
Beispiele:
constant bus_width
constant PI
: integer := 8;
: real := 3.1415;
constant zero :
std_logic_vector(3 downto 0):= “0000";
Grundlagen der Technischen Informatik
36
Konstanten, Variablen und Signale
• Variablen
– unterscheiden sich nicht von Variablen anderer höheren
Programmiersprachen
– Eine Variable hat „kein Gegenstück in der Hardware“ !
– Variablen werden im Rahmen von Zwischenrechnungen verwendet
• Signale
– sind in anderen Programmiersprachen nicht zu finden
– Ein Signal kann man als verbindende physikalische Leitung bzw. als Register
ansehen
• Beispiele
variable ROW, COLUMN : integer range 0 to 31;
variable TEMP
: std_logic_vector(3 downto 0):= “0000";
signal CLK, RESET
signal COUNTER
: bit;
: integer range 0 to 31;
Grundlagen der Technischen Informatik
37
Variablen contra Signale (Syntax)
• Verschiedene Syntax für Zuweisungen:
– Zuweisung einer Variable:
target_variable := value_expression;
– Zuweisung eines Signals:
target_signal <= value_expression;
• Beispiel:
temp := temp + 1;
output <= input + 1;
-- variable temp
-- signals input and output
Grundlagen der Technischen Informatik
38
Variablen contra Signale (Semantik)
• Deklaration
– Variablen werden in Prozessen / Unterprogrammen deklariert und
sind auch nur da sichtbar
– Signale können nicht in Prozessen / Unterprogrammen deklariert
werden.
• Verwendung
– Variablen werden zum Abspeichern temporärer Werte benutzt
– Signale stehen üblicherweise für Verbindungen oder Register in der
Hardware
• Wertzuweisung
– bei Variablen erfolgt sofort, wenn die Variablenzuweisung
ausgeführt wird.
– bei Signalen erfolgt nicht sofort, wenn die Signalzuweisung
ausgeführt wird.
• Die Signalzuweisung aktualisiert den Signaltreiber.
• Der Signaltreiber gibt die Information an die Signale erst an das
Signal weiter, wenn der Prozess angehalten hat.
Grundlagen der Technischen Informatik
39
Wertzuweisung Signal
• Bei Signalen erfolgt die Wertzuweisung, wenn der Prozess angehalten
hat
architecture behavior of watch is
signal hours : integer := 0;
begin
…
-- Stunde um eins Erhöhen
process (c) is
begin
if c = ‘1’ then
hours <= hours + 1;
if hours = 24 then
hours <= 0;
end if;
Signal: Wertzuweisung erfolgt
hier
end if;
end process;
end architecture watch;
Grundlagen der Technischen Informatik
40
Wertzuweisung Signal contra Variable
• Bei Signalen erfolgt die Wertzuweisung, wenn der Prozess angehalten
hat
architecture behavior of watch is
signal hours : integer := 0;
begin
…
-- Stunde um eins Erhöhen
process (c) is
begin
if c = ‘1’ then
hours <= hours + 1;
if hours = 24 then
hours <= 0;
end if;
end if;
end process;
end architecture watch;
-- Stunde um eins Erhöhen
process (c) is
variable temp : integer := 0;
begin
if c = ‘1’ then
temp := hours + 1;
if temp = 24 then
hours <= 0;
else
hours <= temp;
end if;
end if;
end process;
Variable:
Wertzuweisung erfolgt
sofort
Grundlagen der Technischen Informatik
41
Wertzuweisung Signal contra Variable
• Eine Variable hat „kein Gegenstück in der Hardware“ !
• Generell kann man das Verhalten auch ohne Verwendung von
Variablen beschreiben
if c = ‘1’ then
if hours = 23 then
hours <= 0;
else
hours <= hours + 1;
end if;
end if;
if c = ‘1’ then
hours <= hours + 1;
if hours = 23 then
hours <= 0;
end if;
end if;
-- Stunde um eins Erhöhen
process (c) is
variable temp : integer := 0;
begin
if c = ‘1’ then
temp := hours + 1;
if temp = 24 then
hours <= 0;
else
hours <= temp;
end if;
end if;
end process;
Signal: Die letzte
Wertzuweisung wird wirksam
Grundlagen der Technischen Informatik
42
Selbst VHDL schreiben und simulieren…
• Viel kommerzielle Software, aber auch Gratis- und
Studenten-Versionen, z.B.
Xilinx Vivado HL WebPACK
http://www.xilinx.com/support/download.html
(GB !)
• Auch Cloud-basierte Simulatoren verfügbar, z.B.
EDA playground
http://www.edaplayground.com/
Grundlagen der Technischen Informatik
43