[[dtpr_new_module_howto]]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dtpr_new_module_howto [2023/04/02 23:07]
beckmanf [How to setup a new project]
dtpr_new_module_howto [2023/04/02 23:50] (current)
beckmanf [How to setup a new project] pinplanner
Line 5: Line 5:
 === Funktion der Beispielschaltung === === Funktion der Beispielschaltung ===
  
-Ein Modul "and5" soll ein UND Gatter mit fĂŒnf EingĂ€ngen und einem Ausgang enthalten. Dieses "​and5"​ Modul soll zweimal instantiiert werden. Die EingĂ€nge von and5_i0 werden mit den Schalten SW0 bis SW4 verbunden. Die EingĂ€nge des Moduls and5_i1 werden mit den Schaltern SW5 bis SW9 verbunden. Der Ausgang von and5_i0 wird mit der roten Leuchtdiode LEDR0 verbunden. Der Ausgang von and5_i1 wird mit der roten Leuchtdiode LEDR1 verbunden. Wenn die Schalter SW0 bis SW1 alle auf "​on"​ geschaltet sind, dann soll die rote Leuchtdiode LED0 leuchten. Entsprechend die LED1. Die Verbindung der beiden UND Gatter mit den Schaltern und den roten Leuchtdioden wird auf dem Toplevelmodul de1_and5 gemacht.+{{::howto-and5.png}}
  
-=== 1Partitionierung in Module ​===+Ein Modul "​and5"​ soll ein UND Gatter mit fĂŒnf EingĂ€ngen und einem Ausgang beschreibenDieses "​myand5"​ Modul soll zweimal instantiiert werden. Die EingĂ€nge von myand5_i0 werden mit den Schaltern SW0 bis SW4 verbunden. Die EingĂ€nge des Moduls myand5_i1 werden mit den Schaltern SW5 bis SW9 verbunden. Der Ausgang von myand5_i0 wird mit der roten Leuchtdiode LEDR0 verbunden. Der Ausgang von myand5_i1 wird mit der roten Leuchtdiode LEDR1 verbunden. Wenn die Schalter SW0 bis SW4 alle auf "​on"​ geschaltet sind, dann soll die rote Leuchtdiode LED0 leuchten. Entsprechend die LED1. Die Instantiierung der beiden "​myand5" ​Module ​und die Verbindung der beiden UND Gatter mit den Schaltern und den roten Leuchtdioden wird auf dem Toplevelmodul de1_and5 gemacht.
  
-Die Schaltung wird in einzelne Teilschaltungen aufgeteilt. Es gibt immer ein "​Toplevelmodul",​ das die oberste Schaltungshierarchie reprĂ€sentiert. Dieses Modul hat als Ein- und AusgĂ€nge die Pins des FPGAs. In diesem Beispiel gibt zwei Module+=== 1. Partitionierung ​in Module ​===
  
-  * Toplevelmodul: de1_and5 +Die Schaltung wird in einzelne Teilschaltungen aufgeteilt. Es gibt immer ein "Toplevelmodul", das die oberste Schaltungshierarchie reprĂ€sentiert. Dieses ​Modul hat als Ein- und AusgĂ€nge die Pins des FPGAs. In diesem Beispiel ist das das Modul "​de1_and5"​. Der Name des Toplevelmoduls soll immer die Form de1_XXXX haben. Damit wird schon am Namen deutlich, dass es ein Toplevelmodul ist. Das Toplevelmodul hat die EingĂ€nge SW[9..0] und die AusgĂ€nge LEDR[1..0].
-  * normales ​Modul: and5+
  
-Der Name des Toplevelmoduls soll die Form de1_XXXX habenDamit wird schon am Namen deutlich, dass es ein Toplevelmodul ​ist.+Neben dem Toplevelmodul gibt es in diesem Beispiel ein weiteres Modul "​myand5"​. Das Modul "​myand5"​ hat die Funktion ​des UND Gatters mit fĂŒnf EingĂ€ngen. Das Modul "​myand5"​ hat die EingĂ€nge x_i[4..0] und den Ausgang y_o. In diesem Beispiel gibt es nur das Modul "​myand5"​ neben dem Toplevelmodul ​"​de1_and5"​. In einem Design kann es aber beliebig viele weitere Module geben, die alle miteinander verschaltet werden können.
  
 === 2. Erstellen der VHDL Dateien === === 2. Erstellen der VHDL Dateien ===
Line 20: Line 19:
 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 ​wird eine VHDL Datei "myand5_rtl.vhd" angelegt.
   * FĂŒr das Toplevelmodul de1_and5 wird eine VHDL Datei "​de1_and5_rtl.vhd"​ angelegt.   * FĂŒr das Toplevelmodul de1_and5 wird eine VHDL Datei "​de1_and5_rtl.vhd"​ angelegt.
  
-Der Dateiname der VHDL Datei eines normalen Moduls hat die Form "​MODULNAME_rtl.vhd"​ (hier: ​and5_rtl.vhd). Der Name der VHDL Datei des Toplevelmoduls lautet "​TOPLEVELMODULNAME_rtl.vhd"​ (hier: de1_and5_rtl.vhd).+Der Dateiname der VHDL Datei eines normalen Moduls hat die Form "​MODULNAME_rtl.vhd"​ (hier: ​myand5_rtl.vhd). Der Name der VHDL Datei des Toplevelmoduls lautet "​TOPLEVELMODULNAME_rtl.vhd"​ (hier: de1_and5_rtl.vhd).
  
 Die VHDL Dateien befinden sich alle in dem Verzeichnis "​src"​. ZweckmĂ€ĂŸigerweise kopiert man eine existierende VHDL Datei und benennt sie um. Die VHDL Dateien befinden sich alle in dem Verzeichnis "​src"​. ZweckmĂ€ĂŸigerweise kopiert man eine existierende VHDL Datei und benennt sie um.
Line 30: Line 29:
 cd ~/​projects/​digitaltechnikpraktikum cd ~/​projects/​digitaltechnikpraktikum
 cd src cd src
-cp cntones_rtl.vhd ​and5_rtl.vhd+cp cntones_rtl.vhd ​myand5_rtl.vhd
 cp de1_ledcntsw_rtl.vhd de1_and5_rtl.vhd cp de1_ledcntsw_rtl.vhd de1_and5_rtl.vhd
 </​code>​ </​code>​
  
-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 "and5_rtl.vhd" sollte dann so wie hier aussehen:+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 "myand5_rtl.vhd" sollte dann so wie hier aussehen:
  
-<file vhdl and5_rtl.vhd>+<file vhdl myand5_rtl.vhd>
 library ieee; library ieee;
 use ieee.std_logic_1164.all;​ use ieee.std_logic_1164.all;​
  
-entity ​and5 is +entity ​myand5 ​is 
 port ( x_i  : in  std_ulogic_vector(4 downto 0); port ( x_i  : in  std_ulogic_vector(4 downto 0);
        ​y_o ​ : out std_ulogic);  ​        ​y_o ​ : out std_ulogic);  ​
-end entity ​and5;+end entity ​myand5;
  
-architecture rtl of and5 is +architecture rtl of myand5 ​is 
 begin begin
 end architecture rtl; end architecture rtl;
 </​file>​ </​file>​
  
-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 "and5" als Typ "​std_ulogic_vector"​ mit einer ArraylĂ€nge von 5 definiert. Der Ausgang ist ein einzelner Ausgang vom Typ "​std_ulogic"​. Der Name des Eingangs ist "​x_i"​ und der Name des Ausgangs is "​y_o"​. Der Name "XXX_i" deutet schon im Namen auf einen Eingang hin. Beim Namen des Ausgangs "XXX_o" deutet "​_o"​ darauf hin, dass es sich um einen Ausgang handelt. Der Entityname ist der Name des Moduls ​hier "and5"​. ​+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 "myand5" als Typ "​std_ulogic_vector"​ mit einer ArraylĂ€nge von 5 definiert. Der Ausgang ist ein einzelner Ausgang vom Typ "​std_ulogic"​. Der Name des Eingangs ist "​x_i"​ und der Name des Ausgangs is "​y_o"​. Der Name "x_i" deutet schon im Namen auf einen Eingang hin. Beim Namen des Ausgangs "y_o" deutet "​_o"​ darauf hin, dass es sich um einen Ausgang handelt. Diese Namenskonvention mit "​_i"​ und "​_o"​ sollte bei allen Module eingehalten werdne. Der Entityname ist der Name des Modulshier "myand5"​. ​
  
 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 "​SW"​ fĂŒr die Schalter auf dem Board ("​Switches"​). Der Port "​LEDR"​ steht fĂŒr die roten Leuchtdioden,​ die direkt ĂŒber den Schaltern angeordnet sind. Von den roten Leuchtdioden werden in diesem Projekt nur zwei verwendet. ​ 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 "​SW"​ fĂŒr die Schalter auf dem Board ("​Switches"​). Der Port "​LEDR"​ steht fĂŒr die roten Leuchtdioden,​ die direkt ĂŒber den Schaltern angeordnet sind. Von den roten Leuchtdioden werden in diesem Projekt nur zwei verwendet. ​
Line 126: Line 125:
 SOURCE_FILES = \ SOURCE_FILES = \
 ../​../​src/​de1_and5_rtl.vhd \ ../​../​src/​de1_and5_rtl.vhd \
-../../src/and5_rtl.vhd+../../src/myand5_rtl.vhd
  
 include ../makefile include ../makefile
Line 142: Line 141:
  
 Mit "make quartus"​ wird das Syntheseprojekt angelegt und die GUI der Quartussoftware geöffnet. Wenn sich die GUI öffnet, ist es schonmal nicht schlecht. Danach kann man die Synthese starten. Wenn hier noch Syntaxfehler in den VHDL Dateien sind oder noch VHDL Dateien fehlen, dann fĂ€llt es hier auf. Mit "make quartus"​ wird das Syntheseprojekt angelegt und die GUI der Quartussoftware geöffnet. Wenn sich die GUI öffnet, ist es schonmal nicht schlecht. Danach kann man die Synthese starten. Wenn hier noch Syntaxfehler in den VHDL Dateien sind oder noch VHDL Dateien fehlen, dann fĂ€llt es hier auf.
 +
 +=== 5. Testen der Pinkonfiguration ===
 +
 +In der Quartus GUI kann man jetzt ĂŒber "​Assignments->​Pin Planner"​ den Pinplanner aufrufen und nachschauen ob fĂŒr alle Ports des Toplevelmoduls auch ein Pin auf dem FPGA eingetragen ist.
  
 ==== Mögliche Fehler ==== ==== Mögliche Fehler ====
  • dtpr_new_module_howto.1680469657.txt.gz
  • Last modified: 2023/04/02 23:07
  • by beckmanf