• Keine Ergebnisse gefunden

Digital Design

N/A
N/A
Protected

Academic year: 2021

Aktie "Digital Design "

Copied!
26
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Digital Design

Functional Definition Interface Delclaration Design Entity A

Architecture Body Entity Declaration 5.3.1 VHDL-Beschreibung

Device A

Entity Declaration - Abstraktions eines Designs –

* repräsentiert ein komplettes System, ein Board, einen Chip, eine Funktion oder ein logisches Gatter

* besteht aus der Beschreibung von I/Os und evtl. Parametern

Architecture Body – Funktionale Beschreibung einer "Design Entity" -

* beschreibt die Funktion auf Verhaltens-, Struktur- oder Datenfluss-Ebene

(2)

Digital Design

Beispiel: 4 Bit Komparator

-- Komp4; Äquivalenz entity Komp4 is

port (a, b: in bit_vector (3 downto 0);

equ: out bit); -- "High" bei Gleichheit end Komp4;

architecture datenfluss of Komp4 is Kommentar von "--"

bis Zeilenende

Deklaration der Ein-/Ausgänge (in / out)

Typ: Vektor (links ist msb) VHDL-Schlüsselworte

(Fettbuchstaben)

begin

equ <= '1' when (a = b) else '0';

end datenfluss;

Zeilenende: "

;

"

Signal Assignment (bedingt)

(3)

Digital Design

5.3.2 Entity

entity entity_identifier is

[generic (generic_interface_list);]

[port (port_interface_list);]

end entity_identifier

5.3.2.1 Die Schnittstellensignale

(port_interface_list)=:

port_identifier {,...} : [mode] subtype_indication [:= expression]

dabei sind:

"mode": in das Signal kann nur gelesen werden out es kann nur geschrieben werden

inout es kann sowohl gelesen als auch geschrieben werden

buffer ähnlich wie "out", kann auch innerhalb einer Architektur gelesen werden

"subtype_identication": Typ des Signals

"expression": ein optionaler Ausdruck, der den Defaultwert des Signals definiert

(4)

Digital Design

Folgende Standard-Datentypen sind definiert:

BOOLEAN: true / false

BIT: '0' / '1'

INTEGER: -2147483647 bis + 2147483647

REAL: -1E38 bis +1E38

CHARACTER: a, b, c, ...

TIME: femtosec und Umrechnungsfaktoren bis Minuten SEVERITY LEVEL: note, warning, error, failure

(weitere in Bibliotheken z.B.: std_logic_1164 in Standard-Bibliothek "ieee") Beispiele:

entity and2 is

port (e1,e2: in BIT := '0';

s: out BIT);

end and2;

entity speicher is

port (daten: in INTEGER :=0;

adressen: in INTEGER;

takt: in BIT) end and2;

(5)

Digital Design

5.3.2.2 Generic-Parameter

(generic_interface_list)=:

gen_identifier {,...} : subtype_indication [:= expression]

Mit Hilfe von Generic-Parametern können Komponenten parametrisiert werden Beispiel:

entity and2 is

generic (default: BIT := '0');

port (e1,e2: in BIT := default;

s: out BIT);

end and2;

(6)

Digital Design

5.3.3 Architecture

Innerhalb der "Architecture" einer Komponentenbeschreibung wird die Funktion der Komponente beschrieben.

architecture arch_identifier of entity_name is

-- Dekarationsbereich begin

-- Funktions- und Strukturbeschreibung end arch_identifier;

Im Deklarationsbereich können nur in der "Architektur" sichtbare Objekte (z.B.: Signale, Konstante, Typen, ...) deklariert werden.

Nach dem Schlüsselwort "begin" folgt die eigentliche Beschreibung des Verhaltens mit Hilfe von sogenannten "concurrent statements".

(7)

Digital Design

Unterschiedliche Beschreibungsmöglichkeiten!

Beispiel: NOR-Gate ENTITY nor_gate IS

PORT (a,b: IN BIT; c: OUT BIT);

END nor_gate;

ARCHITECTURE dflow OF nor_gate IS - - Deklarationsbereich

BEGIN

- - Conditional Signal Assignment Statement c <= '1' WHEN a = '0' AND b = '0' ELSE

'0' WHEN a = '0' AND b = '1' ELSE '0' WHEN a = '1' AND b = '0' ELSE '0' WHEN a = '1' AND b = '1' ELSE '0';

- - beliebige Zahl von WHEN-ELSE Kombinationen möglich - - allerdings muss das letzte Statement ein "ELSE" mit - - anschließendem Signalzustand sein

END dflow;

ENTITY nor_gate IS

PORT (a,b: IN BIT; c: OUT BIT);

END nor_gate;

ARCHITECTURE dflow2 OF nor_gate IS BEGIN

c <= a NOR b;

END dflow2;

(8)

Digital Design

5.3.4 Verknüpfung mehrerer Funktionen durch Signale Beispielschaltung:

Eine Änderung von z.B. "b" wirkt sich auf den Ausgang "out_1" und auf interne Signal "int"

aus!

Definition des internen Signals "int" in der Declarative Region der Architecture

(MODE ist automatisch INOUT):

SIGNAL signal_name : TYPE [:= initial_value];

(Damit lassen sich der Ausgang von "NAND2" und der Eingang von "XOR2" verbinden)

VHDL-Modell der Beispielschaltung:

ENTITY beispielsch IS PORT (a,b: IN BIT;

out_1: OUT BIT);

END beispielsch;

ARCHITECTURE schaltung OF beispielsch IS SIGNAL int: BIT;

BEGIN

int <= a NAND b;

out_1 <= int XOR b;

END schaltung;

(9)

Digital Design

5.3.5 Concurrent Execution

Ablauf des "Beispielcodes"

Zeit a b out_1 int

0 1 1 1 0

1 1 0 1 0

1+Dt 1 0 0 1

1+2*Dt 1 0 1 1

VHDL-Simulation

"gleichzeitige" Abarbeitung durch "virtuelle Verzögerung" (Æ Reihenfolge der Signal- zuweisungen ist nicht relevant)

Signalzuweisung erst nach Zeit Dt – Iterative Abarbeitung

(bei einer Signaländerung z.B. von "b" aus

"schaltung" von "beispielsch" erfolgt die Änderung von "int" erst nach einer Zeit "Dt";

dieser "Event" führt zu erneuten Zuweisungen von "int" und "out_1" – "out_1" erhält damit seinen endgültigen Wert nach "2*Dt")

...

ARCHITECTURE schaltung OF beispielsch IS

SIGNAL int: BIT;

BEGIN

out_1 <= int XOR b;

int <= a NAND b;

END schaltung;

(10)

Digital Design

5.3.6 Signale

5.3.6.1 Signaldeklaration

Signale können bei der Portdefinition in der "ENTITY" deklariert werden oder innerhalb der

"Architecture" (im Deklarationsbereich, innerhalb von Prozessen,....).

Wenn Signale innerhalb der "Architecture" deklariert sind, sind auch nur "beschränkt" gültig bzw. sichtbar (d.h. innerhalb der "Architecture" bzw. bestimmten Bereichen)

Deklaration:

signal sig_identifier {, ...} : subtype_indication [:= expression];

Beispiel:

signal wert: INTEGER := 16-4;

signal daten bit_vector (31 downto 0);

signal daten2 bit_vector ((breite-1) downto 0); -- breite mit "generic" definiert

5.3.6.2 Signalzuweisung

Die Zuweisung erfolgt durch "<="

sig_name <= waveform;

(11)

Digital Design

5.3.6.3 Zeitabhängige Zuweisungen (nur für Verhaltensbeschreibung)

c<= a NOR b AFTER x ns

Bei einer Signalzuweisung nimmt der Ausgang nach einem "Event" (Änderung des

Zustandes eines Einganges) erst nach x ns einen neuen Zustand an; "Spikes" kürzer als x ns werden unterdrückt

c<= TRANSPORT a NOR b AFTER x ns

Auch Änderungen, die kürzer als x ns sind, wirken sich auf den Ausgang aus 5.3.6.4 Bedingte Signalzuweisung

sig_name <= waveform when bool_expression else {waveform when bool_expression else}

waveform;

Je nach dem Wert von "bool_expression" wird entschieden, welcher "waveform-Ausdruck"

dem Signal "sig_name" zugewiesen wird. Es kann in jedem Fall ein Wert zugewiesen werden, weil der "letzte Wert" nicht an eine Bedingung geknüpft ist.

(12)

Digital Design

5.3.6.5 Selektierte Signalzuweisung

with expression select

sig_name <= { waveform when choices ,}

waveform when choices;

In Abhängigkeit von dem aktuellen Wert von "expression" kann eine bestimmte Zuweisung erfolgen. ACHTUNG: Es müssen alle Möglichkeiten zugeordnet werden können!

Mit dem Schlüsselwort others können alle noch nicht definierten Möglichkeiten abgedeckt werden.

Beispiel:

entity alu is

port (a,b, sel: in INTEGER;

q: out INTEGER), end alu;

architecture behave of alu is begin

with sel select q <= a + b when 0,

a – b when 1,

a * b when 2, a when others;

end behave;

(13)

Digital Design

5.3.7 Datentypen

Für die Modellierung auf Gatterebene sind z.B. die VHDL-Definitionen "bit" bzw. "bit_vector"

mit den Werten '0' und '1' nicht ausreichend, weil damit z.B. keine Kurzschlüsse, keine undefinierten Zustände,... simuliert werden können. Daher wurden weitere Datentypen in dem IEEE Standard 1164 definiert, z.B.:

• Datentyp std_ulogic 'U' Uninitialized

'X' Forcing Unknown '0' Forcing 0

'1' Forcing 1

'Z' High Impedance 'W' Weak Unknown 'L' Weak 0

'H' Weak 1 '-' Don´t Care

• Reihe von Funktionen wie Busdefinitionen

Operatoren

Auflösungsfunktionen etc.

• Einbinden der Bibliothek in VHDL- Code:

LIBRARY ieee;

USE ieee.std_logic1164.all;

(14)

Digital Design

5.3.8 Operatoren

VHDL unterscheidet 7 Klassen von Operatoren (nicht für alle Datentypen definiert –

"Operator Overloading" ist möglich) logical

AND OR NAND NOR XOR XNOR

relational = /= < <= > >=

shift SLL SRL SLA SRA ROL ROR

adding + - &

sign + -

multiply * / MOD REM

misc ** ABS NOT

(15)

Digital Design

5.3.9 Prozesse

Mit Hilfe von Prozessen kann in VHDL auf effektive Weise das Verhalten komplexer Schaltungen beschrieben werden. Innerhalb eines Prozesskörpers werden die

Anweisungen dabei sequentiell ausgeführt (wie in herkömmlichen Programmiersprachen).

[process_label:]

process [(sensitivity_list)]

Deklarationen (keine Signale!) begin

Sequentielle Statements;

end process [process_label];

sensitivity_list: Reihe von Signalen, die bei einer Änderung jeweils die Ausführung des Prozesses starten

Sequentialle Statements: Statements, die, im Gegensatz zu "Concurrent Statements" nicht gleichzeitig, sondern nacheinander ausgeführt werden.

Prozessausführung:

Der Prozess wird in den Zustand "aktiv" (d.h. die sequentiellen Anweisungen werden

durchgeführt) versetzt, wenn ein Ereignis (Event) bei einem Signal aus der "Sensitivity_List"

(d.h. eine echte Signaländerung) oder bei einem von der WAIT-Anweisung spezifizierten Signalen stattgefunden hat.

Die Signalzuweisungen (nicht Variablenzuweisungen) erfolgen immer erst am Ende des Prozessablaufes!

(16)

Digital Design

5.3.9.1 Variable

Im Deklarationsteil einer Prozessdefinition können Variable definiert werden. Diese

Variablen sind nur innerhalb eines Prozesses gültig. Variablenzuweisungen werden sofort durchgeführt (im Gegensatz zu Signalzuweisungen – diese werden erst am Ende des Prozesses durchgeführt und damit ist immer nur die letzte Zuweisung wirksam).

Mit Variablen können Zwischenergebnisse bis zum nächsten Prozessdurchlauf gespeichert werden.

Mit Signalen können Informationen zwischen verschiedenen Prozessen ausgetauscht werden.

Variablendeklaration (s. auch Signaldeklaration):

variable var_identifier {, ...} : subtype_indication [:= expression];

Initialisierung wird von FPGA-Express nicht unterstützt!!

var_name := expression; sig_name <= expression;

Variablenzuweisung Signalzuweisung

(17)

Digital Design

5.3.10 Sequentielle Anweisungen

Innerhalb von Prozessen (und auch in Unterprogrammen) können sequentielle Anweisungen zur Implementierung von Algorithmen verwendet werden.

5.3.10.1 Die WAIT-Anweisungen

WAIT-Anweisungen dienen zur Synchronisation von Prozessen.

WAIT [ON list] [UNTIL condition] [FOR time];

Beispiele:

WAIT; - - wartet endlos

WAIT ON a; - - wartet auf "Event a"

WAIT ON b FOR 100 ns; - - wartet 100ns auf "Event b"

WAIT UNTIL a = '1' FOR 50 ns; - - 50ns Periode und a = '1' WAIT ON b UNTIL (a = '1') FOR 100 ns; - - wenn a=1,

--100 ns Periode, asynchrone Triggerung durch "Event b"

Bei der Synthese gibt es je nach Synthese-Tool unterschiedliche Einschränkungen.

FPGA-Express unterstützt nur "WAIT UNTIL condition" (nicht FOR...) z.B.: wait until sig_a = '1';

wait until clk'event and clk = '1'; -- warten auf positive Flanke von Signal clk

(18)

Digital Design

5.3.10.2 Die CASE-Anweisung

(vgl. switch/case in C bzw. SELECT von Concurrent-Anweisungen) case <Kontrollausdruck> is

when <Testausdruck_1> => {<Sequentielle Anweisungen>;}

when <Testausdruck_1> => {<Sequentielle Anweisungen>;}

...

[when others {<Sequentielle Anweisungen>;}

end case;

Beispiel eines Multiplexers:

ARCHITECTURE case_arch OF mux_3 IS BEGIN

PROCESS (in_a, in_b, sel) CASE sel IS

WHEN '0' => output <= in_a;

WHEN '1' => output <= in_b;

WHEN OTHERS => output <= 'X';

END CASE;

END PROCESS;

END case_arch;

Das "CASE-Statement" muss vollständig auflösbar sein, d.h. jedem möglichen Zustand muss eine Aktion zugewiesen werden!

(19)

Digital Design

5.3.10.3 Die if-Anweisung

IF <Bedingung_1> THEN {<Sequentielle Anweisungen>;}

[ELSIF <Bedingung_2> THEN {<Sequentielle Anweisungen>;}

ELSIF...;]

[ELSE {<Sequentielle Anweisungen>;}]

END IF;

Beispiel: NAND-Gatter LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY alg_nand IS

PORT (in_a, in_b : IN std_logic;

c : OUT std_logic);

END alg_nand;

ARCHITECTURE algorithm OF alg_nand IS BEGIN

PROCESS (in_a, in_b) BEGIN

IF in_a = '1' AND in_b = '1' THEN c <= '0' AFTER 15ns;

ELSIF in_a = '0' OR in_b = '0' THEN c <= '1' after 15ns;

ELSE

c <= 'X' AFTER 15ns;

END IF;

END PROCESS;

END algorithm;

AFTER wird nicht von Synthese-Tools

unterstützt!!

(20)

Digital Design

Vergleich if-case

Beispiel: Schaltung, die testet, ob eine 4-Bit-Zahl größer als Zehn ist.

-- VGL_IF.VHD library ieee;

use ieee.std_logic_1164.all;

entity VGL_IF is

port (a: in bit_vector(3 downto 0);

gr_zehn: out bit);

end VGL_IF;

architecture arch_VGL_IF of VGL_IF is begin

vgl:

process (a) begin

if a="1111" then gr_zehn <= '1';

elsif a="1110" then gr_zehn <= '1';

elsif a="1101" then gr_zehn <= '1';

elsif a="1100" then gr_zehn <= '1';

elsif a="1011" then gr_zehn <= '1';

else gr_zehn <= '0';

end if;

end process;

end arch_VGL_IF;

-- VGL_CASE.VHD library ieee;

use ieee.std_logic_1164.all;

entity VGL_CASE is

port (a: in bit_vector(3 downto 0);

gr_zehn: out bit);

end VGL_CASE;

architecture arch_VGL_CASE of VGL_CASE is begin

vgl:

process (a) begin

case a is

when "1111" => gr_zehn <= '1';

when "1110" => gr_zehn <= '1';

when "1101" => gr_zehn <= '1';

when "1100" => gr_zehn <= '1';

when "1011" => gr_zehn <= '1';

when others => gr_zehn <= '0';

end case;

end process;

end arch_VGL_CASE;

(21)

Digital Design

5.3.10.4 Schleifenkonstrukte

Es gibt zwei Möglichkeiten: "for"-Schleife und "while"-Schleife

Es gibt jeweils die Möglichkeit, einen vorzeitigen Schleifenabbruch zu erzwingen bzw.

einzelne Schleifeniterationen vorzeitig zu beenden:

exit when <Bedingung> -- dient zum vorzeitigen Verlassen einer Schleife

next when <Bedingung> -- dient zur vorzeitigen Beendigung einer Schleifeniteration

5.3.10.4.1 Die for-Schleife

[Bezeichner:]

for <Schleifenspezifikation> loop

{<sequentielle Anweisungen>;}

end loop;

Schleifenspezifikation:

<Schleifenindex> in <untere Grenze> to <obere Grenze>

<Schleifenindex> in <obere Grenze> downto <untere Grenze>

(22)

Digital Design

Beispiel einer for-Schleife:

-- Paritaetsgenerator

library ieee;

use ieee.std_logic_1164.all;

entity PARITAET is

generic (BITS: integer :=4);

port (D: in bit_vector(Bits-1 downto 0);

GERADE: out bit);

end PARITAET;

architecture VERHALTEN of PARITAET is begin

PARGEN: process (D)

variable PAR: boolean;

begin

PAR:= false;

for I in BITS-1 downto 0 loop if D(I) = '1' then

PAR := not PAR;

end if;

end loop;

if PAR then GERADE <= '1';

else GERADE <= '0';

end if;

end process PARGEN;

end VERHALTEN;

(23)

Digital Design

5.3.10.4.2 Die while-Schleife

-- Paritaetsgenerator fuer einen seriellen Datenstrom

library ieee;

use ieee.std_logic_1164.all;

entity PARITAET_w is

port (D_IN, CLK: in bit;

STARTBIT, STOPPBIT: in boolean;

D_OUT: OUT bit);

end PARITAET_w;

architecture VERHALTEN_w of PARITAET_w is begin

P1: process

variable PAR: boolean;

begin

wait until (CLK'event and CLK = '1');

if STARTBIT then PAR:= false;

while not STOPPBIT loop D_OUT <= D_IN;

if D_IN = '1' then PAR := not PAR;

end if;

wait until (CLK'event and CLK = '1');

end loop;

end if;

if PAR then

D_OUT <= '1';

else

D_OUT <= '0';

end if;

end process P1;

while <Schleifenbedingung> loop

{<sequentielle Anweisungen>;}

end loop;

(24)

Digital Design

5.3.11 Signalattribute Signalattribut:

object_name'attribute_designator

z.B:

signal'EVENT:BOOLEAN - - TRUE, wenn innerhalb "Dt" ein Ereignis an "signal" anliegt signal'ACTIVE:BOOLEAN - - TRUE, wenn innerhalb "Dt" ein Aktivität an "signal" anliegt signal'LAST_EVENT:Time - - Zeit, die seit dem letzten Ereignis an "signal" vergangen ist signal'LAST_VALUE:Value - - Der Wert, den "signal" vor dem aktuellen Zustand hatte signal'LAST_ACTIVE:Time - - Zeit, die seit der letzten Aktivität an "signal" vergangen ist Beispiel: taktflankengetriggertes D-Latch

PROCESS (clk) BEGIN

IF clk = '1' THEN

out_d <= in_d;

END IF;

END PROCESS;

(Der Prozeß reagiert auf das "Ereignis clk"; wenn "clk = 1", dann erhält der Ausgang

"out_d" den Wert des Eingangs "in_d"; diese Zuorndnung erfolgt allerdings auch bei einem Wechsel von "clk" von z.B. 'X' oder 'Z' auf '1' und damit nicht nur bei einer "positiven Flanke von clk"!)

(25)

Digital Design

Unterscheidung:

Ereignis (Event): "echte" Änderung eines Signals

Aktivität: Signal kann auch auf alten Wert getrieben werden 5.3.12 Simulation von VHDL-Entwürfen

Zur Überprüfung eines Designs kann eine sog. Testbench (eine VDHL-Beschreibung von Eingangssignalen und Überprüfung von Ergebnissen) erzeugt werden. Die "entity" dieser Testbench enthält keinerlei Schnittstellensignale. Die Schnittstellensignale des zu

untersuchenden Modells werden als lokale Signale in der "architecture" der Testbench deklariert. Die Definition des Zeitzverlaufs der Stimuli erfolgt durch Concurrent-

Anweisungen, in der die Zeitpunkte der Signalübergänge festgelegt sind.

Die "architecture" der Testbench enthält das zu untersuchende Modell als Komponente.

Für die automatische Auswertung steht das Kontrukt "assert" zur Verfügung:

assert <Bedingung> report "<Text>" severity <severity_level>

severity_level note warning error failure

(26)

Digital Design

5.4 Kontrollfragen

- Aus welchen Elementen besteht ein VHDL-Modell ?

- Was versteht man unter einem "Concurrent-Statement"?

- Was versteht man unter einem "Sequential-Statement"?

- Erklären Sie den Begriff "PROCESS"

- Ist das "PROCESS-Statement" ein "Concurrent-" oder ein "Sequential-Satement"?

- Wann wird ein "Concurrent-Satement" ausgeführt?

- Wie kann ein "PROCESS" angestoßen werden?

- Erklären Sie den Unterschied zwischen Ereignis und Aktivität

- Was ist der Unterschied zwischen einem Signal und einer Variablen? Wie unterscheiden sich die Zuweisungen?

- In einem PROCESS gibt es die Satements "IF" und "CASE". Wie kann man diese Statements in einem "Concurrent-Region" formulieren?

- Wie kann man im sequentiellen Code Schleifen realisieren?

Referenzen

ÄHNLICHE DOKUMENTE

Der BUND Naturschutz wird im Oktober/November 2020 eine Mitgliederbefragung als Briefwahl durchführen, ob der mit der Stadt Nürnberg und dem Freistaat Bayern gefundene Vergleich

• Raymers Gleichung bringt für die Einfachheit der Gleichung sehr gute Ergebnisse. • Das neue Model (Raymer erweitert) fokussiert die

Nein, bezahlen können wir damit natürlich kein Gehalt, das ist in diesem Haus schon lange nicht mehr üblich, aber immerhin wäre ich bereit, Sie gegen eine Unkostenbeteiligung nach

Forster: Die Patienten sind nicht nur über das Risiko für eine Osteoporose und Knochenbrüche aufzuklären, sondern auch über das Risiko für Osteonekrosen, neuropsychische Störun-

Wenn dann diese Fortbewegungsarten rationell in jedem Gelände, bei jeder Schneeart angewandt werden können, dann folgt anschliessend die Handhabung der Waffe im Schnee und

Anhand eines umfangreichen Kontrolldossiers für grosse Wartungen sind nun diese Anlagen von den Dienstleistenden auf ihre Funktionalität, Betriebs- und Einsatzbereitschaft

Gefällt werden abgestorbene, erkrankte und schadhafte Bäume, die im Zuge der durchgeführten Baumkontrollen auffällig waren.. Insgesamt müssen zum derzeitigen Stand etwa 700

Oktober 2014 werden auf der B 44, Hochstraße Nord, sowohl in Fahrtrichtung Mannheim als auch in Fahrtrichtung Bad Dürkheim Bauwerksprüfungen durchgeführt.. Anlässlich der Prüfungen