[[dtpr_versuch_5]]

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_versuch_5 [2014/04/14 22:21]
beckmanf [Digitaltechnikpraktikum Versuch 5 - Arithmetische Schaltung] - typos
dtpr_versuch_5 [2021/03/20 08:21] (current)
beckmanf [Additionsschaltung mit VHDL] removed sim
Line 1: Line 1:
-===== Digitaltechnikpraktikum Versuch ​- Arithmetische Schaltung =====+===== Digitaltechnikpraktikum Versuch ​- Arithmetische Schaltung =====
  
 In diesem Versuch In diesem Versuch
Line 14: Line 14:
 ==== Additionsschaltung mit VHDL ==== ==== Additionsschaltung mit VHDL ====
  
-In der Datei [[https://git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​blob/​master/​src/​add4_rtl.vhd|add4_rtl.vhd]] ist eine Schaltung zur Addition von zwei 4 Bit Binärzahlen mit einem 4 Bit Ergebnis in VHDL beschrieben. Die zugehörige Testbench ist [[https://​git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​blob/​master/​src/​t_add4.vhd|t_add4.vhd]].+In der Datei [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​src/​add4_rtl.vhd|add4_rtl.vhd]] ist eine Schaltung zur Addition von zwei 4 Bit Binärzahlen mit einem 4 Bit Ergebnis in VHDL beschrieben. ​
  
-  - Wechseln ​Sie in das Simulationsverzeichnis "​sim/​add4" ​und simulieren Sie die Additionsschaltung+Sie verwenden diese Schaltung um auf dem FPGA zwei Zahlen zu addieren. Die beiden Summanden sollen an den Schaltern SW(3..0) ​und SW(9..6) als Binärzahl vorliegen. Der Zustand der Schalter soll an den roten LEDs angezeigt werden. Gleichzeitig soll ein Summand an HEX0 und der andere Summand an HEX1 als Ziffer dargestellt werden. Das Ergebnis der Addition soll an den grünen LEDs LEDG(3..0) binär und an HEX2 als Ziffer dargestellt werden. Diese Schaltung soll den Namen de1_add4 haben. Es ist auch schon eine unvollständige VHDL Datei [[https://​gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​src/​de1_add4_rtl.vhd|de1_add4_rtl.vhd]] vorhanden, ​die Sie noch ergänzen müssen. Das Syntheseverzeichnis [[https://​gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​tree/​master/​pnr/​de1_add4|pnr/​de1_add4]] ist schon fertig vorbereitet.
  
-Sie verwenden diese Schaltung um auf dem FPGA zwei Zahlen zu addieren. Die beiden Summanden sollen an den Schaltern SW(3..0) und SW(9..6) als Binärzahl vorliegen. Der Zustand der Schalter soll an den roten LEDs angezeigt werden. Gleichzeitig soll ein Summand an HEX0 und der andere Summand an HEX1 als Ziffer dargestellt werden. Das Ergebnis der Addition soll an den grünen LEDs LEDG(3..0) binär und an HEX2 als Ziffer dargestellt werden. Diese Schaltung soll den Namen de1_add4 haben. In der Datei [[https://​git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​blob/​master/​src/​t_de1_add4.vhd|t_de1_add4]] gibt es schon eine fertige Testbench für die Schaltung. Es ist auch schon eine unvollständige VHDL Datei [[https://​git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​blob/​master/​src/​de1_add4_rtl.vhd|de1_add4_rtl.vhd]] vorhanden, die Sie noch ergänzen müssen. Das Simulationsverzeichnis [[https://​git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​tree/​master/​sim/​de1_add4|sim/​de1_add4]] und das Syntheseverzeichnis [[https://git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​tree/​master/​pnr/​de1_add4|pnr/de1_add4]] ist schon fertig vorbereitet.  +  ​Wechseln ​Sie in das Syntheseverzeichnis [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​tree/​master/​pnr/​de1_add4|pnr/​de1_add4]] und starten Sie Quartus mit der grafischen Oberfläche
- +  - Ergänzen Sie den VHDL Code in der Datei [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​src/​de1_add4_rtl.vhd|de1_add4_rtl.vhd]]
-  - Wechseln Sie in das Simulationsverzeichnis [[https://​git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​tree/​master/​sim/​de1_add4|sim/de1_add4]] und starten Sie die Simulation.  +
-  - Ergänzen Sie den VHDL Code in der Datei [[https://git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​blob/​master/​src/​de1_add4_rtl.vhd|de1_add4_rtl.vhd]] ​und überprüfen Sie Ihren Entwurf im Simulator.  +
-  - Wenn im Simulator alles gut aussieht, wechseln Sie in das Syntheseverzeichnis [[https://​git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​tree/​master/​pnr/​de1_add4|pnr/​de1_add4]] und synthetisieren Sie die Schaltung+
   - Laden Sie das Design auf das FPGA und überprüfen Sie dort die Funktion   - Laden Sie das Design auf das FPGA und überprüfen Sie dort die Funktion
 +
  
 ==== Analyse der Additionsschaltung ==== ==== Analyse der Additionsschaltung ====
  
-Jetzt geht es um die Analyse wie die Additonsschaltung intern auf dem FPGA mit den Logikelementen umgesetzt wird. Im [[https://www2.hs-augsburg.de/​~beckmanf/​restricted/​DE1_V.1.0.1_CDROM/​Datasheets/​Cyclone_II/​cyc2_cii5v1_01.pdf|Cyclone II Datenblatt]] ist auf Figure 2-3 die Konfiguration des Logikelementes im "​Normal Mode" und in Figure 2-4 im "​Arithmetic Mode" dargestellt. Der Eingang "​cin"​ des Logikelementes ist immer mit dem "​cout"​ Ausgang des direkt benachbarten Logikelementes verbunden. Im "​Arithmetic Mode" ist die Lookuptabelle in zwei 3->1 Lookuptabellen aufgeteilt, wobei der Ausgang der einen Lookuptabelle immer "​cout"​ ist und deshalb nur zum Nachbarlogikelement weitergegeben werden kann.+Jetzt geht es um die Analyse wie die Additonsschaltung intern auf dem FPGA mit den Logikelementen umgesetzt wird. Im [[https://www.hs-augsburg.de/​~beckmanf/​restricted/​DE1_V.1.0.1_CDROM/​Datasheets/​Cyclone_II/​cyc2_cii5v1_01.pdf|Cyclone II Datenblatt]] ist auf Figure 2-3 die Konfiguration des Logikelementes im "​Normal Mode" und in Figure 2-4 im "​Arithmetic Mode" dargestellt. Der Eingang "​cin"​ des Logikelementes ist immer mit dem "​cout"​ Ausgang des direkt benachbarten Logikelementes verbunden. Im "​Arithmetic Mode" ist die Lookuptabelle in zwei 3->1 Lookuptabellen aufgeteilt, wobei der Ausgang der einen Lookuptabelle immer "​cout"​ ist und deshalb nur zum Nachbarlogikelement weitergegeben werden kann.
  
   - Starten Sie quartus mit der GUI im Syntheseverzeichnis "​pnr/​de1_add4"​   - Starten Sie quartus mit der GUI im Syntheseverzeichnis "​pnr/​de1_add4"​
Line 90: Line 88:
   * Verwenden Sie die HEX Anzeigen für die Darstellung von internen Werten nach Belieben. ​   * Verwenden Sie die HEX Anzeigen für die Darstellung von internen Werten nach Belieben. ​
  
-Wenn Sie Schaltung auf Papier skizziert haben, dann können Sie sich an die Umsetzung in VHDL machen. Für die Abstimmungsschaltung gibt es eine Testbench [[https://git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​blob/​master/​src/​t_de1_majority.vhd|t_de1_majority.vhd]] und eine angefangene Datei [[https://git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​blob/​master/​src/​de1_majority_rtl.vhd|de1_majority.vhd]] für das Design. Das Simulationsverzeichnis [[https://git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​tree/​master/​sim/​de1_majority|sim/​de1_majority]] und das Syntheseverzeichnis [[https://git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​tree/​master/​pnr/​de1_majority|pnr/​de1_majority]] sind fertig. ​+Wenn Sie die Schaltung auf Papier skizziert haben, dann können Sie sich an die Umsetzung in VHDL machen. Für die Abstimmungsschaltung gibt es eine Testbench [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​src/​t_de1_majority.vhd|t_de1_majority.vhd]] und eine angefangene Datei [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​src/​de1_majority_rtl.vhd|de1_majority.vhd]] für das Design. Das Simulationsverzeichnis [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​tree/​master/​sim/​de1_majority|sim/​de1_majority]] und das Syntheseverzeichnis [[https://gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​tree/​master/​pnr/​de1_majority|pnr/​de1_majority]] sind fertig. ​
  
 Für die Umsetzung in VHDL ist es eventuell notwendig, dass Sie mit Signalvektoren unterschiedlicher Länge arbeiten müssen. Dafür gibt es hier noch einige Tips. Sie haben bereits auf Teile aus einem Vektor zugegriffen,​ z.B. mit SW(3 downto 0) um einen vier Bit langen Vektor zu erhalten. Der Eingang switches_i der cntones Schaltung hat eine Länge von vier Bit. Wenn Sie die Eingänge switches_i(1 downto 0) mit SW(5 downto 4) verbinden wollen und switches_i(3 downto 2) auf 0 setzen wollen geht das so: Für die Umsetzung in VHDL ist es eventuell notwendig, dass Sie mit Signalvektoren unterschiedlicher Länge arbeiten müssen. Dafür gibt es hier noch einige Tips. Sie haben bereits auf Teile aus einem Vektor zugegriffen,​ z.B. mit SW(3 downto 0) um einen vier Bit langen Vektor zu erhalten. Der Eingang switches_i der cntones Schaltung hat eine Länge von vier Bit. Wenn Sie die Eingänge switches_i(1 downto 0) mit SW(5 downto 4) verbinden wollen und switches_i(3 downto 2) auf 0 setzen wollen geht das so:
Line 121: Line 119:
 ==== Messung der Verzögerungszeit der Schaltung ==== ==== Messung der Verzögerungszeit der Schaltung ====
  
-Jetzt messen Sie die Verzögerungszeit der Schaltung auf dem FPGA. Dazu verwenden Sie den Expansionport "​GPIO_1"​. ​Mit dem Signalgenerator ​erzeugen Sie ein Eingangssignaldas sich wie ein Schalter verhalten soll, der schnell ein- und ausgeschaltet ​wird. +Jetzt messen Sie die Verzögerungszeit der Schaltung auf dem FPGA. Dazu verwenden Sie den Expansionport "​GPIO_1"​. ​Für diese Messung soll nicht der Signalgenerator ​verwendet werdensondern der 50 MHz Oszillator, der schon auf dem Board vorhanden ist. Um das 50 MHz Signal vom Oszillator auch messen zu können, ​wird es erst durch das FPGA auf den Expansionport geführt und dann vom Expansionport wieder zurück in den FPGA an die Schaltung
  
   - Überlegen Sie von welchem Schalter aus es die größte Verzögerungszeit zum Ausgang der Abstimmungsschaltung geben könnte. ​   - Überlegen Sie von welchem Schalter aus es die größte Verzögerungszeit zum Ausgang der Abstimmungsschaltung geben könnte. ​
 +  - Fügen Sie einen Eingang CLOCK_50 zum Design hinzu
 +  - Fügen Sie einen Ausgang CLOCK_50_OUT zum Design hinzu
   - Fügen Sie einen Eingang CLK_IN zum Design hinzu   - Fügen Sie einen Eingang CLK_IN zum Design hinzu
   - Fügen Sie einen Ausgang MAJ zum Design hinzu   - Fügen Sie einen Ausgang MAJ zum Design hinzu
   - Ersetzen Sie den Schaltereingang,​ der wahrscheinlich der Startpunkt der längsten Verzögerung ist, durch den Eingang CLK_IN   - Ersetzen Sie den Schaltereingang,​ der wahrscheinlich der Startpunkt der längsten Verzögerung ist, durch den Eingang CLK_IN
   - Verbinden Sie neben LEDG(7) auch den Ausgang MAJ mit dem Ausgang der Abstimmungsschaltung   - Verbinden Sie neben LEDG(7) auch den Ausgang MAJ mit dem Ausgang der Abstimmungsschaltung
 +  - Leiten Sie auf dem FPGA das 50 MHz Taktsignal, das am Eingang CLOCK_50 ankommt, zum Ausgang CLOCK_50_OUT.
 +
 +Jetzt müssen Sie noch geeignete Pindefinitionen zum [[https://​gitlab.elektrotechnik.hs-augsburg.de/​beckmanf/​digitaltechnikpraktikum/​blob/​master/​pnr/​de1_majority/​de1_majority_pins.tcl|Pindefinitionsfile]] hinzufügen um  ​
 +
 +  * CLOCK_50 mit dem 50 MHz Oszillator
 +  * CLOCK_50_OUT mit dem Pin 1 auf dem Expansionport 1 (GPIO1)
 +  * CLK_IN mit dem Pin 2 auf Expansionport 1
 +  * MAJ mit dem Pin 40 auf dem Expansionport 1
 +
 +zu verbinden.
  
-Jetzt müssen Sie noch geeignete Pindefinitionen zum [[https://​git.etech.fh-augsburg.de/​friedrich.beckmann/​digitaltechnikpraktikum/​blob/​master/​pnr/​de1_majority/​de1_majority_pins.tcl|Pindefinitionsfile]] hinzufügen um CLK_IN mit dem Pin 1 auf dem Expansionport GPIO1 und MAJ mit dem Pin 40 zu verbinden. ​Nach etwas Recherche im [[https://www2.hs-augsburg.de/​~beckmanf/​restricted/​DE1_V.1.0.1_CDROM/​DE1_user_manual/​DE1_UserManual_v1.2.1.pdf|Altera DE1 Usermanual]] sollte dabei herauskommen: ​+Nach etwas Recherche im [[https://www.hs-augsburg.de/​~beckmanf/​restricted/​DE1_V.1.0.1_CDROM/​DE1_user_manual/​DE1_UserManual_v1.2.1.pdf|Altera DE1 Usermanual]] sollte dabei herauskommen: ​
  
 <​code>​ <​code>​
 +set_location_assignment PIN_L1 ​ -to CLOCK_50
 +set_location_assignment PIN_H12 -to CLOCK_50_OUT
 set_location_assignment PIN_H13 -to CLK_IN set_location_assignment PIN_H13 -to CLK_IN
 set_location_assignment PIN_P18 -to MAJ set_location_assignment PIN_P18 -to MAJ
  • dtpr_versuch_5.1397506894.txt.gz
  • Last modified: 2014/04/14 22:21
  • by beckmanf