|
Als nächster Schritt erfolgt nun die Umsetzung des am Papier entworfenen Designs (hier für die DCF-Uhr) in eine für das CPLD verständliche Sprache. Hierfür gibt es mehrere Möglichkeiten. Eine Möglichkeit wäre die Eingabe in Form eines Schaltplans. Diese Methode wird aber selten verwendet, da sie sehr zeitintensiv ist. Eine andere Methode ist die Verwendung einer so genanten "Hardware-Beschreibungssprache" (engl. HDL für Hardware Description Language). Da hier ein CPLD des Herstellers Altera verwendet wird liegt es nahe die von Altera entwickelte Variante AHDL zu verwenden. Weiters ist eine Entwicklungsumgebung notwendig. Hier fiel die Wahl auf das von Altera entwickelte Entwicklungssystem "Quartus" (Version II 5.0 Web-Edition), welches kostenlos vom Internet unter http://www.altera.com gedownloadet werden kann. Nach der Installation dieses Programms ist eine kostenlose Lizenz notwendig. (Durch umgehen dieser Lizenz kann zwar ein Design erstellt und kompiliert werden, es ist aber nicht möglich dieses Design in ein CPLD zu programmieren)
Die nun folgenden Schritte sollen zeigen, wie man ein neues Projekt (mit Quartus) erstellt, welche Einstellungen notwendig sind, wie man das im Abschnitt 4 erstellte Design in AHDL beschreibt, usw. Zu diesen Schritten existiert in der Online-Hilfe ein sehr gutes Tutorial (allerdings nur in englischer Sprache)
Quartus starten. Nach einer Weile erscheint der Startbildschirm (nach Bild 5.1)
Durch anklicken von "File" und "New Project Wizard…" wird ein Dialog zur Erstellung eines neues Projektes gestartet. Es erfolgt zunächst eine Einführung über folgenden durch zu führenden Schritte (Bild 5.2)
Taste "Next >"
Hier erfolgt die Auswahl des Projekt-Ordners, des Projekt-Namens und des Namens des Top-Level-Designs.
Anmerkungen: Für den Projekt-Namen und für den Namen des Top-Level-Designs sollten "sprechende" Namen verwendet, so dass man schon an diesen Namen erkennt worum es bei diesem Projekt geht. Für beide kann durchaus, so wie hier, der gleiche Name gewählt werden.
Taste "Next >"
Hier können schon vorhanden Design-Files in das Projekt eingebunden werden. Bei diesem Projekt gehen wir davon aus, dass noch keine Design-Files vorhanden sind. Die Eingabefelder bleiben daher leer.
Taste "Next >"
Nun wird das CPLD ausgewählt. Wir verwenden hier ein Mitglied der MAX7000S-Familie (1). Mit dem Filter (2) kann die Suche nach dem verwendeten Typ erleichtert werden. Da wir hier den Typ EPM7128SLC84-15 verwenden wählen wir diesen auch aus (3). Siehe auch Schaltungsbeschreibung und Stückliste.
Taste "Next >"
Hier können weitere (spezielle) Werkzeuge ausgewählt werden. Wir benötigen hier keine.
Taste "Next >"
Abschließend erfolgt eine Zusammenfassung über die gewählten Einstellungen.
Taste "Finish"
Bild 5.8. zeigt wieder den Arbeitsbereich der Entwicklungsumgebung. Im Gegensatz zum Startbild (Bild 5.1) zeigt dieses nun ganz oben den Projekt-Ordner, den Projektnamen und den Namen des Top-Level-Designs an (1) und im Abschnitt "Project Navigator" befindet sich das gewählte CPLD (hier: EPM7128SLC84-15) und der Name des Top-Level-Design (hier: dcf) (2). Nun folgt die Eingabe des Designs in der Sprache AHDL.
Durch anklicken von "File" und "New" kann neues Design-File dem Projekt hinzugefügt werden. Bild 5.9. zeigt eine Liste mit den möglichen Design-Arten. Wir wollen unser Design in AHDL erstellen und wählen daher "AHDL File" aus (1). Anschließend "OK" (2).
Bild 5.10 zeigt nun den "neuen" Arbeitsbereich. Im neuen Fenster erfolgt nun die Eingabe der Code-Zeilen.
Da wir unser Design in AHDL beschreiben wollen, zunächst den grundlegenden Aufbau eines AHDL-Design-Files.
Im Abscnitt Download befindet sich die AHDL-Datei (dcf.tdf). Dieses sollte nun mit der Entwicklungsumgebung (Quartus) geöffnet werden. Man erkennt den soeben erwähnten Aufbau.
Anmerkungen und Erläuterungen zum Design-File:
90 iZAEHLER_SEK_Z : lpm_counter WITH
91 (
92 LPM_WIDTH = 3,
93 LPM_DIRECTION = "UP",
94 LPM_MODULUS = 6
95 );
CASE Name der Zustandsmaschine IS
WHEN Zustand 0 =>
Anweisung1;
Anweisung2;
…
Anweisungn;
Übergang zum nächsten Zustand;
WHEN Zustand 1 =>
Anweisung1;
Anweisung2;
…
Anweisungn;
Übergang zum nächsten Zustand;
WHEN Zustand 2 =>
…
WHEN Zustand n =>
END CASE;
Das folgende Bild zeigt einen Ausschnitt des soeben beschriebenen AHDL-Files
Man erkennt sehr gut die farblichen Unterschiede, was die Arbeit und die Fehlersuche erheblich erleichtert. Die folgende Tabelle zeigt einen Ausschnitt
Nach anklicken von "Assignments" und "Timing Settings…" gelangt man zum folgenden Bild (Bild 5.12).
Unter "Category" den Eintrag "Timing Requirements & Options" auswählen (1)
Unter "Clock Settings" die Option "Settings for individual clock signals" auswählen (2) und die Taste "Clocks…" anklicken.
Taste "New…"
Clock settings name: ein beliebiger Name
Applies to node: clock_DCF (Wichtig: Dieser Name muss mit dem Systemtakt im
AHDL-File übereinstimmen!)
Required fmax: Hier gibt man die Taktfrequenz mit der richtigen Einheit an. Hier, bei
diesem Projekt handelt es sich um einen 32768-Hz-Takt
Duty cycle (%): Hier lässt man den Standardwert von 50.
Taste "OK"
Taste "OK" (2 mal)
Nun erfolgt zum ersten Mal eine Kompilierung des Designs. Dies ist jetzt schon notwendig, damit später (im Schritt 5) allen Ein- und Ausgängen die richtigen Pinnummern zugewiesen werden können. Weiters wir beim Kompilieren (wie auch bei anderen Programmiersprachen) das Design auf syntaktische Fehler überprüft.
Eine Kompilierung wird mit dem violetten Dreieck in der Symbolleiste (siehe Bild 5.16) gestartet.
Bild 5.17. zeigt die Entwicklungsumgebung während der Kompilierung. Der Bereich "Status" (1) zeigt den Fortschritt an und der Bereich 2 gibt Auskunft was gemacht wurde. Hier erscheinen auch Warnungen und (syntaktische) Fehler. Wird ein solcher Fehler von der Entwicklungsumgebung entdeckt, so wird die Kompilierung abgebrochen. Der Fehler muss natürlich gefunden und behoben werden, gefolgt von einer neuen Kompilierung. Dieser Vorgang muss natürlich so oft wiederholt werden bis keine Fehler mehr auftreten. Warnungen können natürlich schon auftreten. Diese sollten aber nie völlig ignoriert werden. Es sollte immer überprüft werden, ob diese Warnung "gewollt" ist, oder ob beim Designentwurf etwas übersehen wurde. Was ich damit meine, wird hoffentlich gleich klar.
Wurde die Kompilierung erfolgreich durchgeführt, so erscheint der folgende Hinweis (Bild 5.18).
Hier, bei diesem Projekt trat beim Kompilieren eine Warnung auf. Bild 5.19. gibt Auskunft über diese Warnung(en) (1). Weiters eine kleine Statistik über die Anzahl der benötigten Makrozellen und Pins (2).
Da beim Kompilieren eine Warnung aufgetreten ist, sollte diese nun überprüft werden. Bei den Warnungen handelt es sich hier um den Hinweis, dass ein so genannter "Ripple Counter" erzeugt wurde. Dies wurde aber beabsichtigt, da wir ja die freilaufende Uhr tatsächlich als "Ripple Counter" aufgebaut haben. Diese Warnung kann also ignoriert werden.
Nach erfolgreicher erster Kompilierung können nun die Pinnummern den Ein- und Ausgängen zugeordnet werden. Für diesen Schritt gibt es in Quartus mehrere Möglichkeiten. Den "Pin-Planer" möchte ich hier vorstellen. Dieser ist gerade bei "kleineren" CPLDs (so wie hier) sehr übersichtlich.
Nach anklicken von "Assignments" und "Pin Planer" gelangt man zum folgenden Bild (Bild 5.20).
Zur besseren Übersicht sollte man hier in den "Vollbildmodus" übergehen (1)
Vorgehensweise:
Sind alle Ein- und Ausgänge zugeordnet, so sollte dies dem Bild 5.22 entsprechen.
Nun sollte wieder in die "gewohnte Ansicht" zurückgekehrt werden (1)
Zum Abschluss muss die Kompilierung wiederholt werden. (gemäß Schritt 4)