Hallo zusammen,
ich möchte für Demonstrationszwecke ein Logikgatter(AND mit 2 Inputs)
mit meinem FPGA(Altera DE2-115)über die GPIOs ansteuern. Dazu nutze ich
VHDL. Anfangs setzte ich die beiden Inputs auf 1 und 1, sodass der
Ausgang auch theoretisch 1 ist.
Das FPGA ist jedoch schneller als das Gatterdelay und der Ausgang Q ist
immer LOW.
Mein Ansatz wäre:
Könnte ich einen Counter in einen State implementieren welcher die State
Machine ein paar Mikrosekunden verzögert?
Wenn ja, wie könnte ich das realisieren?
Das wäre mein kleiner Beispielcode(bei dem die Geschwindikkeit zu hoch
ist):
Frage schrieb:> Anfangs setzte ich die beiden Inputs auf 1 und 1, sodass der> Ausgang auch theoretisch 1 ist.> Das FPGA ist jedoch schneller als das Gatterdelay und der Ausgang Q ist> immer LOW.
Warum sollte er das sein? Du wirst die Eingänge mal ändern müssen. Was
genau soll das "demonstriert" werden?
Hoffentlich nicht die zufällligen Ergebnisse infolge der Nutzung
asynchroner Schaltungen ohne Takt, für die FPGAs genau NICHT gemacht
wurden ( und die tools auch nicht).
Die Bedeutung eines FPGA ist gerade die Optimierung auf synchrones
Design. Alle weiteren Spielereien darum herum macht man mit Gattern der
HC Serie.
Frage schrieb:> ein Logikgatter(AND mit 2 Inputs) mit meinem FPGA
Ich sehe da kein Logikgatter.
> Das wäre mein kleiner Beispielcode(bei dem die Geschwindikkeit zu hoch> ist)
Der Code, den du da gepostet hast, ist quasi statisch. Nach 3 Taktzyklen
sind einfach alle LEDs irgendwie gesetzt (wenn sie denn
Das Problem liegt also nicht (allein) in diesem Codeschnipsel.
> Das FPGA ist jedoch schneller als das Gatterdelay und der Ausgang Q ist> immer LOW.
Das hört sich nach Holzweg an. Wie stellst du das fest? Was sagt denn
(abgesehen von offensichtlichen Syntaxfehlern) der Simulator zu diesem
Code? Denn der Simulator ist der Debugger für (d)eine VHDL Beschreibung.
> Könnte ich einen Counter in einen State implementieren welcher die State> Machine ein paar Mikrosekunden verzögert?
Ja, aber das ist hier sicher nicht das Problem. Im Simulator kannst du
die Zeit ja beliebig "langsam" laufen lassen.
Um eine definierte Aussage machen zu können, wäre es sinnvoll, wenn du
die VHDL-Datei(en) einfach hier anhängst.
>Was sagt denn>(abgesehen von offensichtlichen Syntaxfehlern) der Simulator zu diesem>Code?
Als Simulator kann ich GHDL empfehlen:
Beitrag "Re: GHDL und gtkwave Grundlagen"
Was soll dieser Code machen?
Wo ist die Entity?
Welche Signale gehen auf das AND?
Wieso setzt du zwei mal I1 auf 1?
Wieso endet die FSM nach einem Durchlauf?
Frage schrieb:> ich möchte für Demonstrationszwecke ein Logikgatter(AND mit 2 Inputs)> mit meinem FPGA(Altera DE2-115)über die GPIOs ansteuern.
Du willst also einen Chip wie z.B. 74LSxyz ansteuern und
sein Verhalten beobachten?
Zuerst solltest du deinen Code abändern, so das
auch etwas interesantes passiert:
1
ifcen='1'then
2
casestateis
3
S1:i1<='1';i2<='1';state<=S2;
4
S2:i1<='0';i2<='0';state<=S1;
5
endcase;
6
endif;
cen (nennt man ClockEnable) wird jetzt in einem zweiten
Prozess gesteuert:
1
counter<=counter+1;
2
cen<='0';
3
ifcounter=MAXthen
4
counter<=0;
5
cen<='1';
6
endif;
(mit signal counter: integer range 0 to MAX := 0)
MAX muss hinreichend gross gewählt werden.
>> Als Simulator kann ich GHDL empfehlen
Lothar schrieb:
>Der ISE-Simulator reicht da schon aus und ist dank der eingebauten>Automatik nur ein paar Mausklicks weit weg:
Beim Ise-Simulator steht bei der Lizenz "limited".
Carl schrieb:> Beim Ise-Simulator steht bei der Lizenz "limited".
Ja, aber das ist nicht schlimm, weil die Einschränkungen (wie z.B.
Multi-Language-Simualtion usw.) für VHDL-Anfänger nicht relevant sind.
>Ja, aber das ist nicht schlimm, weil die Einschränkungen
Achso. Ich dachte das "limited" bezieht sich auf eine zeitlich begrenzte
Nutzungsdauer. Vor einiger Zeit hatte ich Lattice-Diamond installiert.
Das meldet sich jetzt mit "Lizenz abgelaufen".
Carl schrieb:> Vor einiger Zeit hatte ich Lattice-Diamond installiert.> Das meldet sich jetzt mit "Lizenz abgelaufen".
Das sollte sich beheben lassen indem du einfach eine neues Lizenz File
anforderst und gegen das alte austauschst.
>Geh zu Lattice und 2 Minuten später hast du eine Neue...
Ja, dass kann ich bestimmt machen ... falls ich das Passwort noch finde.
Insgesamt ist das aber schon ärgerlich. Wenn ich meinen Computer
anmache, soll die Entwicklungsumgebung funktionieren. Wenn Lattice
irgendwann dicht machen würde, säße man auf dem Trockenen und kann
nichts mehr reparieren.
Deshalb mag ich solches Verhalten.
Carl schrieb:> Beim Ise-Simulator steht bei der Lizenz "limited".
Nein, die Tabelle ist mit "ISE Design Features Table" beschriftet, und
zwar für die Produktvariante "Webpack".
Wieso soll der TE überhaupt ISE verwenden, wenn er doch ein Altera/Intel
FPGA hat? Gibt es bei Quartus keinen Simulator?
Carl schrieb:>>Geh zu Lattice und 2 Minuten später hast du eine Neue...>> Ja, dass kann ich bestimmt machen ... falls ich das Passwort noch finde.
Das ist aber Dein Problem und nicht das von Lattice. Üblicherweise kann
man sich aber ein neues Passwort generieren und zuschicken lassen.
> Insgesamt ist das aber schon ärgerlich. Wenn ich meinen Computer> anmache, soll die Entwicklungsumgebung funktionieren. Wenn Lattice> irgendwann dicht machen würde, säße man auf dem Trockenen und kann> nichts mehr reparieren.
Dann musst Du eben entweder eine Node-Locked-Lizenz für Deinen Rechner
(vorzugsweise VM, die man separat sichern kann) erwerben oder einen
eigenen, lokalen Lizenzserver betreiben.
Mir wäre es grundsätzlich auch lieber, auf solche Lizenzen zu setzen,
aber manchmal überwiegen eben die Vorteile des beim Hersteller oder
Lieferanten befindlichen Lizenzservers. Altium Designer nutze ich
üblicherweise an drei verschiedenen Orten (und gelegentlich auch auf
einem Notebook), so dass es sich schon aus Kostengründen verbietet,
hierfür separate Lizenzen zu erwerben. Manche Hersteller kennen solche
Probleme und erlauben mehrere Installationen ihrer Software mit einer
gemeinsamen Lizenz, z.B. Ultraedit bzw. UE Studio.
> Deshalb mag ich solches Verhalten.
?
Andreas S. schrieb:> oder einen> eigenen, lokalen Lizenzserver betreiben.
Aber auch auf dem Flexnet Lizenzserver wird es irgendwann mal nicht mehr
funktionieren, dass die Lizenz ausgecheckt werden kann und er sich eine
neue besorgen muss.
Die Node-Locked Geschichte ist ja auch nichts anderes als ein lokaler
Lizenzserver mit einem Lizenz File dass an die MAC Adresse gebunden ist.
Wenn das Lizenz File ein Ablaufdatum hat, ist es doch egal ob das ein
externer Server ist oder nicht. Oder sehe ich da was falsch?
Tobias B. schrieb:> Die Node-Locked Geschichte ist ja auch nichts anderes als ein lokaler> Lizenzserver mit einem Lizenz File dass an die MAC Adresse gebunden ist.
... oder an ein anderes Merkmal des Rechners, z.B. Festplatten-ID,
Seriennummer, oder einen Hardware-Lizenzschniepel.
> Wenn das Lizenz File ein Ablaufdatum hat, ist es doch egal ob das ein> externer Server ist oder nicht. Oder sehe ich da was falsch?
Der Ablauf der Lizenz ist ein sehr genau bestimmbares zukünftiges
Ereignis. Wenn man eine Lizenz(datei) ohne Ablauf haben will, bieten
fast alle Hersteller so etwas auch an, mit allen Vor- und Nachteilen.
Ein anderes Szenario ist jedoch der aus Kundensicht nicht vorhersehbare
Ausfall des externen Lizenzservers, und zwar aus einem der folgenden
Gründe:
- (kurzzeitiger) technischer Ausfall/Defekt
- Inkompatibilität bei Upgrades
- organisatorische Gründe (freiwillige Abschaltung)
- regulatorische Gründe (Abschaltung auf Grund behördlicher oder
gerichtlicher Anordnung)
- Einstellung des Geschäftsbetriebs, z.B. auf Grund von Insolvenz
Andreas S. schrieb:> Tobias B. schrieb:>> Die Node-Locked Geschichte ist ja auch nichts anderes als ein lokaler>> Lizenzserver mit einem Lizenz File dass an die MAC Adresse gebunden ist.>> ... oder an ein anderes Merkmal des Rechners, z.B. Festplatten-ID,> Seriennummer, oder einen Hardware-Lizenzschniepel.>>> Wenn das Lizenz File ein Ablaufdatum hat, ist es doch egal ob das ein>> externer Server ist oder nicht. Oder sehe ich da was falsch?>> Der Ablauf der Lizenz ist ein sehr genau bestimmbares zukünftiges> Ereignis. Wenn man eine Lizenz(datei) ohne Ablauf haben will, bieten> fast alle Hersteller so etwas auch an, mit allen Vor- und Nachteilen.>> ... Schnipp Schnapp
Ich verstehe schon was ein Lizenserver macht, was seine Vorteile sind,
usw. Benutze ich schliesslich selbst fuer Modelsim. Mir ging es um die
eher konkret um die Lattice Geschichte, weil da bekommt man genau solch
eine Flexnet Nodelocked Lizenz, gebunden an die MAC Adresse (der Server
wird mit Diamond ausgeliefert). Bezogen auf diese Aussage:
Andreas S. schrieb:> Dann musst Du eben entweder eine Node-Locked-Lizenz für Deinen Rechner> (vorzugsweise VM, die man separat sichern kann) erwerben oder einen> eigenen, lokalen Lizenzserver betreiben.
haette ich nun gesagt, dass man in beiden Faellen eine Lizenz erwerben
muss, welche sicherstellt, dass eben nicht nach einer Zeit X um ist,
allein auf einen Lizenzserver umzustellen ist zu wenig.
Jetzt verstehe ich aber auch, dass es wohl genauso gemeint ist, nur
nicht ganz optimal formuliert ist. Da ich jetzt auch nicht der fitteste
mit der Flexnet Geschichte bin, hatte ich gedacht, dass da noch eine
Bildungsluecke ist.
Lothar M. schrieb:> Könntet ihr die Lizenzgeschichte möglicherweise in einem anderen Thread> diskutieren?
Joa, jetzt. Oben hast du dich selbst zu dem Lizenzthema geaeussert und
wirklich viel gibt der Thread auch nicht her. Seit Post 4 wird es
Offtopic, und du diskutierst fleissig mit. ;-)
Sigi schrieb:> Du willst also einen Chip wie z.B. 74LSxyz ansteuern und> sein Verhalten beobachten?
Genau. Ich hätte mein Vorhaben in meinem ersten Beitrag besser
definieren sollen. Ich möchte ein Logikgatter-IC extern ansteuern(also
über die GPIOs des FPGA-Boards). Dabei handelt es sich um ein 74HC08 von
NXP. Ich möchte es auf dessen Funktion testen bzw. das Verhalten
beobachten.
Schlumpf schrieb:> Wieso setzt du zwei mal I1 auf 1?
Ich habe mich vertippt, es sind I1 und I2. Dies sind beide Inputs des
externen Logikgatters, welche über die GPIOs laufen.
Q ist der Output des Logikgatters und soll eingelesen werden.
Schlumpf schrieb:> Welche Signale gehen auf das AND?Lothar M. schrieb:> Ich sehe da kein Logikgatter.
Das AND ist ein externes Logikgatter in Form eines 74HC08 .
Weltbester FPGA-Pongo schrieb im Beitrag #5843071:
> Warum sollte er das sein? Du wirst die Eingänge mal ändern müssen. Was> genau soll das "demonstriert" werden?
Ich möchte die Funktion des externen Logikgatter überprüfen, also ob es
funktionsfähig ist oder nicht.
Viele Grüße
Du schreibst, dass Q immer Low ist, obwohl du an I1 und I2 High anlegst.
Da du aber die beiden Inputs in deiner FSM nie zurück setzt, müssen die
dauerhaft auf High stehen und Q somit auch.
Entweder ist dein AND kaputt oder du dein Code ist nicht der, den du
tatsächlich verwendest oder deine FSM startet mangels Reset nicht bei
S1.
1. Schritt: messe an den Pins, was tatsächlich anliegt.
2. Schritt: beschreibe das Reset Verhalten.
3. Schritt: synchronisiere Q mit Clk ein.
So wie du es beschrieben hast, kann es zu ungewolltem Verhalten kommen,
da die logischen Pfade von Q an die Register des Zustandszählers
unterschiedlich lang sind und somit nicht sicher gestellt ist, dass bei
der Taktflanke die Information für den nächsten Zustand konsistent an
allen Registern anliegt.
Mein Gedankengang ist folgender: Wenn ich I1 und I2 auf 1 setzte und
direkt danach in S_2 Q1 auslese, ist es möglich, dass das
Gatterdelay(externes Gatter!) größer ist als die Zeit die das FPGA
benötigt um die Pins auf 1 zu setzten und Q auszulesen?
Denn dann wäre Q ja noch auf 0 oder nicht?
Schlumpf schrieb:> 3. Schritt: synchronisiere Q mit Clk ein.> So wie du es beschrieben hast, kann es zu ungewolltem Verhalten kommen,> da die logischen Pfade von Q an die Register des Zustandszählers> unterschiedlich lang sind und somit nicht sicher gestellt ist, dass bei> der Taktflanke die Information für den nächsten Zustand konsistent an> allen Registern anliegt.
Wie kann ich dies tun?
Frage schrieb:> Denn dann wäre Q ja noch auf 0 oder nicht?
Denkbar.
Wie schnell ist dein Takt?
Frage schrieb:> Wie kann ich dies tun?
Schritt 1 und 2 schon erledigt?
Frage schrieb:> Denn dann wäre Q ja noch auf 0 oder nicht?
Kommt darauf an. Hast du die Signale I1 und I2 bei ihrer Deklaration auf
0 initialisiert? Dann "startet" auch Q auf 0. Wenn du den Startwert von
I1 und I2 nicht festgelegt hast, dann ist es nicht ohne weiteres
vorherzusagen, mit welchen Pegeln die beiden Signale starten.
Und ja: es kann sein, dass dein FPGA die States schneller durchläuft,
als das externe Gatter schaltet. Aber das lässt sich leicht ändern. Der
Übergang von einem State zum nächsten braucht genau einen Taktzyklus. Du
musst nur deinen Takt "clock" langsam genug wählen. Dann haben I1 und I2
genug Zeit, um am externen Gatter anzukommen. Und das externe Gatter hat
genug Zeit, um umzuschalten.
Sigi schrieb:> if cen = '1' then> case state is> S1: i1 <= '1'; i2 <= '1'; state <= S2;> S2: i1 <= '0'; i2 <= '0'; state <= S1;> end case;> end if;
Jetzt würden I1 und I2 doch auf 1 gesetzt werden und direkt danach
wieder auf 0. Aber wenn ich noch Q auslesen will, benötige ich doch eine
Verzögerung die mit der Verzögerung des externen Gatters übereinstimmt,
oder denke ich falsch?
Im Datenblatt
(https://assets.nexperia.com/documents/data-sheet/74HC_HCT08.pdf) stehen
auf Seite 6 die Verzögerungen, also Übergangszeit und propagation delay.
Muss ich diese nicht berücksichtigen?
Achim S. schrieb:> Du musst nur deinen Takt "clock" langsam genug wählen. Dann haben I1 und> I2 genug Zeit, um am externen Gatter anzukommen. Und das externe Gatter> hat genug Zeit, um umzuschalten.
Oder Waitstates einfügen zwischen S1 und S2.
Also einen oder mehrere zusätzliche(n) State(s), wo nichts gemacht wird.
Schlumpf schrieb:> Wie schnell ist dein Takt?
In meinem SDC steht folgendes:
create_clock -period 20 [get_ports clock]
derive_pll_clocks
=> also 50MHz.
Schlumpf schrieb:> Schritt 1 und 2 schon erledigt?
Ja. Q1 wird auch auf 1 gesetzt, aber es scheint so, dass die Abfrage
durch die FSM noch davor vonstatten geht.
Achim S. schrieb:> Kommt darauf an. Hast du die Signale I1 und I2 bei ihrer Deklaration auf> 0 initialisiert? Dann "startet" auch Q auf 0. Wenn du den Startwert von> I1 und I2 nicht festgelegt hast, dann ist es nicht ohne weiteres> vorherzusagen, mit welchen Pegeln die beiden Signale starten.
Ja, habe ich gemacht. Der Ausgang wird nach dem starten des Desgins auch
auf 1 gesetzt.
Schlumpf schrieb:> Oder Waitstates einfügen zwischen S1 und S2.> Also einen oder mehrere zusätzliche(n) State(s), wo nichts gemacht wird.
Was wäre den sinnvoller? Muss ich um den Takt zu senken einfach eine
größere -period im SDC angeben.
Frage schrieb:> also 50MHz.
Wären dann 20ns.
Altera FPGAs sind an den Pins recht lahmarschig..
Frage schrieb:> Was wäre den sinnvoller? Muss ich um den Takt zu senken einfach eine> größere -period im SDC angeben.
Ich würde nen Waitstate einbauen.
Das ist schnell erledigt.
Ansonsten musst die PLL umkonfigurieren.
Das geht nicht über das SDC.
Schlumpf schrieb:> Grad mal das Datenblatt vom 74HC08 angeschaut..>> Bau gleich mal zwei Waitstates ein : )
Okay. Müssen die noch irgendwas können außer:(z.B. einen Counter
beinhalten)
when S_WAIT =>
state <= READY;
Schlumpf schrieb:> Frage schrieb:>> also 50MHz.>> Wären dann 20ns.> Altera FPGAs sind an den Pins recht lahmarschig..
Zusammenhang?
Du kannst über die Pins des Cyclone4 problemlos >>100 Mhz rausgeben und
das noch ganz ohne DDR oder ähnliche Spielchen.
Mein Vorschlag für das DE2-115 bei dem gegebenen Problem:
- die Schalter SW0 und SW1 gehen direkt auf die GPIO Pins der Eingänge
des 74HC08.
- Der GPIO Pin des Ausgangs des 74HC08 geht direkt auf eine der LEDs
Fertig. Kein Takt und nix.
So kannst du alle 4 Zustände live probieren.
Wenn du die Verzögerung messen willst geht das auch, ist aber wohl
(noch) nicht dein Ziel?
Schlumpf schrieb:> Also einen oder mehrere zusätzliche(n) State(s), wo nichts gemacht wird.Schlumpf schrieb:> Wie bitte?
Also ich nehme an, dass in diesen States nichts gemacht werden soll.
Also
when S_WAIT =>
state <= READY;
FPGA zum Spass schrieb im Beitrag #5844088:
> Zusammenhang
Die Zeit von den Register I1 und I2 bis zu den Pins des AND ist nicht
null.
Ebenso nicht die Zeit vom Ausgang des AND bis zu den Registern des
Statecounters.
Diese Zeiten addieren sich zu Zeit des AND und die Summe dieser Zeiten
muss kleiner 1/50MHz sein.
Frage schrieb:> Also ich nehme an, dass in diesen States nichts gemacht werden soll.
Ja, Aber warum du vom Waitstate direkt die FSM 'beenden' willst,
verstehe ich nicht
Schlumpf schrieb:> Ja, Aber warum du vom Waitstate direkt die FSM 'beenden' willst,> verstehe ich nicht
Das war nur ein Beispiel.
Besseres Beispiel:
when S_WAIT =>
state <= S_3;
FPGA zum Spass schrieb im Beitrag #5844088:
> Wenn du die Verzögerung messen willst geht das auch, ist aber wohl> (noch) nicht dein Ziel?
Nein. Mein Ziel ist es, einen Taster zu betätigen. Anschließend soll das
externe Gatter auf dessen Funktion getestet werden und mir durch die
LEDs eine Rückmeldung geben.
Frage schrieb:> Anschließend soll das> externe Gatter auf dessen Funktion getestet werden und mir durch die> LEDs eine Rückmeldung geben.
Also nicht das Gatter sondern das FPGA soll mir diese Rückmeldung geben.
Frage schrieb:> Das war nur ein Beispiel.> Besseres Beispiel:
Ach so..
Ja, so sieht ein Waitstate aus.
Man wartet eben einen Takt lang und tut in der Zeit nichts
Ich bekomme beim kompilieren jedoch noch eine kritische Warnung:
Critical Warning (332168): The following clock transfers have no clock
uncertainty assignment. For more accurate
results,
apply clock uncertainty assignments or use
the
derive_clock_uncertainty command.
Critical Warning (332169): From clock (Rise) to clock (Rise) (setup and
hold)
Bei Intel
(https://www.intel.com/content/www/us/en/programmable/support/support-resources/knowledge-base/solutions/rd01282014_301.html)
steht man könne diese ignorieren. Soll ich das tun?
Mir ist immer noch nicht klar wofür der Takt in diesem Beispiel gut sein
soll, geschweige denn die FSM.
Geht es dir jetzt um die FSM oder um den Test des externen Bausteins?
Frage schrieb:> Mein Ziel ist es, einen Taster zu betätigen. Anschließend soll das> externe Gatter auf dessen Funktion getestet werden und mir durch die> LEDs eine Rückmeldung geben.
Der Taster soll also einen automatischen Ablauf starten, der dann
Testmuster an den externen Prüfling anlegt und prüft, ob der eine UND
Funktion aufweist? Dann musst du die restlichen Kombinationen 00, 01 und
10 ja auch prüfen. Und dann kannst du an den 4 LEDs auch gleich
anzeigen, ob da statt des AND eine andere Funktionalität OR, NOR, NAND,
XOR, XNOR angeschlossen ist.
Die ersten 3 LEDs könnten dann die Funktion anzeigen, und die vierte
eine Negation.
Zeig doch einfach mal den Originaltext dieser netten Hausaufgabe...
Lothar M. schrieb:> Der Taster soll also einen automatischen Ablauf starten, der dann> Testmuster an den externen Prüfling anlegt und prüft, ob der eine UND> Funktion aufweist? Dann musst du die restlichen Kombinationen 00, 01 und> 10 ja auch prüfen. Und dann kannst du an den 4 LEDs auch gleich> anzeigen, ob da statt des AND eine andere Funktionalität OR, NOR, NAND,> XOR, XNOR angeschlossen ist.> Die ersten 3 LEDs könnten dann die Funktion anzeigen, und die vierte> eine Negation.
Genau das ist mein Ziel. Ich wollte aber erstmal mit einem AND anfangen
und den Ausgang auslesen bzw. Die Eingänge beschalten und wenn alles
klappt den code erweitern.
FPGA zum Spass schrieb im Beitrag #5844281:
> Geht es dir jetzt um die FSM oder um den Test des externen Bausteins?
Ich denke eine FSM ist die einfachste Methode für dieses Vorhaben.
Lothar M. schrieb:> Zeig doch einfach mal den Originaltext dieser netten Hausaufgabe...
Ich habe mir diese Aufgabe selbst überlegt, wenn du das meinst. Oder
bezieht sich deine Aussage darauf, dass ich den gesamten code hier
reinstellen soll?
Frage schrieb:> Lothar M. schrieb:>> Der Taster soll also einen automatischen Ablauf starten...> Genau das ist mein Ziel.
Ich hab das mal als kleine Fingerübung zur Frühstückspause gemacht und
vier Prüflinge an den Test gehängt. Der Starttaster wird von der
Testbench "betätigt", dann im start_sr einsynchronisiert, darauf eine
Flankenerkennung gemacht und die FSM gestartet, die die 4 Testmuster
anlegt, diese anschließend auswertet und das das Ergebnis auf den LEDs
anzeigt. Die Leds sind so definiert: