Elektronik-Projekt: DCF-Uhr mit CPLD


zurück zu Elektronik, Homepage

DCF-Uhr im Betrieb

5. Umsetzung des Designs in AHDL

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)

Schritt 1: Ein neues Projekt in Quartus anlegen

Quartus starten. Nach einer Weile erscheint der Startbildschirm (nach Bild 5.1)

Startbild der Entwicklungssoftware Quartus (hier II Version 5.0)

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)

Dialog zur Erstellung eines neuen Projekts (Einführung)

Taste "Next >"

Dialog zur Erstellung eines neuen Projekts (Schritt 1)

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 >"

Dialog zur Erstellung eines neuen Projekts (Schritt 2)

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 >"

Dialog zur Erstellung eines neuen Projekts (Schritt 3)

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 >"

Dialog zur Erstellung eines neuen Projekts (Schritt 4)

Hier können weitere (spezielle) Werkzeuge ausgewählt werden. Wir benötigen hier keine.

Taste "Next >"

Dialog zur Erstellung eines neuen Projekts (Schritt 5, Zusammenfassung)

Abschließend erfolgt eine Zusammenfassung über die gewählten Einstellungen.

Taste "Finish"

Arbeitsbereich nach dem Erstellen eines neuen Projekts

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.

Schritt 2: Eingabe des Designs in 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).

Design-File-Auswahl

Bild 5.10 zeigt nun den "neuen" Arbeitsbereich. Im neuen Fenster erfolgt nun die Eingabe der Code-Zeilen.

Arbeitsbereich

Da wir unser Design in AHDL beschreiben wollen, zunächst den grundlegenden Aufbau eines AHDL-Design-Files.

AHDL-Aufbau

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:

Das folgende Bild zeigt einen Ausschnitt des soeben beschriebenen AHDL-Files

AHDL-Design-File (Ausschnitt)

Man erkennt sehr gut die farblichen Unterschiede, was die Arbeit und die Fehlersuche erheblich erleichtert. Die folgende Tabelle zeigt einen Ausschnitt

Schritt 3: Systemtakt definieren

Nach anklicken von "Assignments" und "Timing Settings…" gelangt man zum folgenden Bild (Bild 5.12).

Timing Requirements & Options

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.

Eingabebox "Clocks"

Taste "New…"

Eingabebox "New Clocks Settings"

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"

Eingabebox "Clocks" mit ausgewähltem Systemtakt

Taste "OK" (2 mal)

Schritt 4: Erste Kompilierung

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.

Kompilierung (Start)

Eine Kompilierung wird mit dem violetten Dreieck in der Symbolleiste (siehe Bild 5.16) gestartet.

Kompilierung

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).

Box "Kompilierung erfolgreich"

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).

Kompilierung (Endergebnis)

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.

Schritt 5: Pinnummern zuweisen

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).

Pin Planer

Zur besseren Übersicht sollte man hier in den "Vollbildmodus" übergehen (1)

Vorgehensweise:

  1. Aus der Liste "Unassigned Pins" wählt man einen Pin ("Node Name") durch einfaches anklicken aus.
  2. Mit gedrückter Maustaste zieht man diesen nun auf den gewünschten Pin des CPLDs (mittlerer Bildbereich). Der Mauszeiger zeigt an, ob an dieser Stelle ein Pin zugeordnet werden kann.
  3. Maustaste loslassen. In der Liste "Assigned Pins" erscheint nun dieser Ein- oder Ausgang mit der dazu ausgewählten Pinnummer. Zusätzlich wird dieser in der grafischen Ansicht (Bildmitte) durch einen ausgefüllten Kreis dargestellt. (Bild 5.21. zeigt dies für den Ausgang "outANZEIGE_EN" ,Pin 16)
Pin Planer

Sind alle Ein- und Ausgänge zugeordnet, so sollte dies dem Bild 5.22 entsprechen.

Pin Planer

Nun sollte wieder in die "gewohnte Ansicht" zurückgekehrt werden (1)

Schritt 6: Zweite Kompilierung

Zum Abschluss muss die Kompilierung wiederholt werden. (gemäß Schritt 4)

nach oben


zurück zu Elektronik, Homepage

Autor: Buchgeher Stefan
Erstellt: 1. November 2005
Letzte Änderung: