Menu:

Project: FPGA68k  -  Testdesigns

Testdesign 1: Blinkende LED (Hello World)

Dies ist das allererste Design, welches geladen werden sollte. Da dieses Design neben der Spannungsversorgung nur eine LED und einen Oszillator benötigt, ist es selbst dann lauffähig, wenn andere Baugruppen noch nicht aufgelötet sind, oder aufgrund von Löt- oder Bestückungsfehlern nicht funktionieren.

 

Funktionsweise

Das FPGA hat in diesem Design die Aufgabe, einen Eingangstakt von 25,00 Mhz durch 5 Millionen zu teilen. Der erzeugte Signal von jetzt nur noch 5,00 Hz wird dann dafür genutzt, den Zustand einer Leuchtdiode am Ausgang periodisch zu invertieren.

FPGA68k

Dieses einfache Design lässt die Onboard-LED blinken. Dazu wird der 25,00 MHz-Takt des Oszillators benutzt, um einen Zähler zu dekrementieren, der mit 5.000.000 initialisiert wurde. Wenn der Zähler 0 erreicht, wird der Ausgang invertiert und der Zähler wird wieder mit 5.000.000 geladen. Dadurch, dass die LED mit 5 Hz jeweils nur invertiert wird, ist die Blinkfrequenz letztlich nur halb so groß, nämlich 2,50 Hz.

 

Bitfile

Unter folgendem Link kannst Du dir das Bitfile für dieses Design downloaden und direkt mit dem Impact-Tool in das FPGA schreiben.

  Bitfile, geeignet für das FPGA68k-Board (25,00 MHz-Takt): Testdesign 01: Blinkende LED

 

Quelltext


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Testdesign01 is
        Port(   Clock   :  in   STD_LOGIC;
                LED     :  out  STD_LOGIC
            );
end Testdesign01;


architecture Behavioral of Testdesign01 is

constant maximum        :  integer    := 5000000-1;

signal  counter         :  integer range 0 to maximum := maximum;
signal  led_status      :  std_logic  := '0';

begin

  process begin
      wait until rising_edge(Clock);         -- warten bis zur nächsten positiven Flanke
      if (counter>0) then                    -- wenn der Zähler größer 0 ist, dann
          counter <= counter-1;              -- den Zähler dekrementieren
      else                                   -- ansonsten (Zähler ist 0):
          counter <= maximum;                -- Zähler wieder auf Ausgangswert setzen
          led_status <= not led_status;      -- und internen Status der LED invertieren
      end if;
  end process;

  LED <= led_status;                         -- den internen LED-Status an die LED übergeben

end Behavioral;

 

Zuweisungen der FPGA-Pins (User Constraint File)


# User Constraints für Testdesign01

NET "Clock"            LOC = P55    | IOSTANDARD = LVCMOS33;
NET "LED"              LOC = P41    | IOSTANDARD = LVCMOS33;

 

Sowohl der Quelltext als auch die Pinzuweisungen können per Copy&Paste von dieser Seite kopiert und in die entsprechende Datei unter ISE eingefügt werden. Als Bausteintyp ist folgendes anzugeben:

Family: Spartan6
Device: XC6SLX9
Package: TQG144
Speed: -2

 

Zurück zur Übersicht der Testdesigns