Post on 06-Feb-2018
transcript
1
Praktium Systementwurf mit VHDL
HDL Design Lab
Lehrstuhl für Entwurfsautomatisierung
Technische Universität München
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
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
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;
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