Technische Grundlagen der Informatik Kapitel 3. Prof. Dr. Sorin A. Huss Fachbereich Informatik TU Darmstadt



Ähnliche Dokumente
Übungen zu Architektur Eingebetteter Systeme. Teil 1: Grundlagen. Blatt 5 1.1: VHDL 28./

VHDL Verhaltensmodellierung

VHDL Verhaltensmodellierung

Entwurf und Verifikation digitaler Systeme mit VHDL

Einstellige binäre Addierschaltung (Addierer)

VHDL Einleitung. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2010

Versuchsreihe 7. Registerfile. Registerfile + Programmzähler. HaPra Versuchsreihe 7 - Registerfile + Programmzähler. 32 Register à 32 Bit

Einführung in VHDL (2)

Sin-Funktion vgl. Cos-Funktion

Wintersemester 2001/2002. Hardwarepraktikum. Versuch 4: Sequentielle Systeme 1. - Toralf Zemlin - Swen Steinmann - Sebastian Neubert

Grundlagen der Informatik 2. Grundlagen der Digitaltechnik. 5. Digitale Speicherbausteine

Microcontroller Kurs Microcontroller Kurs/Johannes Fuchs 1

1 Vom Problem zum Programm

N Bit binäre Zahlen (signed)

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

Klausur zur Vorlesung

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Simulation von in VHDL beschriebenen Systemen

FAKULTÄT FÜR INFORMATIK

Einführung in. Logische Schaltungen

5 VHDL Einführung (I)

Übungsblatt 8 Lösungen:

Version 0.3. Installation von MinGW und Eclipse CDT

Übung RA, Kapitel 1.2

Versuch Nr. 8c Digitale Elektronik I

Grundlagen der Informatik

Einführung in die technische Informatik

, WS2012 Übungsgruppen: Mo.,

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Zeichen bei Zahlen entschlüsseln

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

EHP Einführung Projekt A

Einführung in die C++ Programmierung für Ingenieure

Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer. Rechenschaltungen 1. Marc Reichenbach

trivum Multiroom System Konfigurations- Anleitung Erstellen eines RS232 Protokolls am Bespiel eines Marantz SR7005

2. Negative Dualzahlen darstellen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Einrichten des Elektronischen Postfachs

Technische Informatik Basispraktikum Sommersemester 2001

Computerarithmetik ( )

Java Einführung Operatoren Kapitel 2 und 3

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

16 Latches und Flipflops (Bistabile Kippstufen)

Praktikum Systementwurf mit VHDL HDL Design Lab

Daten verarbeiten. Binärzahlen

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

FH Jena Prüfungsaufgaben Prof. Giesecke FB ET/IT Binäre Rechenoperationen WS 09/10

A1.7: Entropie natürlicher Texte

Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online

Übungsaufgaben. - Vorgehensweise entsprechend dem Algorithmus der schriftlichen Multiplikation

der Eingabe! Haben Sie das Ergebnis? Auf diesen schwarzen Punkt kommen wir noch zu sprechen.

Schulberichtssystem. Inhaltsverzeichnis

Objektorientierte Programmierung

Kapitel 4A: Einschub - Binärcodierung elementarer Datentypen. Einschub: Teile aus Kapitel 2 in Küchlin/Weber: Einführung in die Informatik

Künstliches binäres Neuron

ABB i-bus KNX. Software-Information. Melde- und Bedientableau. Typ: MT 701.2

Matrix42. Use Case - Anlegen einer neuen Störung über den Service Catalog. Version März

I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK

- Strukturentwurf elementarer Rechenwerke - Grund-Flipflop (RS-Flipflop) - Register, Schieberegister, Zähler

A.3. A.3 Spezielle Schaltnetze Prof. Dr. Rainer Manthey Informatik II 1

Übungen zu C++ Kapitel 1

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

OP-LOG

9 Multiplexer und Code-Umsetzer

Aufgabensammlung. a) Berechnen Sie den Basis- und Kollektorstrom des Transistors T 4. b) Welche Transistoren leiten, welche sperren?

1 Anmerkungen zur Entwicklung von GALs mit LOG/iC

Übung 1 RS-FFs mit NOR- oder NAND-Gattern

Informatik 12 Datenbanken SQL-Einführung

Protokoll zu Grundelemente der Digitaltechnik

Installation OMNIKEY 3121 USB

Zahlensysteme: Oktal- und Hexadezimalsystem

Kapiteltests zum Leitprogramm Binäre Suchbäume

SoC Design. Prof. Dr. Christophe Bobda Institut für Informatik Lehrstuhl für Technische Informatik

Datenbanksysteme SS 2007

Formular»Fragenkatalog BIM-Server«

Kurzeinführung LABTALK

Übung 9 - Lösungsvorschlag

Live Online Training der Bremer Akademie für berufliche Weiterbildung. Hinweise für den Verbindungaufbau zu den Systemen der Bremer Akademie

Eine Logikschaltung zur Addition zweier Zahlen

Mikrocontroller Grundlagen. Markus Koch April 2011

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Verarbeitung der Eingangsmeldungen in einem Callcenter

Lehrer: Einschreibemethoden

Protokoll zum Praktikum des Moduls Technische Informatik an der JLU Gießen

Leitfaden Internet-Redaktion kursana.de

MPEG2Schnitt (Freeware) - demuxte Videodaten schneiden und verketten. framegenauer Schnitt mit Bild-Ton-Synchronisierung und Fehlerkorrekturen

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 16

Tutorium Rechnerorganisation

Task: Nmap Skripte ausführen

Erweiterung AE WWS Lite Win: AES Security Verschlüsselung

Anlegen eines Speicherbereichs mit DB, DW eleganter in Kombination mit EQU, Timer-Interrupt

Um zusammenfassende Berichte zu erstellen, gehen Sie folgendermaßen vor:

Tietze, Schenk: Halbleiterschaltungstechnik (Kap. 10) Keller / Paul: Hardwaredesign (Kap. 5) L. Borucki: Digitaltechnik (Kap.

Theoretische Informatik SS 04 Übung 1

Grundtypen Flip-Flops

Grundlagen der Informationverarbeitung

Transkript:

Technische Grundlagen der Informatik Kapitel 3 Prof. Dr. Sorin A. Huss Fachbereich Informatik TU Darmstadt

Kapitel 3: Themen Hardware-Beschreibungssprachen Syntax von VHDL Simulation Synthese Testrahmen WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 2

Einleitung Hardware-Beschreibungssprachen Hardware Description Languages (HDL) Textuelle Beschreibung von Schaltungen möglich Auf verschiedenen Abstraktionsebenen Struktur (z.b. Verbindungen zwischen Gattern) Verhalten (z.b. Boolesche Gleichungen) Entwurfswerkzeuge führen die Beschreibungen aus (Simulation) und erzeugen Schaltungsstruktur mittels Verfahren zur Schaltungssynthese Schaltungssynthese Grob vergleichbar mit Übersetzung (Compilieren) von konventionellen Programmiersprachen Programme, die als Computer-Aided Design/Engineering (CAD/E) oder Electronic Design Automation (EDA) Werkzeuge bezeichnet werden WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 3

Einleitung Fast alle kommerziellen Hardware-Entwürfe wurden mit HDLs realisiert, der praktische Einsatz von HDLs ist Stand der Technik Zwei HDLs haben sich durchgesetzt Verilog VHDL Sie werden im Endeffekt wohl beide lernen müssen! Es gibt keinen klaren Gewinner, allerdings gibt es in Europa eine Präferenz für VHDL WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 4

Verilog 1984 von der Fa. Gateway Design Automation entwickelt Seit 1995 ein IEEE Standard (1364) Überarbeitet 2001 und 2005 Neuer Dialekt SystemVerilog (Obermenge von Verilog-2005) Weit verbreitet in zivilen US-Firmen In der Informatik der TU Darmstadt eingesetzt am FG Eingebettete Systeme und ihre Anwendungen (ESA, Prof. Koch) WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 5

VHDL Very High-Speed Integrated Circuit Hardware Description Language Entwickelt 1981 durch das US Verteidigungsministerium Inspiriert durch die konventionelle Programmiersprache Ada Standardisiert in 1987 durch IEEE (1076) Überarbeitet in 1993, 2000, 2002, 2006, 2008 Erweitert zur Beschreibung von ereignisdiskreten und zeitkontinuierlichen Systemen (VHDL-AMS), s. Vorlesung Modellierung heterogener Systeme Weit verbreitet in US-Rüstungsfirmen Vielen europäischen Firmen In der Informatik der TU Darmstadt eingesetzt am FG Integrierte Schaltungen und Systeme (ISS, Prof. Huss) WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 6

In dieser Iteration der Vorlesung In den Vorlesungen und Übungen VHDL Hier gezeigte Grundkonzepte sind in beiden Sprachen identisch Andere Syntax und auch Unterschiede im Detail VHDL-Beschreibung ist in der Regel länger, aber gut lesbar Im Begleitbuch werden beide Sprachen nebeneinander gezeigt S. Kapitel 4 Moderne Entwurfswerkzeuge können in der Regel beide Sprachen verarbeiten WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 7

Von einer HDL zu Logikgattern Simulation Eingangswerte werden in HDL-Beschreibung eingegeben Beschriebene Schaltung wird stimuliert Berechnete Ausgangswerte werden auf Korrektheit geprüft Fehlersuche viel einfacher und billiger als in realer Hardware Synthese Übersetzt HDL-Beschreibungen in Netzlisten, d. h. Strukturbeschreibungen Logikgatter (Schaltungselemente) Verbindungen (Verbindungsknoten) WICHTIG: Beim Verfassen von HDL-Beschreibungen ist es essentiell wichtig, immer die vom Programm beschriebene Hardware im Auge zu behalten! WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 8

VHDL-Module a b c VHDL Modul y Zwei Arten von Beschreibungen in Modulen: Verhalten: Was tut die Schaltung? Struktur: Wie ist die Schaltung aus Untermodulen aufgebaut? WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 9

Beispiel für Verhaltensbeschreibung VHDL: library IEEE; use IEEE.STD_LOGIC_1164.all; entity example is port(a, b, c: in STD_LOGIC; y: out STD_LOGIC); architecture synth of example is y <= ((not a) and (not b) and (not c)) or (a and (not b) and (not c)) or (a and (not b) and c); WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 10

Simulation von Verhaltensbeschreibungen Signalverlaufsdiagramm (waves) WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 11

Synthese von Verhaltensbeschreibungen Syntheseergebnis: b c un5_y y y a un8_y WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 12

VHDL Syntax Unterscheidet nicht Groß- und Kleinschreibung bei Identifiern Beispiel: reset und Reset sind das gleiche Signal Identifier müssen mit einem Buchstaben anfangen Beispiel: 2mux ist ein ungültiger Name Anzahl von Leerzeichen, Leerzeilen und Tabulatoren irrelevant Kommentare: -- bis zum Ende der Zeile WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 13

Strukturelle Beschreibung: Modulhierarchie library IEEE; use IEEE.STD_LOGIC_1164.all; entity and3gate is port(a, b, c: in STD_LOGIC; y: out STD_LOGIC); architecture synth of and3gate is y <= a and b and c; Nur eine entity pro Datei. Aber mehrere architectures pro entity möglich! library IEEE; use IEEE.STD_LOGIC_1164.all; entity invgate is port(a: in STD_LOGIC; y: out STD_LOGIC); architecture synth of invgate is y <= not a; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 14

Strukturelle Beschreibung: Modulhierarchie library IEEE; use IEEE.STD_LOGIC_1164.all; entity nand3gate is port(a, b, c: in STD_LOGIC; y: out STD_LOGIC); architecture struct of nand3gate is component and3gate port(a, b, c: in STD_LOGIC; y: out STD_LOGIC); end component; component invgate port(a: in STD_LOGIC; y: out STD_LOGIC); end component; signal n1: STD_LOGIC; and3inst: and3gate port map(a => a, b => b, c => c, y => n1); invinst: invgate port map(a => n1, y => y); WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 15

Bitweise Verknüpfungsoperatoren library IEEE; use IEEE.STD_LOGIC_1164.all; entity gates is port(a, b: in STD_LOGIC_VECTOR(3 downto 0); y1, y2, y3, y4, y5: out STD_LOGIC_VECTOR(3 downto 0)); architecture synth of gates is -- Fünf unterschiedliche Logikgatter -- mit zwei Eingängen, -- jeweils 4 Bit breite Busse y1 <= a and b; y2 <= a or b; y3 <= a xor b; y4 <= a nand b; y5 <= a nor b; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 16

Reduktionsoperatoren library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_MISC.all; -- weitere Bibliothek entity and8 is port(a: in STD_LOGIC_VECTOR(7 downto 0); y: out STD_LOGIC); architecture synth of and8 is y <= AND_REDUCE(a); -- Funktionsaufruf -- Abkürzung für -- y <= a(7) and a(6) and a(5) and a(4) and -- a(3) and a(2) and a(1) and a(0); WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 17

Bedingte Zuweisung library IEEE; use IEEE.STD_LOGIC_1164.all; entity mux2 is port(d0, d1: in STD_LOGIC_VECTOR(3 downto 0); s: in STD_LOGIC; y: out STD_LOGIC_VECTOR(3 downto 0)); architecture synth of mux2 is y <= d0 when s = '0' else d1; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 18

Interne Verbindungsknoten oder Signale library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC; s, cout: out STD_LOGIC); architecture synth of fulladder is signal p, g: STD_LOGIC; -- interne Verbindungsknoten ( Drähte ) p <= a xor b; g <= a and b; g s s s <= p xor cin; cin cout <= g or (p and cin); a b p un1_cout cout cout WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 19

Bindung von Operatoren (Präzedenz) Höchste Bestimmt Ausführungsreihenfolge not NOT *, /, mod, rem Multiplikation, Division, Modulo, Remainder +, -, & Addition, Subtraktion, Konkatenation Niedrigste rol, ror, srl, sll, sra, sla =, /=, <, <=, >, >= and, or, nand, nor, xor Rotieren, Schieben (logisch), Schieben (arithmetisch) Vergleiche Logische Operatoren WICHTIG: Die logischen Operatoren haben gleiche Präzedenz. Es ist daher auf Klammerung zu achten! WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 20

Zahlen Syntax: 'wert' für STD_LOGIC ('0' oder '1') B"wert" für STD_LOGIC_VECTOR B = Basis (optional) Zahl Bitbreite Basis entspricht Dezimal Darstellung im Speicher '1' 1 binär 1 1 "101" 3 binär 5 101 B"101" 3 binär 5 101 X"AB" 8 hexadezimal 171 10101011 WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 21

Operationen auf Bit-Ebene: Beispiel 1 y <= c(2 downto 1) & d(0) & d(0) & d(0) & c(0) & "101"; -- wenn y ein 9-bit STD_LOGIC_VECTOR ist, hat die Anweisung diesen Effekt: y = c[2] c[1] d[0] d[0] d[0] c[0] 1 0 1 WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 22

Operationen auf Bit-Ebene: Beispiel 2 VHDL: Synthese: library IEEE; use IEEE.STD_LOGIC_1164.all; s s mux2 entity mux2_8 is port(d0, d1: in STD_LOGIC_VECTOR(7 downto 0); s: in STD_LOGIC; y: out STD_LOGIC_VECTOR(7 downto 0)); d0[7:0] d1[7:0] [7:0] [7:0] [3:0] [3:0] d0[3:0] y[3:0] d1[3:0] lsbmux [3:0] [7:0] y[7:0] architecture struct of mux2_8 is s component mux2 is [7:4] d0[3:0] port(d0, d1: in STD_LOGIC_VECTOR(3 downto 0); [7:4] s: in STD_LOGIC; d1[3:0] y[3:0] [7:4] y: out STD_LOGIC_VECTOR(3 downto 0)); msbmux end component; msbmux: mux2 port map(d0 => d0(7 downto 4), d1 => d1(7 downto 4), s => s, y => y(7 downto 4)); lsbmux: mux2 port map(d0 => d0(3 downto 0), d1 => d1(3 downto 0), s => s, y => y(3 downto 0)); mux2 WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 23

Hochohmiger Ausgang: Z VHDL: library IEEE; use IEEE.STD_LOGIC_1164.all; entity tristate is port(a: in STD_LOGIC_VECTOR(3 downto 0); en: in STD_LOGIC; y: out STD_LOGIC_VECTOR(3 downto 0)); architecture synth of tristate is y <= "ZZZZ" when en = '0' else a; Synthese: en a[3:0] [3:0] [3:0] [3:0] [3:0] y[3:0] y_1[3:0] WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 24

Verzögerungen library IEEE; use IEEE.STD_LOGIC_1164.all; entity example is port(a, b, c: in STD_LOGIC; y: out STD_LOGIC); Nur für die Simulation, after-ausdrücke werden für die Synthese ignoriert! architecture synth of example is signal ab, bb, cb, n1, n2, n3: STD_LOGIC; ab <= not a after 1 ns; bb <= not b after 1 ns; cb <= not c after 1 ns; n1 <= ab and bb and cb after 2 ns; n2 <= a and bb and cb after 2 ns; n3 <= a and bb and c after 2 ns; y <= n1 or n2 or n3 after 4 ns; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 25

Verzögerungen WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 26

Verzögerungen library IEEE; use IEEE.STD_LOGIC_1164.all; entity example is port(a, b, c: in STD_LOGIC; y: out STD_LOGIC); architecture synth of example is signal ab, bb, cb, n1, n2, n3: STD_LOGIC; ab <= not a after 1 ns; bb <= not b after 1 ns; cb <= not c after 1 ns; n1 <= ab and bb and cb after 2 ns; n2 <= a and bb and cb after 2 ns; n3 <= a and bb and c after 2 ns; y <= n1 or n2 or n3 after 4 ns; Nur für die Simulation, after-ausdrücke werden für die Synthese ignoriert! WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 27

Testrahmen HDL-Programm zum Testen eines anderen HDL-Moduls Im Hardware-Entwurf schon lange üblich seit einigen Jahren auch im Software-Bereich (JUnit etc.) Getestetes Modul Device under test (DUT), Unit under test (UUT) Testrahmen wird nicht synthetisiert Nur für Simulation benutzt Arten von Testrahmen Einfach: Legt nur feste Testdaten an und zeigt Ausgaben an Selbstprüfend: Prüft auch noch, ob Ausgaben den Erwartungen entsprechen Selbstprüfend mit Testvektoren: Auch noch mit variablen Testdaten WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 28

Beispiel Verfasse VHDL-Code, um die folgende Funktion in Hardware zu berechnen: y = bc + ab Der Modulname sei sillyfunction WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 29

Beispiel Verfasse VHDL-Code, um die folgende Funktion in Hardware zu berechnen: y = bc + ab Der Modulname sei sillyfunction VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity sillyfunction is port(a, b, c: in STD_LOGIC; y: out STD_LOGIC); architecture synth of sillyfunction is y <= (not b and not c) or (a and not b); WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 30

Einfacher Testrahmen für Beispiel library IEEE; use IEEE.STD_LOGIC_1164.all; entity testbench1 is -- kein Input/Output architecture sim of testbench1 is component sillyfunction is port(a, b, c: in STD_LOGIC; y: out STD_LOGIC); end component; signal a, b, c, y: STD_LOGIC; -- Instanz des zu testenden Moduls erzeugen dut: sillyfunction port map(a => a, b => b, c => c, y => y); -- Eingangswerte anlegen und warten process a <= '0'; b <= '0'; c <= '0'; wait for 10 ns; c <= '1'; wait for 10 ns; b <= '1'; c <= '0'; wait for 10 ns; c <= '1'; wait for 10 ns; a <= '1'; b <= '0'; c <= '0'; wait for 10 ns; c <= '1'; wait for 10 ns; b <= '1'; c <= '0'; wait for 10 ns; c <= '1'; wait for 10 ns; wait; -- wait forever end process; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 31

Selbstprüfender Testrahmen library IEEE; use IEEE.STD_LOGIC_1164.all; entity testbench2 is -- kein Input/Output architecture sim of testbench2 is component sillyfunction is port(a, b, c: in STD_LOGIC; y: out STD_LOGIC); end component; signal a, b, c, y: STD_LOGIC; -- Instanz des zu testenden Moduls erzeugen dut: sillyfunction port map( a => a, b => b, c => c, y => y); c <= '1'; wait for 10 ns; assert y = '0' report "001 fehlerhaft."; b <= '1'; c <= '0'; wait for 10 ns; assert y = '0' report "010 fehlerhaft."; c <= '1'; wait for 10 ns; assert y = '0' report "011 fehlerhaft."; a <= '1'; b <= '0'; c <= '0'; wait for 10 ns; assert y = '1' report "100 fehlerhaft."; c <= '1'; wait for 10 ns; assert y = '1' report "101 fehlerhaft."; b <= '1'; c <= '0'; wait for 10 ns; assert y = '0' report "110 fehlerhaft."; c <= '1'; wait for 10 ns; assert y = '0' report "111 fehlerhaft."; wait; -- wait forever end process; -- Eingangswerte anlegen und warten -- Ausgang mit erwartetem Wert überprüfen process a <= '0'; b <= '0'; c <= '0'; wait for 10 ns; assert y = '1' report "000 fehlerhaft."; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 32

Selbstprüfender Testrahmen mit Testvektoren Trennen von HDL-Programm und Testdaten Eingaben Erwartete Ausgaben Organisiere beides als Vektoren von zusammenhängenden Signalen/Werten Eigene Datei für Vektoren Dann HDL-Programm für universellen Testrahmen 1. Erzeuge Takt zum Anlegen von Eingabedaten/Auswerten von Ausgabedaten 2. Lese Vektordatei in VHDL Array 3. Lege Eingangsdaten an 4. Warte auf Ausgabedaten, werte Ausgabedaten aus 5. Vergleiche aktuelle mit erwarteten Ausgabedaten, melde Fehler bei Differenz 6. Noch weitere Testvektoren abzuarbeiten? WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 33

Selbstprüfender Testrahmen mit Testvektoren Im Testrahmen erzeugter Takt legt zeitlichen Ablauf fest Steigende Flanke: Eingabewerte aus Testvektor an Eingänge anlegen Fallende Flanke: Aktuelle Werte an Ausgängen lesen CLK Eingangswerte Ausgangswerte anlegen lesen Takt kann auch als Takt für sequentielle synchrone Schaltungen verwendet werden WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 34

Einfaches Textformat für Testvektordateien Datei: example.tv 000_1 001_0 010_0 011_0 100_1 101_1 110_0 111_0 Aufbau: Eingangsdaten _ erwartete Ausgangsdaten WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 35

Testrahmen: 1. Erzeuge Takt library IEEE; use IEEE.STD_LOGIC_1164.all; use STD.TEXTIO.all; entity testbench3 is -- kein Input/Output architecture sim of testbench3 is component sillyfunction is port(a, b, c: in STD_LOGIC; y: out STD_LOGIC); end component; signal a, b, c, y: STD_LOGIC; signal clk, reset: STD_LOGIC; signal yexpected: STD_LOGIC; constant MEMSIZE: integer := 10000; type tvarray is array (MEMSIZE downto 0) of STD_LOGIC_VECTOR(3 downto 0); signal testvectors: tvarray; -- Array für Testvektoren shared variable vectornum, errors: integer; -- Verwaltungsdaten -- Instanz des zu testenden Moduls erzeugen dut: sillyfunction port map(a => a, b => b, c => c, y => y); -- Takterzeugung process clk <= '1'; wait for 5 ns; clk <= '0'; wait for 5 ns; end process; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 36

2. Lese Testvektordatei in Array ein -- Zu Beginn der Simulation: -- Testdaten einlesen und einen Reset-Impuls erzeugen process is -- wird genau einmal ausgeführt file tv: TEXT; variable i, j: integer; variable L: line; variable ch: character; i := 0; FILE_OPEN(tv, "example.tv", READ_MODE); while not endfile(tv) loop readline(tv, L); for j in 0 to 3 loop read(l, ch); if (ch = '_') then read(l, ch); end if; if (ch = '0') then testvectors(i)(j) <= '0'; else testvectors(i)(j) <= '1'; end if; end loop; i := i + 1; end loop; vectornum := 0; errors := 0; -- Verwaltungsdaten initialisieren reset <= '1'; wait for 27 ns; reset <= '0'; -- Resetimpuls erzeugen wait; end process; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 37

3. Lege Testdaten an Eingänge an -- zur steigenden Taktflanke (genauer: kurz danach!) process (clk) if (clk'event and clk = '1') then a <= testvectors(vectornum)(0) after 1 ns; b <= testvectors(vectornum)(1) after 1 ns; c <= testvectors(vectornum)(2) after 1 ns; yexpected <= testvectors(vectornum)(3) after 1 ns; end if; end process; a,b,c sind Eingänge der DUT yexpected ist eine Hilfsvariable, die nun den erwarteten Ausgangswert dieses Vektors enthält. WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 38

4. Warte auf Ausgabedaten, lese Ausgabedaten 5. Vergleiche aktuelle Ausgaben mit erwarteten Werten -- warte auf fallende Flanke zum Lesen der Ausgabedaten der DUT process (clk) -- erst prüfen, nachdem Schaltung initialisiert if (clk'event and clk = '0' and reset = '0') then assert y = yexpected -- vergleiche aktuelle Ausgabe mit erwartetem Wert report "Fehler: y = " & STD_LOGIC'image(y); -- Fehlermeldung if (y /= yexpected) then errors := errors + 1; -- zähle Fehler end if; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 39

6. Sind noch weitere Testvektoren abzuarbeiten? -- Array-Index zum Zugriff auf nächsten Testvektor erhöhen vectornum := vectornum + 1; -- Ist der nächste schon ein ungültiger Testvektor? if (is_x(testvectors(vectornum))) then report integer'image(vectornum) & " Tests mit " & integer'image(errors) & " Fehler(n) bearbeitet." severity failure; -- Endmeldung ausgeben end if; end if; end process; Hinweis: Zum Vergleichen auf X muss die Funktion is_x() benutzt werden WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 40

VHDL Sprachkonstrukte in TGDI Vor Testrahmen alle für die Beschreibung von echter Hardware relevanten eingeführt Schaltungssynthese VHDL kann viel mehr Angedeutet beim Testrahmen (Dateioperationen, Ein/Ausgabe, ) Aber in der Regel nicht mehr in Hardware synthetisierbar Nicht Schwerpunkt dieser Veranstaltung Mehr Details zu HDLs in Kanonik Computer Microsystems Im Sommersemester In TGDI soll dieser Kurzüberblick reichen Bei akutem Bedarf werden noch weitere Konstrukte eingeführt WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 41

Weitere Anweisungen zur Verhaltensbeschreibung Dürfen nur innerhalb von Prozessen (process) benutzt werden if / else case WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 42

Kombinatorische Logik als Prozess library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder_blk is port(a, b, cin: in STD_LOGIC; s, cout: out STD_LOGIC); architecture synth of fulladder_blk is process (a, b, cin) -- Sensitivitätsliste variable p, g: STD_LOGIC; -- interne Variablen p := a xor b; -- blockierend g := a and b; -- blockierend s <= p xor cin; cout <= g or (p and cin); end process; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 43

Kombinatorische Logik mit with select library IEEE; use IEEE.STD_LOGIC_1164.all; entity sevenseg is port(data: in STD_LOGIC_VECTOR(3 downto 0); seg: out STD_LOGIC_VECTOR(6 downto 0)); architecture synth of sevenseg is with data select -- ABCDEFG seg <= 0110000" when X"1", --1 1101101" when X"2", --2 1111001" when X"3", --3 0110011" when X"4", --4 1011011" when X"5", --5 1011111" when X"6", --6 1110000" when X"7", --7 1111111" when X"8", --8 1111011" when X"9", --9 1110111" when X"A", --A 0011111" when X"B", --b 1001110" when X"C", --C 0111101" when X"D", --d 1001111" when X"E", --E 1000111" when X"F", --F 1111110" when others; --0 WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 44

Kombinatorische Logik mit case library IEEE; use IEEE.STD_LOGIC_1164.all; entity sevenseg_case is port(data: in STD_LOGIC_VECTOR(3 downto 0); seg: out STD_LOGIC_VECTOR(6 downto 0)); architecture synth of sevenseg_case is process (data) case (data) is -- ABCDEFG when X"1" => seg <= 0110000"; --1 when X"2" => seg <= "1101101"; --2 when X"3" => seg <= "1111001"; --3 when X"4" => seg <= "0110011"; --4 when X"5" => seg <= "1011011"; --5 when X"6" => seg <= "1011111"; --6 when X"7" => seg <= "1110000"; --7 when X"8" => seg <= "1111111"; --8 when X"9" => seg <= "1111011"; --9 when X"A" => seg <= "1110111"; --A when X"B" => seg <= "0011111"; --b when X"C" => seg <= "1001110"; --C when X"D" => seg <= "0111101"; --d when X"E" => seg <= "1001111"; --E when X"F" => seg <= "1000111"; --F when others => seg <= "1111110"; --0 end case; end process; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 45

Kombinatorische Logik mit case Um kombinatorische Logik zu beschreiben, muss ein case-ausdruck alle Möglichkeiten abdecken Entweder explizit angeben Oder einen Default-Fall (others) angeben Tritt in Kraft, wenn sonst keine andere Alternative passt Im Beispiel verwendet WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 46

Kombinatorische Logik mit case und don t care library IEEE; use IEEE.STD_LOGIC_1164.all; entity case_dc is port(a: in STD_LOGIC_VECTOR(3 downto 0); y: out STD_LOGIC_VECTOR(3 downto 0)); architecture synth of case_dc is process (a) case (a) is when "1---" => y <= "1000"; -- - = don't care when "01--" => y <= "0100"; when "001-" => y <= "0010"; when "0001" => y <= "0001"; when others => y <= "0000"; -- alle Fälle abgedeckt end case; end process; WS 10/11 Technische Grundlagen der Informatik - Kapitel 3 - Prof. Sorin A. Huss 47