Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| dtpr_new_module_howto [2023/04/02 17:27] – created beckmanf | dtpr_new_module_howto [2023/04/02 23:50] (current) – [How to setup a new project] pinplanner beckmanf | ||
|---|---|---|---|
| Line 5: | Line 5: | ||
| === Funktion der Beispielschaltung === | === Funktion der Beispielschaltung === | ||
| - | Ein Modul " | + | {{:: |
| + | |||
| + | Ein Modul " | ||
| === 1. Partitionierung in Module === | === 1. Partitionierung in Module === | ||
| - | Die Schaltung wird in einzelne Teilschaltungen aufgeteilt. Es gibt immer ein " | + | Die Schaltung wird in einzelne Teilschaltungen aufgeteilt. Es gibt immer ein " |
| - | * Toplevelmodul: de1_and5 | + | Neben dem Toplevelmodul |
| - | * normales | + | |
| - | Das Toplevelmodul soll den Namen " | + | === 2. Erstellen der VHDL Dateien === |
| - | + | ||
| - | === 2. VHDL Dateien === | + | |
| Jedes Schaltungsmodul kommt in eine eigene VHDL Datei. Das Toplevelmodul repräsentiert die oberste Hierarchie in der Schaltung und hat als Ports die Pins des FPGAs, also bei uns die Schalter SWx und die Leuchtdioden LEDRx. | Jedes Schaltungsmodul kommt in eine eigene VHDL Datei. Das Toplevelmodul repräsentiert die oberste Hierarchie in der Schaltung und hat als Ports die Pins des FPGAs, also bei uns die Schalter SWx und die Leuchtdioden LEDRx. | ||
| - | * Für das Modul and5 wird eine VHDL Datei "and5_rtl.vhd" angelegt. | + | * Für das Modul myand5 |
| - | * Für das Toplevelmodul de1_and5 wird eine VHDL Datei " | + | * Für das Toplevelmodul de1_and5 wird eine VHDL Datei "de1_and5_rtl.vhd" |
| + | |||
| + | Der Dateiname der VHDL Datei eines normalen Moduls hat die Form " | ||
| + | |||
| + | Die VHDL Dateien befinden sich alle in dem Verzeichnis " | ||
| + | |||
| + | < | ||
| + | cd ~/ | ||
| + | cd src | ||
| + | cp cntones_rtl.vhd myand5_rtl.vhd | ||
| + | cp de1_ledcntsw_rtl.vhd de1_and5_rtl.vhd | ||
| + | </ | ||
| + | |||
| + | Danach kann man die VHDL Dateien mit einem Editor der Wahl an das Projekt anpassen. Zunächst sollten minimale Dateien nur mit einer Entity und einer leeren Architecture erstellt werden. Die Datei " | ||
| + | |||
| + | <file vhdl myand5_rtl.vhd> | ||
| + | library ieee; | ||
| + | use ieee.std_logic_1164.all; | ||
| + | |||
| + | entity myand5 is | ||
| + | port ( x_i : in std_ulogic_vector(4 downto 0); | ||
| + | | ||
| + | end entity myand5; | ||
| + | |||
| + | architecture rtl of myand5 is | ||
| + | begin | ||
| + | end architecture rtl; | ||
| + | </ | ||
| + | |||
| + | Die Datei hat schon eine korrekte entity mit den richtigen Ports, aber eine leere Architecture. Im Beispiel hier sind die fünf Eingänge des Moduls " | ||
| + | |||
| + | Entsprechend wird die Toplevel VHDL Datei erstellt. Die Portnamen vom Toplevelmodul sind Namen, die auf dem Altera DE1 Modul eine Bedeutung haben. In diesem Beispiel steht der Port " | ||
| + | |||
| + | <file vhdl de1_and5_rtl.vhd> | ||
| + | library ieee; | ||
| + | use ieee.std_logic_1164.all; | ||
| + | |||
| + | entity | ||
| + | port ( SW : in | ||
| + | LEDR : out std_ulogic_vector(1 downto 0)); | ||
| + | end entity de1_and5; | ||
| + | |||
| + | architecture rtl of de1_and5 is | ||
| + | begin | ||
| + | end architecture rtl; | ||
| + | </ | ||
| + | |||
| + | === 3. Erstellen des Syntheseprojektes === | ||
| + | |||
| + | Nachdem die VHDL Dateien erstellt wurden, kann man den Ordner für das Syntheseprojekt im Ordner " | ||
| + | |||
| + | < | ||
| + | cd ~/ | ||
| + | cd pnr | ||
| + | cp -R de1_ledcntsw de1_and5 | ||
| + | cd de1_and5 | ||
| + | </ | ||
| + | |||
| + | Das Verzeichnis " | ||
| + | |||
| + | < | ||
| + | caeuser@CAE-Tools-OS: | ||
| + | total 16 | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x 19 caeuser users 4096 Apr 2 22:51 .. | ||
| + | -rw-r--r-- | ||
| + | -rw-r--r-- | ||
| + | caeuser@CAE-Tools-OS: | ||
| + | </ | ||
| + | |||
| + | Die Pinkonfigurationsdatei muss umbenannt werden in " | ||
| + | |||
| + | < | ||
| + | mv de1_ledcntsw_pins.tcl de1_and5_pins.tcl | ||
| + | </ | ||
| + | |||
| + | In der Pinkonfigurationsdatei wird jedem Portnamen des Toplevelmoduls ein Pin auf dem FPGA zugeordnet. Es müssen genau die Ports aus dem Toplevelmodul aufgeführt werden, d.h. es dürfen auch nicht mehr Pins enthalten sein. In diesem Beispiel müssen einige Pindefinitionen gelöscht werden. Die Pinkonfigurationsdatei muss danach so ausssehen: | ||
| + | |||
| + | <file tcl de1_and5_pins.tcl> | ||
| + | # Pin Configuration | ||
| + | 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 | ||
| + | set_location_assignment PIN_M1 | ||
| + | set_location_assignment PIN_L2 | ||
| + | set_location_assignment PIN_R20 -to LEDR[0] | ||
| + | set_location_assignment PIN_R19 -to LEDR[1] | ||
| + | </ | ||
| + | |||
| + | Im Makefile muss die Variable PROJECT auf den Namen des Toplevelmoduls gesetzt werden und alle VHDL Dateien, die zum Projekt gehören müssen unter der Variable SOURCE_FILES aufgeführt werden. Nach den Anpassungen muss das Makefile so aussehen: | ||
| + | |||
| + | <file makefile makefile> | ||
| + | # The PROJECT variable must match the | ||
| + | # toplevel VHDL entity name | ||
| + | # and should match the directory name in the pnr directory | ||
| + | |||
| + | PROJECT = de1_and5 | ||
| + | |||
| + | SOURCE_FILES = \ | ||
| + | ../ | ||
| + | ../ | ||
| + | |||
| + | include ../ | ||
| + | </ | ||
| + | |||
| + | === 4. Testen des Syntheseprojektes === | ||
| + | |||
| + | Jetzt muss man Testen ob die Konfiguration des Syntheseprojektes funktioniert hat. Dazu geht man in Projektordner im Verzeichnis | ||
| + | |||
| + | < | ||
| + | cd ~/ | ||
| + | cd pnr | ||
| + | make quartus | ||
| + | </ | ||
| + | |||
| + | Mit "make quartus" | ||
| + | |||
| + | === 5. Testen der Pinkonfiguration === | ||
| + | |||
| + | In der Quartus GUI kann man jetzt über " | ||
| + | |||
| + | ==== Mögliche Fehler ==== | ||
| + | |||
| + | === Nicht existierende VHDL Dateien in SOURCE_FILES === | ||
| + | Der Schritt "make quartus" | ||
| + | |||
| + | <file makefile makefile_NON_EXISTING_VHD_FILE> | ||
| + | # The PROJECT variable must match the | ||
| + | # toplevel VHDL entity name | ||
| + | # and should match the directory name in the pnr directory | ||
| + | |||
| + | PROJECT = de1_and5 | ||
| + | |||
| + | SOURCE_FILES = \ | ||
| + | ../ | ||
| + | ../ | ||
| + | |||
| + | include ../ | ||
| + | </ | ||
| + | |||
| + | Dann führt das zu: | ||
| + | |||
| + | < | ||
| + | caeuser@CAE-Tools-OS: | ||
| + | make: *** No rule to make target ' | ||
| + | caeuser@CAE-Tools-OS: | ||
| + | </ | ||
| + | |||
| + | === PROJECT und der Name der Pinkonfigurationsdatei passen nicht zusammen === | ||
| + | |||
| + | Der erwartete Name der Pinkonfigurationsdatei ist " | ||
| + | |||
| + | < | ||
| + | caeuser@CAE-Tools-OS: | ||
| + | make: *** No rule to make target ' | ||
| + | </ | ||
| + | |||
| + | === Entity im Toplevelmodul hat anderen Namen als PROJECT === | ||
| + | |||
| + | Wenn der Name der Entity im Toplevelmodul nicht gleich PROJECT (hier " | ||
| + | |||
| + | < | ||
| + | Error (12007): Top-level design entity " | ||
| + | Error: Quartus II 32-bit Analysis & Synthesis was unsuccessful. 1 error, 2 warnings | ||
| + | Error: Peak virtual memory: 358 megabytes | ||
| + | Error: Processing ended: Sun Apr 2 23:29:52 2023 | ||
| + | Error: Elapsed time: 00:00:01 | ||
| + | Error: Total CPU time (on all processors): | ||
| + | Error (293001): Quartus II Full Compilation was unsuccessful. 3 errors, 2 warnings | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| - | Der Modulname wird der Entityname in der VHDL Datei. | ||