This is an old revision of the document!
!!!!!!!!!!!BAUSTELLE!!!!!!!!!!!!!!
Digitaltechnik Praktikum Versuch 2 - Einführung Quartus
In diesem Versuch lernen Sie die FPGA Synthesesoftware Quartus von Altera kennen. Das Ziel ist es das FPGA so zu konfigurieren, dass mit Hilfe der Schalter SW die roten Leuchtdioden LEDR ein- und ausgeschaltet werden können.
Vorbereitung
Im User Manual für das Altera DE1 Board finden Sie auf den Seiten 24 bis 27 eine Beschreibung der LEDs, der Schalter SW und der Taster KEYS. Im Schaltplan des DE1 Boards können Sie nachschauen an welchen Pins die LEDs und die Schalter angeschlossen sind. Diese Anschlüsse sind auch im Handbuch in Tabellen 4.1 bis 4.3 angegeben. Beispielsweise ist LEDR0 an Pin R20 des FPGA angeschlossen. Auf der https://www2.hs-augsburg.de/~beckmanf/restricted/DE1_V.1.0.1_CDROM/CDROM, die zu dem Altera DE1 Board gehört, befindet sich eine Tabelle DE1_pin_assignments.csv, in denen diese Zuordnung von Signalnamen wie LEDR0 zu den Pins des FPGA aufgeführt ist.
Starten eine Shell unter Ubuntu
Starten Sie die Dash Applikation zur Suche von Programmen und geben Sie dort “terminal” ein.
Ziehen Sie das Programm “terminal” nach links in die Startleiste.
Starten Sie dann das Terminal (oder die Shell) durch klicken auf das Terminalsymbol.
Jetzt haben Sie ein geöffnetes Terminalprogramm.
Überblick über einige Unix Shellbefehle
Befehl | Beispiel | Beschreibung |
---|---|---|
ls | ls -la | Anzeige der Dateien im aktuellen Verzeichnis |
pwd | pwd | Anzeige des Pfads vom aktuellen Verzeichnis |
mkdir | mkdir projects | Erzeugen eines neuen Verzeichnisses “projects” |
cd | cd projects | Wechsel in das Verzeichnis “projects” |
cd | cd .. | Wechsel in das höhere Verzeichnis ausgehend vom aktuellen Verzeichnis |
man | man ls | Aufruf des Handbuchs für den Befehl “ls” |
rm | rm hallo.txt | Löschen der Datei “hallo.txt” |
Laden der Designdaten vom git Server
Die Designdaten für das Digitaltechnikpraktikum sind auf dem git Server der Fakultät Elektrotechnik. Der Zugriff erfolgt über das git Programm.
Richten Sie ein Verzeichnis “projects” in Ihrem home directory ein. Das Homedirectory ist “/home/caeuser”. In dieser Anleitung ist das Homeverzeichnis “/home/fritz”, da ich die Anleitung auf meinem Rechner entworfen habe. Wechseln Sie in das Verzeichnis “projects” und laden Sie mit “git” die Designdaten vom git Server.
mkdir projects cd projects git clone https://git.etech.fh-augsburg.de/friedrich.beckmann/digitaltechnikpraktikum.git ls -la
Das sollte dann so aussehen:
Wechseln sie dann in das Verzeichnis “digitaltechnikpraktikum” und dann in das Verzeichnis “src”. Starten Sie dort einen Editor und schauen sich die Datei “ledsw_rtl.vhd” an.
cd digitaltechnikpraktikum cd src ls -la gedit ledsw_rtl.vhd
Die VHDL Datei beschreibt ein Design mit 10 Eingängen “SW” und 10 Ausgängen “LEDR”. In der Architektur werden die Eingänge “SW” auf die Ausgänge “LEDR” geschaltet. Damit sollen die roten LEDs abhängig von den Schaltern “SW” ein- und ausgeschaltet werden.
Synthese mit Altera Quartus - Manuelles Aufsetzen des Projektes
In diesem Versuch lernen Sie drei Varianten zum Aufsetzen eines Quartusprojektes kennen
- Manuelles Aufsetzen eines Quartusprojektes mit Hilfe des Assistenten.
- Aufsetzen und Synthese mit eine tcl Skript.
- Synthese auf Basis von Makefiles
Im ersten Anlauf wird das Projekt manuell mit Hilfe des Assistenten aufgesetzt. Im Projekt gibt es ein Verzeichnis “pnr”. Diese Name steht für “Place And Route” und umfasst die Designdaten für die Synthese einer Schaltung für das FPGA. Wechseln Sie in das Verzeichnis “ledsw-manual”.
cd cd projects cd digitaltechnikpraktikum cd pnr cd ledsw-manual
In diesem Verzeichnis befindet sich eine Datei “ledsw_pin_assignments.csv”. Diese Datei enthält die Pinkonfiguration für die Schalter “SW” und die Leuchtdioden “LEDR” Sie können sich die Datei mit
less ledsw_pin_assignments.csv
anschauen. Zum Verlassen von “less” drücken Sie “q”. Starten Sie jetzt die Altera Quartus Software mit “quartus”
quartus
Es erscheint folgendes Fenster.
Drücken Sie “Create a new project”.
Wählen Sie als Projektnamen “ledsw” und als Namen für die Toplevelentity auch “ledsw”. Achten Sie darauf, dass das working directory “digitaltechnikpraktikum/pnr/ledsw-manual” ist. In diesem Verzeichnis werden die (u.a. temporäre) Projektdateien gespeichert.
Im nächsten Schritt müssen dem Projekt die VHDL Dateien hinzugefügt werden. In diesem Projekt gibt es nur die eine Datei “ledsw_rtl.vhd”. Wählen Sie die Datei aus und klicken Sie auf “ADD”.
Danach muss der FPGA Typ auswählt werden, der sich auf der Platine befindet. Wählen Sie als Familie “Cyclone II” und als Baustein “EP2C20F484C7”.
Danach können Sie beim Assistenten immer auf “Weiter” klicken und dann den Assistenten beenden. Das Projekt sollte dann so aussehen:
Starten Sie jetzt die Übersetzung der VHDL Datei mit “Processing → Start Compilation”.
Die Synthese sollte durchlaufen. Allerdings treten zwei wichtige Warnmeldungen auf.
Die eine Meldung sagt aus, dass für Ein- und Ausgänge keine Pins auf dem FPGA festgelegt sind. Die andere Meldung besagt, dass alle ungenutzten Pins vom FPGA als “Output driving Ground” geschaltet sind. Das ist nicht gut, wenn an diesem Pin z.B. ein Schalter angeschlossen ist, der auf VDD geschaltet ist. Dann gibt es einen Kurzschluss.
Man kann die nicht angeschlossenen Pins auch im “Pin Planner” anschauen.
Dort sieht man, dass für die Anschlüsse “LEDR” und “SW” noch keine Pinfestlegung erfolgt ist. Das “Location” Feld ist noch leer.
Um die Pins festzulegen wird jetzt mit “Assignments → Import Assignments” die Datei “ledsw_pin_assignments.csv” eingelesen.
Wenn man dann den “Pin Planner” nochmal öffnet, sieht man die Zuordnung der Ein- und Ausgänge zu den Pins auf dem FPGA.
Jetzt muss noch festgelegt werden, dass unbenutzte Pins als Eingänge geschaltet werden. Wählen Sie dazu “Assignments → Device”.
und dann “Device and Pin Options”
Wählen Sie dann bei “Unused Pins” die Option “As input tri-stated”.
Sie müssen dann die Synthese nochmal neu starten mit “Processing → Start Compilation”. Nach erfolgreicher Synthese können Sie den “Programmer” starten mit “Tools → Programmer”.
Wenn Sie kein Board angeschlossen haben, dann sieht das Fenster so aus:
Synthese mit Altera Quartus - Projekt aufsetzen mit Skript
Alternativ zum Aufsetzen mit der interaktiven GUI kann man das Projekt auch mit einem Skript konfigurieren. Der Vorteil dieses Verfahrens ist, dass es immer klar ist wie das Projekt konfiguriert wurden und man kann zu jedem Zeitpunkt auf Basis der VHDL Dateien und der Skripte komplett neu aufsetzen. Jede einigermaßen professionelle Entwicklung nutzt deshalb Skripten als Basis.
Eine häufig verwendete Skriptsprache ist tcl. Auch Altera verwendet tcl um die Verwendung der GUI zu vermeiden. Wechseln Sie in das Verzeichnis ledsw-scripted.
cd cd digitaltechnikpraktikum cd pnr cd ledsw-scripted
In diesem Verzeichnis befinden sich zwei tcl Skripten. Das Skript “create_quartus_project_settings.tcl” und das Skript “quartus_project_flow.tcl”. Das erste Skript dient zum Konfigurieren und Einrichten des Projektes.
## ---------------------------------------------------------------------------- ## Script : create_quartus_project_settings.tcl ## ---------------------------------------------------------------------------- # Load Quartus II Tcl Project package package require ::quartus::project # ---------------------------------------------------------------------------- # Create project # ---------------------------------------------------------------------------- project_new ledsw -overwrite # ---------------------------------------------------------------------------- # Assign family, device, and top-level file # ---------------------------------------------------------------------------- set_global_assignment -name FAMILY "Cyclone II" set_global_assignment -name DEVICE EP2C20F484C7 # ---------------------------------------------------------------------------- # Default settings # ---------------------------------------------------------------------------- set_global_assignment -name USE_CONFIGURATION_DEVICE ON set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" set_global_assignment -name VHDL_INPUT_VERSION VHDL_2008 # ---------------------------------------------------------------------------- # Design files # ---------------------------------------------------------------------------- set_global_assignment -name VHDL_FILE ../../src/ledsw_rtl.vhd # ---------------------------------------------------------------------------- # Pin Assignments # ---------------------------------------------------------------------------- # set_location_assignment PIN_L1 -to CLOCK_50 set_location_assignment PIN_L22 -to SW[0] set_location_assignment PIN_L21 -to SW[1] set_location_assignment PIN_M22 -to SW[2] set_location_assignment PIN_V12 -to SW[3] set_location_assignment PIN_W12 -to SW[4] set_location_assignment PIN_U12 -to SW[5] set_location_assignment PIN_U11 -to SW[6] set_location_assignment PIN_M2 -to SW[7] set_location_assignment PIN_M1 -to SW[8] set_location_assignment PIN_L2 -to SW[9] set_location_assignment PIN_R20 -to LEDR[0] set_location_assignment PIN_R19 -to LEDR[1] set_location_assignment PIN_U19 -to LEDR[2] set_location_assignment PIN_Y19 -to LEDR[3] set_location_assignment PIN_T18 -to LEDR[4] set_location_assignment PIN_V19 -to LEDR[5] set_location_assignment PIN_Y18 -to LEDR[6] set_location_assignment PIN_U18 -to LEDR[7] set_location_assignment PIN_R18 -to LEDR[8] set_location_assignment PIN_R17 -to LEDR[9] # ---------------------------------------------------------------------------- # Close project # ---------------------------------------------------------------------------- project_close
Man sieht, dass die Schritte
- Konfigurieren des Projektnamens
- Hinzufügen der VHDL Dateien
- Konfigurieren der Pins
im Skript enthalten sind. Das Skript wird ausgeführt mit:
quartus_sh -t create_quartus_project_settings.tcl
Wenn dieser Schritt beendet ist, ist das Projekt konfiguriert. Sie können das Projekt mit der Quartus GUI auch anschauen.
quartus ledsw.qpf
Das zweite Skript führt die eigentliche Synthese durch.
## ---------------------------------------------------------------------------- ## Script : quartus_project_flow.tcl ## ---------------------------------------------------------------------------- # Load Quartus II Tcl Project package package require ::quartus::project # ---------------------------------------------------------------------------- # Open project # ---------------------------------------------------------------------------- project_open ledsw # ---------------------------------------------------------------------------- # Run specified design flow by parameter -process # ---------------------------------------------------------------------------- load_package flow execute_flow -compile # ---------------------------------------------------------------------------- # Write Reports # ---------------------------------------------------------------------------- load_package report load_report first write_report_panel -file flowsummary.log "Flow Summary" # ---------------------------------------------------------------------------- # Close project # ---------------------------------------------------------------------------- project_close
Starten Sie das Skript mit
quartus_sh -t quartus_project_flow.tcl
Danach können Sie das Board programmieren mit
quartus_pgm -c USB-Blaster --mode jtag --operation="p;ledsw.sof"