Einführung in die Elektronik für Physiker

Ähnliche Dokumente
Einführung in die Elektronik für Physiker

Laborübung 2. Teil 1: Latches, Flipflops, Counter. Abbildung 1: Schaltkreis eines Gated D-Latch

Verilog Hardware Description Language (HDL)

Laborübung 3. Latches, Flipflops, Counter

Ausdrücke (1) Grundlegende Eigenschaften

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

Verilog/VHDL. Mehdi Khayati Sarkandi Uni Siegen

Laborübung 4. Zustandsautomaten (Finite State Machines)

Integrierte Schaltungen

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Outline Schieberegister Multiplexer Zähler Addierer. Rechenschaltungen. Marc Reichenbach und Michael Schmidt

VHDL Synthese. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2009/2010

Lösungsvorschlag 2. Übung Technische Grundlagen der Informatik II Sommersemester 2009

VHDL - Synthese. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg

Minimierung nach Quine Mc Cluskey Ermitteln der Primtermtabelle

Carry Lookahead Adder

5 VHDL Einführung (I)

Angewandte Mathematik und Programmierung

Rechnernetze und Organisation

x x y x y Informatik II Schaltkreise Schaltkreise Schaltkreise Rainer Schrader 3. November 2008

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

5. Aufgabenblatt mit Lösungsvorschlag

Eingebettete Systeme

3.1 Reservierte Wörter

Speichern von Zuständen

I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK

Lehrveranstaltung: Digitale Systeme. KS-Praktikums-Vorbereitung Dipl.-Inf. Markus Appel , , ,

Einführung in die technische Informatik

Outline Simulation Design-Richtlinien. VHDL Einführung 2. Marc Reichenbach. Informatik 3 / Rechnerarchitektur Universität Erlangen Nürnberg 05/14

Algorithmen und ihre Programmierung

ERA-Zentralübung 12. Maximilian Bandle LRR TU München Maximilian Bandle LRR TU München ERA-Zentralübung 12

ERA-Zentralübung 11. Maximilian Bandle LRR TU München Maximilian Bandle LRR TU München ERA-Zentralübung 11

Outline Automaten FSM Synthesis FSM in VHDL FSM auf FPGA. State Machines. Marc Reichenbach und Michael Schmidt

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Minimierung nach Quine Mc Cluskey

Hello World! Eine Einführung in das Programmieren Variablen

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab...

Tutorial Vivado/Verilog Teil 5 Zyklisches Schieberegister

Outline Logik Speicher Synthese Signale/Variablen Packages Generische Designs. Basics. Marc Reichenbach

PIC16 Programmierung in HITECH-C

Lösung Versuch Nr. 6 Melody-Player

Logische Bausteine. Addierwerke. Grundlagen der Rechnerarchitektur Logik und Arithmetik 48

Verilog. Modellbildung für Synthese und Verifikation von Bernhard Hoppe. Oldenbourg Verlag München Wien

Syntax der Sprache PASCAL

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

GAL 16V8. 4. Laboreinheit - Hardwarepraktikum SS 2002 VCC / +5V. Eingang / Clock. 8 konfigurierbare Ausgangszellen. 8 Eingänge GND / 0V.

Endliche Automaten 1 WS 00/01. Steuerautomaten

Semestralklausur Einführung in Computer Microsystems

GTI Bonus VHDL - EXTRA

2 Vervollständige die Wahrheitstabellen.

Informatik Vorkurs - Vorlesung 2

Eingebettete Systeme

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Teil 1: Digitale Logik

Klausur ( ) : Technische Grundlagen der Informatik 1 Digitale Systeme WS 2010/2011

Grundlagen der Programmierung

Übungsblatt 8 Lösungen:

Einführung in Computer Microsystems Sommersemester Vorlesung Dr.-Ing. Wolfgang Heenes

17 Zähler. Hochschule für Angewandte Wissenschaften Hamburg FACHBEREICH ELEKTROTECHNIK UND INFORMATIK DIGITALTECHNIK 17-1

Einführung in die Elektronik für Physiker

2. Programmierung in C

Die Klasse MiniJava ist in der Datei MiniJava.java definiert:

Tutorial Vivado/Verilog Teil 6 Zählerbasierter Taktgenerator

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Tutorium: Einführung in die technische Informatik

Vorkurs Informatik WiSe 17/18

Mathematische Computer-Software

Datentypen: integer, char, string, boolean

Informationsverarbeitung auf Bitebene

Vollsynchrone Mehrfunktionsregister

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Klausur - Digitaltechnik

Intensivübung zu Algorithmen und Datenstrukturen

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

15 Einführung in den Entwurf von Zustandsautomaten

Algorithmen und Datenstrukturen (für ET/IT)

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Datentypen und Operatoren Ganzzahlige Numerische Datentypen Logischer Datentyp

Grundlagen der Programmierung

Aufgabe 1: Kombinatorische Schaltungen

Grundlagen der Informatik 2. Typen

WS2018/ Oktober 2018

II. Grundlagen der Programmierung

Vorkurs Informatik WiSe 16/17

Versuch 1. Versuch 1.2 Messung des Kennlinienfeldes I D = f (U DS ) des N-Kanal-MOS-FET mit Parameter U GS = 3V und. Messschaltung: Gemessene Werte:

Basics. Marc Reichenbach und Michael Schmidt 05/11. Informatik 3 / Rechnerarchitektur Universität Erlangen Nürnberg

Teil 1: Digitale Logik

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Basics. Marc Reichenbach und Michael Schmidt 05/11. Informatik 3 / Rechnerarchitektur Universität Erlangen Nürnberg

Bedingte Anweisungen

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

2 Von der Aufgabenbeschreibung zum Zustandsdiagramm

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Einführung in VHDL. 1 ARCHITECTURE Tauschen OF B e i s p i e l IS. 2 SIGNAL a, b : STD_LOGIC; 4 BEGIN. 5 PROCESS( a, b ) 6 BEGIN.

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

Transkript:

Hartmut Gemmeke Forschungszentrum Karlsruhe, IPE gemmeke@ipe.fzk.de Tel.: 0727-82-5635 Einführung in die Elektronik für Physiker 19. ALTERA HDL Was ist AHDL? die proprietäre Hardwarebeschreibungssprache der Firma ALTERA entwickelt für komplexe kombinatorische und sequentielle Logik: Altera-EPLDs (erasable and programmable logic devices) Unabhängig von der Wahl der verwendeten EPLD-Bausteine Wiederverwendbarkeit von Teildesigns (subdesigns) in hierarchischer Struktur, auch in VHDL Simulation Synthese Beispiel Halbaddierer in AHDL: SUBDESIGN halbadd ( a, b : INPUT; car, sum : OUTPUT; ) BEGIN car = a & b; sum = a &!b #!a & b; -- kürzer sum = a $ b; END $ = XOR! = NICHT & = UND # = ODER 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 2

Aufbau einer AHDL-Beschreibung Jedes Subdesign wird in einem Text-Design-File (*.TDF) abgelegt und setzt sich aus mehreren Sektionen zusammen (siehe Tabelle): Jeder dieser Files muss eine SUBDESIGN- und Logik-Sektion besitzen Konstanten, Funktionsprototypen, TITLE, INCLUDE und Deklaration von Variablen sind optional und hängen von der Anwendung ab TITLE Anweisung INCLUDE Anweisung CONSTANT Anweisung FUNCTION Prototyp SUBDESIGN Sektion VARIABLE Sektion Logik Sektion Gibt dem Projekt einen Titel (für die Dokumentation) Erlaubt als *.inc File, ähnlich wie ein *.h-file in C, z.b. Definitionen, aber keine Logik oder Subdesigns zu laden Definition von Konstanten Definition von Funktionsprototypen für Makrofunktionen Deklaration der Schnittstellen des Subdesigns (Ein- und Ausgangs-Signale) Deklaration von logischen Elementen, d.h. Instanzen von Funktions-Primitiven oder Makrofunktionen Logik, die parallel ausgeführt wird 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 3 Was ist AHDL II AHDL-Beschreibung = textuelle Beschreibung von Hardwarekomponenten in AHDL text define files.tdf Syntheseergebnis bei einfacher Beschreibung oft optimal AHDL ist eine parallele Sprache Alle SUBDESIGN Anweisungen halbadd in einer logischen ( SUBDESIGN Sektion werden parallel, a, b d.h. zur gleichen : INPUT; Zeit ausgeführt car, und sum nicht sequentiell : OUTPUT;! Sequentielle ) Logik lässt sich nur durch BEGIN Speicherelemente realisieren (z.b. Flipflops) car = a & b; sum = a &!b #!a & b; -- kürzer sum = a $ b; END text define files.tdf TITLE Anweisung INCLUDE Anweisung CONSTANT DEFINE PARAMETERs FUNCTIONs Prototyp OPTION SUBDESIGN Sektion VARIABLE Logik Sektion Include Files (.inc) CONSTANT DEFINE PARAMETERs FUNCTION prototype Notwendig in einem TDF-File 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19

Konventionen der AHDL Sprachelemente I Kommentare: Kommentare werden bei AHDL mit %-Zeichen eingeschlossen, Oder wie in VHDL durch -- gestartet und mit dem Ende der Zeile beendet (unter diesen Bedingungen kann man sehr übersichtlich % benutzen, um nicht benötigten Code auszukommentieren) Zahlen können, oktal, dezimal oder hexadezimal eingegeben und beliebig in einem Ausdruck kombiniert werden: Binär: B 010X Sequenz von 1, 0 und X (don t care) Oktal: O 037 Reihe von Zahlen im Bereich 0..7 oder Q 037 Dezimal: Serie von Zahlen zwischen 0 und 9 Hexadezimal X 03F Reihe von Zahlen im Bereich 0 bis 15: 0..9,A..F oder H 03F 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 5 Konventionen der AHDL Sprachelemente II Namen Namen dürfen keine Leer- oder Sonderzeichen enthalten (sonst Namen mit (') einschließen), AHDL unterscheidet nicht zwischen Groß- und Kleinschreibung! Namen dürfen nicht länger als 32 Zeichen sein. Man kann die Ziffern 0..9 und die Buchstaben A..Z (groß oder klein) sowie den Unterstrich _ im Namen verwenden. "/" am Anfang eines Namens = "active-low"-signal (invertiertes Signal) Man unterscheidet 3 Typen von Namen: Symbolische Namen für benutzerdefinierte Bezeichner (Identifier) von Variablen, Konstanten,... Subdesign-Namen Namen von Schnittstellen (Ports) Strings (Zeichenketten) sind Argumente für TITLE und INCLUDE, werden durch Anführungsstriche eingeschlossen: TITLE volladder -- oder z.b. INCLUDE volladder.inc -- ein Default-Include-File wird von einem *.tdf -- File (Subdesign) im File-Menu erzeugt 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 6

Konventionen der AHDL Sprachelemente III Boolesche Größen: Einzelne Signale werden in AHDL stets als boolesche Größen interpretiert und Wertzuweisung über die reservierten Schlüsselwörter VCC und GND: wahr als VCC (z.b. a = VCC) und nicht wahr als GND (z.b. a = GND) (Bit-)Vektoren: Gruppen von Booleschen Größen = Vektoren von maximal 256 Einzelelementen (Bits oder Komponenten) : z.b. a[5..0] ist dieser Vektor einmal definiert, so kann ich auch Teilbereiche verwenden a[5..2] oder die Bereichsangaben weglassen a[ ] = a[5..0] bei Teilvektoren mit nur einem Element, kann man die eckige Klammern auch weglassen a[5] = a5 Aufzählungsvektoren sind mit einer runden Klammer eingeschlossen und die Elemente mit Kommata getrennt: (a[..2], b, c) Vektoren lassen sich logisch und arithmetisch interpretieren: a[3..0] = (VCC, GND, GND, VCC) = 9 = -7 Konstanten: sind ganze positive oder negative (2er Komplement) Zahlen 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 7 CONSTANT- und FUNCTION- Anweisung Mit Hilfe des CONSTANT Bezeichners werden symbolischen Namen numerische Konstanten zugewiesen wenn z.b. eine Konstante öfters in einem Design auftaucht, erhöht das die Übersichtlichkeit, Konstanten wird der Wert nur einmal zugewiesen: N_REG = LOG2(256) - 1 FUNCTION Prototype Statements sind notwendig, um einen Logikdesign in mehrere Teildesigns zu zerlegen und wieder für ein SUBDESIGN zur Verfügung zu stellen, z.b.: FUNCTION volladd(a,b,carry_in) RETURNS (sum, carry_out); Es werden die Eingangs- und Ausgangsports definiert, die tatsächliche Realisierung (Code) befindet sich in dem zugehörigen File für dieses SUBDESIGN oder eine MAX+PlusII Mega- oder Macrofunction a b carry_in volladd sum carry_out 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 8

Schlüsselwort SUBDESIGN ist gefolgt durch einen Subdesign-Namen (*) und muss den gleichen Namen haben wie der *.TDF-File Deklaration der Ein- und Ausgänge eines Subdesigns Eingeschlossen durch Klammern () Signalnamen sind durch ", " getrennt, durch ein : " gefolgt und nach der Typdeklaration mit ";" abgeschlossen. Die Typdeklarationen werden durch die Schlüsselworte INPUT bzw. OUTPUT oder BIDIR getätigt. Optional lässt sich einer Typedeklaration auch ein Defaultwert (= VCC oder = GND) zuweisen. Beispiel: SUBDESIGN 8_bit_add -- addiere 8 bit a und b, um Summe sum und carry ( -- zu erhalten ) a[7..0], b[7..0] sum[7..0], carry SUBDESIGN Sektion : INPUT; : OUTPUT; a[7..0] 8_bit_add b[7..0] carry sum[7..0] 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 9 VARIABLE Sektion Deklaration von Instanzen* von Makrofunktionen von bereits bestehenden Subdesigns Makrofunktionen müssen vor der Deklaration von Instanzen in einem FUNCTION Prototype Statement eingeführt werden. Funktionsprimitive können direkt instanziert werden (Altera Flipflops,...). Oder von Funktionsprimitiven (Flipflops oder anderen Speicherelementen), die vom System zur Verfügung gestellt werden, und Definition von intermediären Variablen (Zwischenvariablen) als Typ NODE Beispiel: VARIABLE add[7..0]: volladd; -- definiert 8 Volladdierer-Elemente in einer Form, -- die vorher in einem anderen Subdesign -- logisch definiert wurde *Instanzen sind eingesetzte Größen oder Funktionen, die wie Zwischenvariablen behandelt werden. Z.B. add[7..0] sind 8 Knoten (NODEs) mit jeweils 5 Instanzen 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 10

Logische Operationen Die Reihenfolge logischer Operatoren kann durch runde Klammern beeinflusst werden, z.b. a & (b # c) Logische Operatoren können auch auf Vektoren und Teilvektoren angewendet werden:!a[3..0] = (!a3,!a2,!a1,!a0) oder!9 =!(1,0,0,1) = (0,1,1,0) = 6 Priorität Symbol Schlüsselwort Logische Bedeutung aber y = 0 ist falsch y = GND ist o.k. 1 3! == NOT nicht Gleich (Vergleich) 3 5 5 6 6!= &!& $!$ #!# AND NAND XOR XNOR OR NOR Ungleich (Vergleich) und Nicht und Exklusiv oder Exklusiv nicht oder oder Nicht oder 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 11 Arithmetische Operationen I Bei arithmetischen Operationen müssen Vektoren die gleiche Länge aufweisen Symbol Beispiel Priorität Beschreibung!!a 1 NOT ^ a^2 1 Exponent MOD MOD 2 2 Modulus DIV a / 2 2 Division 2 a 2 Multiplikation LOG2 LOG2(-1) 2 Logarithmus zur Basis 2 (wird aufgerundet) 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 12

Arithmetische Operationen II Die arithmetischen Vergleichsoperationen führen immer auf logische Variablen, auch bei Verwendung von Vektoren: b = a[3..0] == 0; -- entspricht der nächsten Zeile b =!(a3 # a2 # a1 # a0); -- oder nach de Morgan b =!a3 &!a2 &!a1 &!a0 Priorität Symbol Typ Arithmetische Beschreibung 1 3 3 - + - ==!= < <= > >= unär Negation Addition Subtraktion gleich ungleich kleiner kleiner gleich größer größer gleich 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 13 Ein Mini-Beispiel TITLE "Volladdierer"; -- erzeugt aus 2 Halbaddierern FUNCTION halbadd(a,b) RETURNS (car, sum); SUBDESIGN volladd ( x[1,0], carry_in carry_out, sum_out ) -- oder: INCLUDE halbadd.inc ; : INPUT; : OUTPUT; x[0] x[1] carry_in VARIABLE add[1,0] : halbadd; -- zwei Halbaddierer werden definiert BEGIN add[0].a = x[0]; -- hier mit dem Eingang und add[0].b = x[1]; add[1].a = add[0].sum; -- untereinander verknüpft add[1].b = carry_in; sum_out = add[1].sum; carry_out = add[0].car # add[1].car; -- ein OR-Gatter für carry_out END HA car sum HA car sum!1 carry_out sum_out 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 1

Wahrheitstafel SUBDESIGN 7segment -- dekodiert B"0000" bis B"1111" in Steuerkode für 7-Segmentanzeige ( -- oder H"0" bis H"F" in 0 bis F i[3..0] : INPUT a,b,c,d,e,f,g : OUTPUT ) BEGIN TABLE -- Eine kombinatorische Logik lässt sich auch durch eine Wahrheitstafel darstellen i[3..0] => a, b, c, d, e, f, g; -- -a- H"0" => 1, 1, 1, 1, 1, 1, 0; -- f b H"1" => 0, 1, 1, 0, 0, 0, 0; -- -g- H"2" => 1, 1, 0, 1, 1, 0, 1; -- e c H"3" => 1, 1, 1, 1, 0, 0, 1; -- -d- H"" => 0, 1, 1, 0, 0, 1, 1; -- dargestellt werden 0, 1, 2, 3,, 5, 6, 7, 8, 9, A, b, C, d, E, F H"5" => 1, 0, 1, 1, 0, 1, 1; H"6" => 1, 0, 1, 1, 1, 1, 1; H"7" => 1, 1, 1, 0, 0, 0, 0; H"8" => 1, 1, 1, 1, 1, 1, 1; H"9" => 1, 1, 1, 1, 0, 1, 1; H"A" => 1, 1, 1, 0, 1, 1, 1; H"B" => 0, 0, 1, 1, 1, 1, 1; H"C" => 1, 0, 0, 1, 1, 1, 0; H"D" => 0, 1, 1, 1, 1, 0, 1; H"E" => 1, 0, 0, 1, 1, 1, 1; H"F" => 1, 0, 0, 0, 1, 1, 1; END TABLE END 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 15 IF Statements Bedingte Logik um die Lesbarkeit eines Designs zu erhöhen Ohne IF: IF a == b THEN equal = VCC; ELSEIF a < b THEN equal = GND; smaller = VCC; ELSE equal = GND; smaller = GND; END IF; equal = a == b; smaller = a < b; -- entspricht equal = (a == b); Bedingte Logik lässt sich immer durch Boolesche Gleichungen ersetzen! Probleme: Vollständigkeit: was ist mit smaller für a == b? Parallelität: Alle Statements in IF und ELSEIF werden gleichzeitig ausgeführt, in konventionellen Programmiersprachen hintereinander! Führt zumeist zu aufwändigerer Logik IF a == b THEN c = VCC; ELSE c = GND; END IF; -- wird vom Compiler übersetzt in: -- (wegen der Parallelität) IF a == b THEN c = VCC; END IF; IF a!= b THEN c = GND; END IF; 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 16

CASE Statements Bedingte Logik, weniger aufwändig als IF... THEN CASE a IS WHEN 1 => b = c; WHEN 2 => b = -c; WHEN OTHERS b = GND; END CASE; -- Vergleich eines logischen Ausdrucks mit verschiedenen Konstanten -- Default Alternative Wofür ist das nützlich? z.b. zur Beschreibung von Automaten oder "Finite State Machines" 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 17 FUNCTIONs-Primitive: Kombinatorisch Knoten ("Nodes"), Zwischenergebnisse in einem booleschen Design, die man wieder verwenden will: FUNCTION NODE (in) -- wird vom Compiler erzeugt, aber RETURNS (out); -- ohne Instanz in, out Z.B.: VARIABLE zero: NODE; -- Wertzuweisung: zero.in = a[7..0] == 0; -- das gleiche gilt für (=!a0&...&!a7) -- Verwendung des Knoten-Werts: f = zero.out; Tristate-Buffer definiert Datentor nach außen FUNCTION TRI (in, oe) RETURNS (out); Z.B.: VARIABLE a: TRI_STATE_NODE; Tristate-Buffer ist aktiv, a.in Eingang a.oe = Freigabe Ausgang (output enable) wenn oe == VCC (oe ist das output enable Signal) und hochohmig für oe == GND im Fall bidirektionaler Leitungen muss im SUBDESIGN-Header die Variable als BIDIR charakterisiert werden a a.out Ausgang 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 18

Zustands-Automaten Eine Zustandsmaschine braucht eine Variablen-Definition vom Typ MACHINE WITH STATES VARIABLE ss: MACHINE WITH STATES (s1, s1); Definiert einen Automaten mit dem Namen ss und 2 Zuständen s1, s1 Compiler generiert automatisch die notwendigen Flipflops und die Zustandskodierung sowie 3 Standard Ports clk Taktsignal des Automaten reset (high active), Rücksetzung in den zuerst definierten Zustand ena (optional) Freigabe ( = VCC) oder Sperrung ( = GND) des Taktsignals Zugriff auf die Ausgänge des Zustandsflipflops und Decodierung der Zustände: VARIABLE ss: MACHINE OF BITS (q0,q0) WITH STATES (idle = B"00", wait = B"10", active = B"11"); Die Dekodierung kann man auch dem Compiler überlassen: ss: MACHINE WITH STATES (idle, wait, active); Die Zustandsübergänge werden in der Logiksektion definiert 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 19 "Primitive" der Sequentiellen Logik Sequentielle Logik benötigt Speicherelemente, die AHDL in Form von vordefinierten Flipflop-Primitiven zur Verfügung stellt: Primitiv DFF TFF SRFF JKFF DFFE TFFE SRFFE JKFFE Funktionsprototyp FUNCTION DFF (d, clk, clrn, prn) FUNCTION TFF (t, clk, clrn, prn) FUNCTION SRFF (s, r, clk, clrn, prn) FUNCTION JKFF (j, k, clk, clrn, prn) FUNCTION DFFE (d, clk, clrn, prn, ena) FUNCTION TFFE (t, clk, clrn, prn, ena) FUNCTION SRFFE (s, r, clk, clrn, prn, ena) FUNCTION JKFFE (j, k, clk, clrn, prn, ena) Flipflop-Typ D-Flipflop Toggle-Flipflop RS-Flipflop JK-Flipflop D-Flipflop mit Freigabe Toggle-Flipflop mit Freigabe RS-Flipflop mit Freigabe JK-Flipflop mit Freigabe Alle Flipflops sind positiv-flanken-getriggert, die Latches levelsensitiv Dabei bedeuten: clk = Register Clock Input clrn = Clear invertiert prn = Preset Input invertiert ena = Latch oder Clock Enable, ena = GND sperrt den Flipflop d, t, r, s, j, k = Daten Input von Logik und q = Output 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 20

Beispiele zur Sequentiellen Logik I D-Flipflop: VARIABLE a: DFF; -- bedeutet: a.d a.clk a.prn a.clrn a.q Setzeingang (Eingangsport) Takteingang CLK (Eingangsport) asynchroner Setzeingang SET (Eingangsport, Defaultwert VCC) asynchroner Rücksetzeingang RESET (Eingangsport, Defaultwert VCC) Ausgang Q (Ausgangsport) Nur ein Output => man kann.q weglassen ( Bei anderen Primitiven mit nur einem Eingang => das Gleiche) a.d a.clk a a.prn a.q a.clrn 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 21 Beispiele zur Sequentiellen Logik II 16 Bit Register = Flipflop-Vektor CONSTANT WIDTH = 16; SUBDESIGN register ( clock: INPUT; load: INPUT; d[width..1]: INPUT; q[width..1]: OUTPUT; ) VARIABLE reg[width..1] : DFFE; BEGIN reg[ ].clk = clock; reg[ ].ena = load; reg[ ].prn = VCC; reg[ ].clrn = VCC; -- nicht notwendig, Default-Wert auch o.k. -- nicht notwendig, Default-Wert auch o.k. reg[ ].d = d[ ]; q[ ] = reg[ ].q; --.q überflüssig, es gibt nur einen output END; -- Weitere Vereinfachung: VARIABLE q[width..1] : DFFE; BEGIN q[ ].clk = clock; q[ ].ena = load; q[ ] = d[ ]; END; -- q[ ] und der Ausgang des D-Flipflops -- haben gleichen Namen und werden -- daher automatisch verbunden 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 22

D-Flipflop als Statemachine SUBDESIGN D_flipflop_fsm ( clk, reset, d q : INPUT; : OUTPUT; ) VARIABLE qq: MACHINE WITH STATES (q0 = B"0", q1 = B"1"); BEGIN qq.clk = clk; qq.reset = reset; TABLE qq, d => qq, q; q1, 0 => q1, 1; q1, 1 => q0, 0; q0, 0 => q1, 1; q0, 1 => q0, 0; END TABLE; END; -- Standard inputs eines Automaten -- Enable ist weggelassen (optional) 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 23 AHDL Style Guide Formatierung (groß schreiben): Alle Schlüsselworte, Konstanten, Namen von Devices und Primitivs Zwischenräume ("space") Kein extra Leerzeichen vor (;), (,) nach und vor öffnenden bzw. schließenden Klammern bzw. (") oder (%) Benutzung von TABs um Tabellen und (:) auszurichten Leerzeichen vor und nach Operatoren und Komparatoren (aber nicht nach (!)) Kommentare Nur sinnvolle (nicht triviale wie: q = 1; -- load q with 0) Kommentar direkt zum Header eines SUBDESIGNs und z.b. zur Erklärung von Konstanten, gerufenen Routinen,... Namensgebung -> sinnvoll, d.h. leicht erkennbar Statt z.b. Richtung: aufwärts oder abwärts Active low: statt write_neg: /write Unterstrich um Wörter in symbolischen Anteil und einfachen Namen zu trennen, z.b. reg_load statt regload,... Keine sinnlosen Abkürzungen wie c statt clr oder clear Zahlen durch Konstanten mit Namen von erkennbarer Bedeutung ersetzen Gliederung durch Einrücken (gleichrangige Statements <-> gleiche Einrückung) 22.01.200 Hartmut Gemmeke, WS2003/200, Einführung in die Elektronik, Vorlesung 19 2