46
1 Praktium Systementwurf mit VHDL HDL Design Lab Lehrstuhl für Entwurfsautomatisierung Technische Universität München

Praktium Systementwurf mit VHDL HDL Design · PDF file1 Praktium Systementwurf mit VHDL HDL Design Lab Lehrstuhl für Entwurfsautomatisierung Technische Universität München

Embed Size (px)

Citation preview

1

Praktium Systementwurf mit VHDL

HDL Design Lab

Lehrstuhl für Entwurfsautomatisierung

Technische Universität München

2

Das Projekt: Verschlüsselung — Entschlüsselung

3

Hardware-Emulation

HardwareOszillo-

graph

Signal-

generator

4

Hardware-Emulation

HardwareOszillo-

graph

Signal-

generator

Computer

Hardware-Replika

Software-Modell

(VHDL)

5

Hardware-Emulation

HardwareOszillo-

graph

Signal-

generator

Computer

Testumgebung (Software, VHDL)

Hardware-Replika

Software-Modell

(VHDL)

6

Modellierung Digitaler Systeme

• Wozu dienen Hardware-Beschreibungssprachen wie VHDL?

Zur Beschreibung von Hardware-Systemen

durch Software-Modelle

• Definition (nach IEEE-Wörterbuch):Ein Modell ist eine idealisierte Darstellung eines Systems.Die Vollständigkeit und Detailtreue eines Modells werden durch die zu untersuchenden Eigenschaften, den Wissensstand und die Modellumgebung bestimmt.

• Modelle können unvollständig oder ungenau sein undzu falschen Aussagen führen, wenn sie außerhalb ihres vorgesehenen Anwendungsbereichs eingesetzt werden.

• Mit formalen Sprachen wie VHDL beschriebene Modelle besitzen eine eindeutige Interpretation und werden deshalb Formale Modelle genannt.

7

Anwendungsbereiche Digitaler Systeme

• Wozu werden Modelle gebraucht?

– Als Prototypen zur Spezifikation der Anforderungen

– Zur Überprüfung des (zeitlichen) Verhaltens

durch Simulation und formale Verifikation

– Zur automatisierten Synthese

– Zur Dokumentation

– Zur Wiederverwendung (Design Reuse)

– Zum Datenaustausch

zwischen Komponentenanbieter und Entwickler, sowie

zwischen verschiedenen Entwurfssystemen

• Welche Ziele werden bei der Modellbildung verfolgt?

– Minimierung von Entwurfskosten und Entwurfszeit

– Vermeiden von Fehlern beim Entwurf

– Vermeiden unnötiger Entwurfszyklen, Redesigns

8

VHDL

• V VHSIC (Very High Speed Integrated Circuit)

H Hardware

D Description

L Language

• Verbreitete Programmiersprache

mit Erweiterungen zur Beschreibung von Hardware:

nebenläufige Prozesse, Zeitmodell

• Hierarchische Modellierung

• Verschiedene Entwurfsstile

• Seit 1987 durch IEEE- und ANSI-Standard genormt.

Hier wird VHDL-87 verwendet (VHDL-93 enthält Erweiterungen).

• Verilog ist eine andere häufig verwendete HDL.

• Erweiterung für Analog- und Mixed-Signal-Schaltungen:

VHDL-AMS

9

Literatur

• Peter J. Ashenden

The Designer‘s Guide to VHDL

Morgan Kaufman Publishers, 1996

10

Der Entwurfsraum

Entwurfssicht

Verhalten Struktur Geometrie

Ab

stra

ktio

ns

niv

eau

ArchitekturSystem-

Spezifikation

System-

Partitionierung

Bauplan

(floorplan)

Register

TransferAlgorithmus

Modul-Netzliste

(ALU, Mux, Register)

Makro-Zellen

(IP-Blöcke)

LogikBoolesche

Gleichungen

Gatter-Netzliste

(Gatter, FlipFlops)

Standardzellen

Bibliothekszellen

SchaltkreisDifferential-

gleichungenTransistor-Netzliste

Maskendaten,

Polygone

Zweistufiger Syntheseprozess unter Verwendung einer Zellbibliothek

11

Modellierungsraum

Funktionssicht Struktursicht

Geometriesicht

Polygone

Makrozellen

Standardzellen

Chip-, Floorplan

Algorithmen

Boolesche

Gleichungen

Register-

Transfers

Differential-

gleichungen

Prozessor-

Memory-

Switch

Register-

Transfers

Gatter

Transistoren

Y-chart nach

Gajski & Kahn

12

Der Entwurfsprozess

Anfor-

derungen

Simulation

Test-

rahmen

(test

bench)

ASIC oder

FPGA SignallaufzeitenLayoutsynthese

Gatter-Modell

RT-Modell

Logiksynthese

RT-Synthese

Simulation

Verhaltensmodell

Algor. Synthese

Simulation

Systemmodell

13

Auf RT-Ebene werden Aktivitäten (Funktionen, Operationen) als Transfers

von Datenwerten zwischen Registern beschrieben, die Taktzyklen

zugeordnet sind (Verhaltenssicht, Datenfluß).

Operationen und Register

werden meist zu Datenpfaden

zusammengefaßt, die durch

Kontrolleinheiten gesteuert

werden (Struktursicht). Eine

RT-Schaltung besteht typi-

scherweise aus Modulen

(z.B. Addierer, Multiplizierer,

Register, Zustandsautomaten),

die durch Signalnetze verbunden sind.

Charakteristisch für RT-Beschreibungen ist auch, daß Operationen

nicht auf einzelne Logikwerte (Bits), sondern auf Mengen von Logik-

werten angewandt werden. Diese werden zu Worten gruppiert,

deren 0-1-Muster als (alpha)numerische Werte interpretiert werden.

Register-Transfer-Beschreibung

Kontroll-

einheit

(Zustands-

automat)

Register

Register

Speicher

ALU +/*

Ctrl Out

Ctrl In

Data Out

Data In

Control

Status

Clock

14

Simulation

Simulation dient der Verifikation von Entwurfsschritten.

Simulation ist notwendig, weil bei der automatisierten Synthese nicht alle Anforderungen exakt erfüllt werden (können) undweil Syntheseprogramme fehlerhaft sein können.

Durch Simulation werden insbesondere folgende Fragen beantwortet:

• Simulation von Verhaltensmodellen

– Erfüllt das Verhaltensmodell die (VHDL-)Syntax?

– Erfüllt das Verhaltensmodell die spezifizierten Anforderungen (die Spezifikation)?

– Welche Eigenschaften besitzt das modellierte System?

• Simulation von Strukturmodellen

– Erfüllt das Strukturmodell die (VHDL-)Syntax?

– Besitzt das Strukturmodell (die RT- oder die Gatter-Netzliste) dieselbe Funktion wie das Verhaltensmodell?

– Erfüllt das Strukturmodell die zeitlichen Anforderungen?

15

Gliederung dieser Einführung in VHDL

1) Formaler Aufbau von VHDL-Modellen

2) Testumgebungen

VHDL-Modelle, die Eingangssignale zum Testen eines

Modells bereitstellen

3) Zeitmodelle in VHDL

Nachbildung des Zeitverhaltens der modellierten Hardware

4) Modellierung von Zustandsautomaten in VHDL

Systematische Beschreibung digitaler Systeme

16

Gliederung dieser Einführung in VHDL

1) Formaler Aufbau von VHDL-Modellen

2) Testumgebungen

VHDL-Modelle, die Eingangssignale zum Testen eines

Modells bereitstellen

3) Zeitmodelle in VHDL

Nachbildung des Zeitverhaltens der modellierten Hardware

4) Modellierung von Zustandsautomaten in VHDL

Systematische Beschreibung digitaler Systeme

17

Formaler Aufbau von VHDL-Modellen

Formaler Aufbau von

VHDL-Modellen

18

Modellieren von Schnittstellen (Interfaces)

entity DEK2X4 is

port (A, B, EN: in bit;

D: out bit_vector(0 to 3));

end DEK2X4;

Eine Entity beschreibt eine Schaltung(skomponente) aus externer

Sicht, d.h. Anzahl und Typ ihrer Ein- und Ausgänge (ports).

Beispiel:

2x4-

Dekoder

reservierte Worte

Name der entity Liste von port-Namen

port-Modus port-Typ

reservierte Zeichen

A

B

D0

D3

DEK2X4

D1

D2

EN

19

Modellieren von Schnittstellen (Interfaces)

entity DEK2X4 is

port (A, B, EN: in bit;

D: out bit_vector(0 to 3));

end DEK2X4;

Eine Entity beschreibt eine Schaltung(skomponente) aus externer

Sicht, d.h. Anzahl und Typ ihrer Ein- und Ausgänge (ports).

Beispiel:

2x4-

Dekoder

reservierte Worte

Name der entity Liste von port-Namen

port-Modus port-Typ

reservierte Zeichen

EN A B D0 D1 D2 D3

0 - - 1 1 1 1

1 0 0 0 1 1 1

1 0 1 1 0 1 1

1 1 0 1 1 0 1

1 1 1 1 1 1 0

A

B

D0

D3

DEK2X4

D1

D2

EN

20

Modellierung von Schaltungsverhalten oder -struktur

• Architectures

– beschreiben aus interner Sicht, welche Funktion eine entity hat und wie sie realisiert wird

– sind Implementierungen einer entity

– können mehrfach pro entity(mit derselben Funktion) auftreten

• Architectures können in verschiedenen Modellierungsstilenbeschrieben werden:

– Verhaltensmodelle beschreiben das Verhalten (die Funktion) einer Schaltung(skomponente),d.h. die Werte der Ausgangssignale als Funktion der Werte der Eingangssignale.

– Strukturmodelle beschreiben eine Schaltung(skomponente) als eine hierarchische Struktur vonSubkomponenten, die durch Signale verbunden sind (hierarchisch strukturierte Netzliste).

21

Verhaltensmodell des 2x4-Dekoders

entity DEK2X4 is

port (A, B, EN: in bit;

D: out bit_vector(0 to 3));

end DEK2X4;

architecture VERHALTEN_1 of DEK2X4 is

begin

VERH_1_DEK: process(A,B,EN)

begin

if EN='1' then

-- '1' ist eine Konstante vom Typ bit

D(0) <= not (not A and not B);

D(1) <= not (not A and B);

D(2) <= not (A and not B);

D(3) <= not (A and B);

else -- EN='0' ist ein Kommentar

D <= "1111"; -- Konstante vom Typ bit_vector

end if;

end process VERH_1_DEK;

end VERHALTEN_1;

22

Ein Prozess beschreibt das Verhalten (die Funktion) einer Schaltung(skomponente) als eine Sequenz von Anweisungen.Wie in einer herkömmlichen Programmiersprache sind alle Daten-und Anweisungstypen verfügbar wie z.B. Konstanten, Variable, Felder, Records, Zuweisungen, Verzweigungen, Schleifen.

Prozesse werden durch Namen (process labels) identifiziert und können eine Empfindlichkeitsliste (sensitivity list) besitzen. Ein Prozess wird aktiviert, wenn sich der Wert eines Signals in seiner sensitivity list ändert.

Zum Speichern des Prozesszustands dienen Variable. Sie können nur innerhalb von Prozessen deklariert und benutzt werden.

Signale entsprechen Drähten zwischen Hardware-Blöcken und dienen zur Kommunikation zwischen nebenläufigen Prozessen. Sie halten Werte wie die Variablen, haben aber ein Zeitverhalten. Innerhalb von Prozessen dürfen Signale nicht deklariert werden.

Mit der end-Anweisung wird der Prozess suspendiert.

Prozesse

23

Verhaltensmodell eines 4fach-Multiplexers

entity MUX4 is

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

SEL: in bit_vector(1 downto 0);

Z: out bit);

end MUX4;

architecture VERH_MUX4 of MUX4 is

begin

MUX4_proc: process(X,SEL)

variable TMP:bit; -- Variable ohne Zeitverhalten

begin

case SEL is

when "00" => TMP:=X(0);

when "01" => TMP:=X(1);

when "10" => TMP:=X(2);

when "11" => TMP:=X(3); -- Zuweisungen an Variable

end case; -- alle Alternativen sind aufzuführen!

Z <= TMP after 5 ns; -- Zuweisung an Signal

end process MUX4_proc; -- mit Verzögerung

end VERH_MUX4;

Z

SELX(0)

X(3)

X(1)

X(2)

24

Datenfluß-Modelle

• Datenfluß-Modelle (oder funktionale Modelle) sind Verhaltensmodelle, bei denen die zu beschreibende Funktion der Schaltung(skomponente) eine einfache Transformation von Eingangssignalen in Ausgangssignale ist.

• VHDL stellt dafür Kurzschreibweisen bereit, die nebenläufigenSignalzuweisungen (concurrent signal assignments).

• Die Bearbeitung von Signalzuweisungen außerhalb von Prozessen ist daher unabhängig von der Reihenfolge,in der sie aufgeschrieben sind.

• Jede nebenläufige Signalzuweisung bildet einen eigenen Prozess, der genau dann aktiviert und ausgeführt wird,wenn sich der Wert von mindestens einem Signal auf der rechten Seite des Zuweisungszeichens ändert.

25

Datenfluß-Modell eines Halbaddierers

entity HALF_ADDER is

port(A, B: in bit;

SUM, CARRY: out bit:='0'); -- Voreinstellungen

end HALF_ADDER;

architecture CONCURRENT_HA of HALF_ADDER is

constant S_delay: time:=8 ns; -- benannte Konstanten

constant C_delay: time:=4 ns;

begin

SUM <= A xor B after S_delay; -- nebenläufig!

CARRY <= A and B after C_delay; -- nebenläufig!

end CONCURRENT_HA;

26

Datenfluß-Modelle: Selektive Signalzuweisungen

• Selected signal assignment (z.B. 4fach-Multiplexer):

architecture VERH2_MUX4 of MUX4 is

begin

with SEL select –- Auswahlsignal

Z <= X(0) after 5 ns when "00";

X(1) after 5 ns when "01";

X(2) after 5 ns when "10";

X(3) after 5 ns when "11";

end VERH2_MUX4;

• Diese Anweisung entspricht einem case-Konstrukt.

• Für sämtliche möglichen Kombinationen des Selektors muß ein

Signalwert zugewiesen werden.

• Falls nicht alle Kombinationen definiert sind, muß zwingend unter einer letzten Bedingung when others ein Wert zugewiesen werden.

Z

SELX(0)

X(3)

X(1)

X(2)

27

Datenfluß-Modelle: Bedingte Signalzuweisungen

• Conditional signal assignment (z.B. 4fach-Multiplexer):

architecture VERH3_MUX4 of MUX4 is

begin

Z <= X(0) after 5 ns when SEL="00" else

X(1) after 5 ns when SEL="01" else

X(2) after 5 ns when SEL="10" else

X(3) after 5 ns when SEL="11";

end VERH3_MUX4;

• Diese Anweisung entspricht einem if-then-else-Konstrukt.

• Es können beliebig viele Bedingungen abgefragt werden. Die Priorität

der Bedingungen entspricht ihrer Reihenfolge. Das Zeitverhalten

unterscheidet sich von der selektiven Signalzuweisung.

• Im Gegensatz zur selektiven Signalzuweisung können bei der

bedingten Signalzuweisung unterschiedliche Signale in den einzelnen

Bedingungen kombiniert werden.

28

Verhaltensmodelle

Bei Verhaltensmodellen (behavioral architectures) ist zwischen

zwei Formen zu unterscheiden:

• Algorithmische Modelle

– beschreiben die Funktion (das Verhalten) einer

Schaltung(skomponente) wie in einer (herkömmlichen)

Programmiersprache durch eine Sequenz von

Anweisungen, die in einem Prozess zusammengefaßt sind

– sind nur zur Simulation des Schaltungsverhaltens geeignet

• Datenflußmodelle

– beschreiben die Schaltungsfunktion als Datenfluß zwischen

kommunizierenden Prozessen (nebenläufig, zeitlich parallel)

– sind besonders geeignet zur Beschreibung auf der Register-

Transfer-Ebene

– können als Ausgangspunkt für eine automatisierte

Synthese der Schaltungsstruktur verwendet werden

33

Die Struktur einer Schaltung

AQ

BQ

A

B

D(0)

D(1)

D(2)

D(3)

Schaltplan (schematic diagram) des 2x4-Dekoders

EN

DEK2X4 &

G0

&

G1

&

G2

&

G3

1

IB

1

IA

34

Modellieren der Schaltungsstruktur

architecture STRUKTUR of DEK2X4 is

component INV

port(A: in bit; Z: out bit);

end component;

component NAND3

port(A,B,C: in bit; Z: out bit);

end component;

signal AQ,BQ: bit;

begin -- Netzliste (nebenläufig!)

-- component-Instanzierungen

IA: INV port map(A,AQ);

IB: INV port map(B,BQ);

G0: NAND3 port map(AQ,BQ,EN,D(0));

G1: NAND3 port map(AQ,B,EN,D(1));

G2: NAND3 port map(A,BQ,EN,D(2));

G3: NAND3 port map(A,B,EN,D(3));

end STRUKTUR;

Beispiel:

2x4-

Dekoder

35

Modellieren von Teilschaltungen

entity INV is

port (A: in bit; Z: out bit);

end INV;

architecture ARCH_INV of INV is

begin -- Verhaltensbeschreibung

Z <= not A after 12 ns;

end ARCH_INV;

entity NAND3 is

port (A,B,C: in bit; Z: out bit);

end NAND3;

architecture ARCH_NAND3 of NAND3 is

begin -- Verhaltensbeschreibung

Z <= not(A and B and C) after 8 ns;

end ARCH_NAND3;

Beispiel:

Komponenten

INV und

NAND3

des 2x4-

Dekoders

36

Hierarchische Modellierung der Schaltungsstruktur

architecture STRUK_NAND3 of NAND3 is

component AND2

port(E1,E2: in bit; A: out bit);

end component;

component INV

port(A: in bit; Z: out bit);

end component;

signal X, Y: bit;

begin

M1: AND2 port map(A,B,X);

M2: AND2 port map(C,X,Y);

M3: INV port map(Y,Z);

end STRUK_NAND3;

Beispiel:

Komponente

NAND3

des 2x4-

Dekoders

library MyLib;

configuration NAND3_CONF of NAND3 is

for STRUK_NAND3 –- Name der architecture

for all:AND2 use entity MyLib.AND2(TimAr); end for;

for M3:INV use entity WORK.INV(ARCH_INV); end for;

end for;

end NAND3_CONF;

X

Y Z

A

B

C

AUTOMATIC IN XILINX TOOLS!

37

Für eine entity kann eine von mehreren architectures

ausgewählt werden. Dadurch kann beispielsweise eine

Verhaltensbeschreibung leicht (ohne Eingriff in die

Quelltexte) durch eine Strukturbeschreibung ersetzt

werden.

Configurations (Binden architecture an entity)

entity

architecture

Verhaltens-

beschreibung

architecture

Gatter-

Netzliste

architecture

RT-

Beschreibung

co

nfi

gu

rati

on

AUTOMATIC IN XILINX TOOLS!

41

Libraries & Packages

• Die Library (Bibliothek) WORK wird beim Übersetzen automatisch

eingebunden. In ihr legt der VHDL-Compiler alle übersetzten

Design Units (Entities, Architectures, Configurations) ab, die

dann ohne explizite Angabe der Library benutzt werden können.

• Das Package STANDARD mit den grundlegenden Datentypen

wird ebenfalls automatisch eingebunden.

• Eine Library kann PACKAGE Design Units enthalten,

in denen TYPE-, SUBTYPE- und FUNCTION-Deklarationen

zusammengefasst werden. Das ermöglicht die Verwendung

dieser Deklarationen in verschiedenen Modellen ohne

wiederholte (und fehlerträchtige) erneute Deklaration.

• Syntax:library IEEE; -- Einbinden der library IEEE

use IEEE.STD_LOGIC_1164.all;

42

Datentypen, Subtypen (package STANDARD)

package STANDARD is -- wird automatisch geladen

-- enthält u.a. die Datentypen

type boolean is (false,true);

type bit is ('0','1');

type character is (...);

type integer is ...;

subtype natural is integer

range 0 to integer'high;

subtype positive is integer

range 1 to integer'high;

type real is ...;

type time is ... units fs; ps=1000 fs; ...;

type string is

array (positive range <>) of character;

type bit_vector is

array (natural range <>) of bit;

-- Die zugehörigen Operatoren sind auch definiert.

end standard;

43

Neunwertige Logik (IEEE package STD_LOGIC_1164)

package STD_LOGIC_1164 is

-- ist gespeichert in der library mit dem Namen IEEE

type STD_LOGIC

is ('U', -- nicht initialisiert (Voreinstellung)

'X', -- Signalkonflikt zwischen '0' und '1'

'0', -- aktive '0' (durch Gatter getrieben)

'1', -- aktive '1' (durch Gatter getrieben)

'Z', -- hochohmig (tri-state Ausgang)

'W', -- Signalkonflikt zwischen 'L' und 'H'

'L', -- passive '0' (pull-down Widerstand)

'H', -- passive '1' (pull-up Widerstand)

'-' -- don't care, Wert ist bedeutungslos und

); -- kann zur Logikminimierung dienen

type STD_LOGIC_VECTOR

is array (natural range <>) of STD_LOGIC;

-- definiert sind auch die Logikoperatoren

-- and, nand, or, nor, xor, xnor, not

end STD_LOGIC_1164;

45

Ausgewählte Attribute von Signalen

signal S; variable T: time;

S'event Diese Funktion liefert den Booleschen Wert true,wenn im aktuellen Simulationszyklus beim Signal Sein Event auftritt, sonst false.

S'last_event Diese Funktion liefert die Simulationszeit, seit beim Signal Sdas letzte Event auftrat. Das Ergebnis ist also 0 fs, wenn S'event true ist.

S'last_value Wert von S, unmittelbar bevor das letzte Event auftrat.

S'stable(T) Boolesches Signal, das den Wert true annimmt, wenn beim Signal S für T Zeiteinheiten kein Event aufgetreten ist.Wenn (T) fehlt, werden 0 fs angenommen.

S'delayed(T) Signal vom selben Typ und mit denselben Werten wie S, aber um T Zeiteinheiten verzögert.Wenn (T) fehlt, werden 0 fs angenommen.

47

Parametrisierung von Modellen

entity NANDg is -- generisches NAND-Gatter

generic(Wb:positive:=3; -- Wortbreite

Vz:time:=8 ns); -- Verzögerungszeit

port(X: in bit_vector(Wb-1 downto 0); Y: out bit);

end NANDg;

architecture NANDg_Verh of NANDg is

begin

NANDg_proc: process(X)

begin

Y <= '0' after Vz; -- Voreinstellung

for K in X'range loop -- Attribut des Signals X

-- K = Wb-1, Wb-2, Wb-3, ..., 1, 0

if X(K)='0' then Y <= '1' after Vz;

end if;

end loop;

end process NANDg_proc;

end NANDg_Verh;

48

Schaltungsstruktur mit generischem NAND-Gatter

Beispiel: 2x4-Dekoder

architecture STRUKTgen of DEK2X4 is

component NANDg

generic(Wb:positive; Vz:time);

port(X: in bit_vector(Wb-1 downto 0); Y: out bit);

end component;

signal AQ,BQ: bit;

begin

IA: NANDg generic map(1,6 ns) port map(X(0)=>A,Y=>AQ);

IB: NANDg generic map(1,6 ns) port map(X(0)=>B,Y=>BQ);

G0: NANDg port map(X(2)=>AQ,X(1)=>BQ,X(0)=>EN,

Y=>D(0));

G1: NANDg port map(X(2)=>AQ,X(1)=>B, X(0)=>EN,

Y=>D(1));

G2: NANDg port map(X(2)=>A, X(1)=>BQ,X(0)=>EN,

Y=>D(2));

G3: NANDg port map(X(2)=>A, X(1)=>B, X(0)=>EN,

Y=>D(3));

end STRUKTgen;

49

Beispiel: Generischer n-Bit-Zähler

entity genCntr is

generic ( N : positive := 8 );

port ( CLOCK, RESET : in bit;

COUNTER : out integer range 0 to 2**N-1 );

end genCntr;

architecture arch_genCntr of genCntr is

signal intCntr : integer range 0 to 2**N-1;

begin

process (CLOCK)

begin

if CLOCK'event and CLOCK = '1';

if RESET = '1' or intCntr = 2**N-1 then

intCntr <= 0;

else

intCntr <= intCntr + 1;

end if;

end if;

end process;

COUNTER <= intCntr;

end arch_genCntr;

50

Beispiel: Generischer n-Bit-Zähler

entity genCntr is

generic ( N : positive := 8 );

port ( CLOCK, RESET : in bit;

COUNTER : out integer range 0 to 2**N-1 );

end genCntr;

architecture arch_genCntr of genCntr is

signal intCntr : integer range 0 to 2**N-1;

begin

process

begin

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

if RESET = '1' or intCntr = 2**N-1 then

intCntr <= 0;

else

intCntr <= intCntr + 1;

end if;

end process;

COUNTER <= intCntr;

end arch_genCntr;

51

Generics, Attribute & Assertions am Beispiel: D-FlipFlop

entity DFF is

generic(Tpd,Tsu,Thld:time); -- Verzögerung, Setup, Hold

port(Clk,D: in bit; Q: out bit);

end DFF;

architecture ArchDFF of DFF is

begin –- drei kommunizierende Prozesse

Q <= D after Tpd when Clk='1' and Clk'event;

ChkSetup: process –- Prüfen der Setup-Zeit

begin –- Test bei steigender Clk-Flanke

wait until Clk='1';

assert D'last_event>=Tsu report "setup violation";

end process ChkSetup;

ChkHold: process –- Prüfen der Hold-Zeit

begin –- Test nach Ablauf der Hold-Zeit

wait until Clk'delayed(Thld)='1';

assert D'delayed'last_event>=Thld report "hld viol.";

end process ChkHold;

end ArchDFF;

52

Testrahmen (test benches)

Testrahmen

(test benches)

53

entity TB is -- leer

end TB; -- ohne Inputs, Outputs

architecture STIMULI of TB is

component DEK2X4

port(A,B,EN: in bit;

D: out bit_vector(0 to 3));

end component;

signal X,Y,E: bit:='0';

R: bit_vector(0 to 3):="1111";

begin

UUT: DEK2X4 port map(X,Y,E,R);

...

end STIMULI;

Testrahmen

UUT

DEK2X4

TB

R0 R1 R2 R3

X Y E

A B EN

D0 D1 D2 D3

54

architecture STIMULI of TB is

component DEK2X4

port(A,B,EN: in bit; D: out bit_vector(0 to 3));

end component;

signal X,Y,E: bit:='0';

R: bit_vector(0 to 3):="1111";

begin -- Datenflußbeschreibung (nebenläufig!)

-- Instanzierung der “unit under test"

UUT: DEK2X4 port map(X,Y,E,R);

-- Stimuli = Input-Signalverläufe (waveforms)

X <= '0' , '1' after 5 ns,

'0' after 10 ns, '1' after 15 ns,

'0' after 20 ns, '1' after 25 ns,

'0' after 30 ns, '1' after 35 ns;

Y <= '0' , '1' after 10 ns,

'0' after 20 ns, '1' after 30 ns;

E <= '0' , '1' after 20 ns;

end STIMULI;

...

Testrahmen – Stimuli

55

Testrahmen – Signalverläufe

20 30 400 ns5 10 25 3515

101010101

0X

01

0R0

01

0R1

01

0R2

0R31

0

0 0 1 1 0 0 1 1Y 1

0

11110000E 1

0