Forum: FPGA, VHDL & Co. Hilfe für Code - VHDL


von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

ich möchte eine einfache Aufgabe codieren und würde gerne, soweit es 
möglich ist, einen zweiten Code von jmd. anders dazu nehmen und auch als 
Überprüfung gerne testen. Die Aufgabe ist nicht schwer. Ich selbst bin 
noch Anfänger...

Siehe das Problem im Dateianhang.

Vll hat ja jemd die Muse mir zu helfen und einen fertige Code zu 
schicken.

Vielen Dank und Grüße
Martin

von Markus F. (mfro)


Lesenswert?

Martin schrieb:
> Die Aufgabe ist nicht schwer

Da wirst Du wohl vorlegen müssen - hier ist keiner scharf drauf, deine 
Hausaufgaben zu erledigen ;)

von Martin (Gast)


Lesenswert?

Hi es geht um eigenes Kennenlernen, keine Aufgabe der VHDL... und würde 
es gerne als 2te Meinung haben... Die Entity habe ich selbst aber in der 
Architecture bekomme ich noch einige Fehlermeldungen...da hänge ich...

von Duke Scarring (Gast)


Lesenswert?

Dann zeig doch erstmal Deine Entity.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wie lange sind die Eingänge vom Geldprüfer aktiv?
Wurden die bereits aufbereitet und eine Entprellung samt 
Flankenerkennung darauf angewendet, sodass pro Geldstück nur 1 einziger 
Impuls mit der Dauer 1 einzigen Takzyklus ankommt?
Nein? Dann wäre das der erste Schritt...

Dann Brain 1.0: was ist der Höchstbetrag, vor ein Kaffee ausgespuckt 
wird?
Welche Überbezahlung ist demnach möglich?
Was ist die simpelste Darstellung des höchsten Geldbetrags (Stichwort 
GGT)?

Heraus kommt dann, dass ein Kaffe 3 "Geldeinheiten" kostet und der 
Einzahlbetrag maximal 6 "Geldeinheiten" und damit der nötige 
"Geldzähler" 3 Bit breit ist. Mit diesen "kleinen" Integerzahlen lässt 
sich dann sehr einfach "rechnen". Wenn nach Ausgabe des Kaffees und 
Abzug der dafür nötigen 3 "Geldeinheiten" noch was übrig ist, dann ist 
es ein 50 Cent Stück, wenn das LSB Bit 0 gesetzt ist, und 1 Euro, wenn 
das Bit(1) des "Geldzählers" gesetzt ist.

Alles in Allem: nette kleine Aufgabe, bei der man schon lange vor dem 
Schreiben der ersten VHDL-Codezeile viel falsch machen kann...   ;-)

: Bearbeitet durch Moderator
von Thomas W. (diddl)


Lesenswert?

Hinzu kommt, dass man dasselbe Geldstück ja öfter einwerfen könnte …

… es bräuchte also zähler pro Geldstück-Art.




Aber wahrscheinlich ist es nur ganz simpel "gemeint".

Jede Kombination aus einzelnen Geldstücke (eines pro Art) und die 
Reaktion der Ausgänge. Nur ein paar Gatter ...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich habs zwischendurch mal mit einem Summenzähler gemacht...   ;-)

Aber jetzt muss erst mal jemand die simulierten 6 Kaffee trinken und was 
von Martin kommen, damit man ihm helfen kann.

: Bearbeitet durch Moderator
von Ale (Gast)


Lesenswert?

@Lothar,

Jeder kann es mit 2 bits per FF lösen !, aber mit normalle FFs...

ahem... Beitrag "Hommage an Lothar Miller" :-D

von nfet (Gast)


Lesenswert?

Ich würde einfach die ganze statemachine malen und implementieren. Sind 
grob im Kopf geschätzt s 5 10 15 k0 25 k10 30 k15 20 k5 also ca. 11 
Zustände mit maximal 3 übergangen pro Zustand.

von FPGA zum Spass (Gast)


Angehängte Dateien:

Lesenswert?

Lothar optimiert den Reset weg, dann optimier ich noch den Takt weg.

Aus Spaß mal eine Variante ohne Takt, glitch free und synthetisierbar.

Nicht das es irgentwie sinnvoll wäre, war aber interessant :)

von Martin (Gast)


Lesenswert?

Stelle heute Abend meine ENTITY rein... Danke für das Feedback bisher...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

FPGA zum Spass schrieb im Beitrag #5878936:
> Lothar optimiert den Reset weg, dann optimier ich noch den Takt weg.
Dann also mit Latches? Da ist es schon wichtig, dass keine Glitches 
auftreten können. Lass mal sehen, wie die Zeit für die Ausgabepulse von 
Kaffee und Rückgeld gemacht ist. Bin gespannt... ;-)

Wie sieht es da mit der gegen EMV-Störungen nötige Konditionierung der 
Eingänge aus (wie z.B. EMV-Spikes im Anhang ab Cursor, wo der 1 
Euro-Eingang Störungen abbekommt)?

> synthetisierbar
Damit ist das Spiel aber noch nicht gewonnen, denn man kann sogar ganz 
problemlos eine kombinatorische Schleife synthetisieren. Manche machen 
das, ohne es zu wissen.

nfet schrieb:
> die ganze statemachine
Bestand bei mir aus dem Geldzähler und einem Flag, das anzeigt, ob das 
Geld schon reicht. Inzwischen hab ich das aber mal überarbeitet, damit 
es "lehrbuchmäßiger" aussieht. Der Zustandsautomat kennt jetzt 3 
Zustände: kassieren, kaffee, rueckgeld. Das ist jetzt leicht wart- und 
erweiterbar (z.B. wenn noch ein 5€-Geldscheinprüfer mit ins Spiel kommt, 
oder der Kaffeepreis angepasst werden muss).

von FPGA zum Spass (Gast)


Lesenswert?

Lothar M. schrieb:
> FPGA zum Spass schrieb im Beitrag #5878936:
>> Lothar optimiert den Reset weg, dann optimier ich noch den Takt weg.
> Dann also mit Latches? Da ist es schon wichtig, dass keine Glitches
> auftreten können. Lass mal sehen, wie die Zeit für die Ausgabepulse von
> Kaffee und Rückgeld gemacht ist. Bin gespannt... ;-)

- Ein Schieberegist.. pardon Latch.

- Gelöscht werden alle Ausgänge(Kaffee, Rückgeld) ab Schiebe-Füllstand x 
(Verzögerung x*ps)

- Sind alle Bits in der Schiebekette gesetzt, dann wird ein Lösch Latch 
gesetzt, das erst zurückgenommen wird wenn wieder alle Bits 0 sind.

Ok, die Simulation ist an der Stelle mit "after x ps" getrickst, hatte 
keine Lust auf Post P&R Simulation. Ist aber die einzige Stelle mit 
künstlicher Verzögerung.

Und ja, wenn die Verzögerung zwischen x Schiebstellen kleiner ist als 
das Löschen der Ausgänge dauert, dann geht es schief. Mut zur Lücke :)


Vielleicht gibts ja dafür bessere Lösungen ohne Takt (dazu zähle ich 
auch kombinatorische Schleifen um sich einen Takt zu erschleichen)


> Wie sieht es da mit der gegen EMV-Störungen nötige Konditionierung der
> Eingänge aus (wie z.B. EMV-Spikes im Anhang ab Cursor, wo der 1
> Euro-Eingang Störungen abbekommt)?

Schlecht. War auch nur just for fun um zu sehen ob es überhaupt geht.

Wenn man auf bestimmte Dinge verzichtet bekommt man manchmal erst den 
Blick dafür was man überhaupt so tut und ist nicht im festen 
Arbeitsschema gefangen.

Dafür taugt dann eine Hausaufgabe ganz gut.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

FPGA zum Spass schrieb im Beitrag #5879301:
> dann wird ein Lösch Latch gesetzt, das erst zurückgenommen wird wenn
> wieder alle Bits 0 sind.
Aber das ist m.E. eigentlich nur eine lange Schreibweise für "Obacht, 
Glitch!"

> Ok, die Simulation ist an der Stelle mit "after x ps" getrickst
Dachte ich mir, das sieht allzu schön aus. Und so kann man sich auch 
einen Takt "simulieren"...  ;-)

von FPGA zum Spass (Gast)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
> Aber das ist m.E. eigentlich nur eine lange Schreibweise für "Obacht,
> Glitch!"

Du hast mich verunsichert, habe es jetzt extra nochmal geprüft.

Randbedingung: die Signallaufzeit ist jetzt bei jeder(!) Zuweisung 
zufällig zwischen 50 und 50000ps.
Mehr muss man denke ich nicht abdecken.

Hat ein paar Millionen Fälle durchlaufen, alle unproblemtisch.

Im Bild ein Beispieldurchlauf, im Anhang der Code für die 
Schiebestrecke.

von Duke Scarring (Gast)


Lesenswert?

Vielleicht verstehe ich etwas falsch, aber m.E. kann man im Modelsim 
keine Glitches simulieren. Der Simulator arbeitet mit einer gewählten 
Zeitauflösung. Und falls doch mehrere Ereignisse zum 'gleichen 
Zeitpunkt' stattfinden, gibt es noch die Delta-Cycles.
Was ich damit sagen will: es gibt immer ein genau definiertes Vorher und 
ein Nachher.

In der Realität gibt es aber u.a.
1. Laufzeitunterschiede zu den verschiedenen Signalsenken (Spannungs- 
und Temperaturabhängig)
2. Glitches, wenn sich z.B. beide Eingänge eines XOR-Gatters (fast) 
gleichzeitig ändern
3. Setup- und Holdzeiten, die Einzuhalten sind, um Datenintegrität zu 
gewährleisten

Alles Dinge, die in der Simulation nicht berücksichtigt werden.

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

In der Praxis werden diese Abfragen schiefgehen, weil du den Vergleicher 
nicht glutenfrei bekommst:
if (latchchain > 256) then...
Denn hinter diesem Vergleicher bzw. dem 8-fach AND bzw. NOR verstecken 
sich ja wieder nur zusammengeschaltete LUTs, die per se nicht als 
glitchfrei angesehen werden dürfen (spätestens dann nicht mehr, wenn 
sich mehr als 1 Eingang "gleichzeitig" ändert).

: Bearbeitet durch Moderator
von FPGA zum Spass (Gast)


Lesenswert?

Ok, was wenn ich den Vergleicher mit einzelnen And/Or aufbaue und diese 
jeweils mit randomisierten Delays verdrahte.

Dann sollte ich mich doch drauf verlassen können, nicht?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

FPGA zum Spass schrieb im Beitrag #5879960:
> Ok, was wenn ich den Vergleicher mit einzelnen And/Or aufbaue
Ja, das geht ja wiederum nur in der Theorie, weil sie im realen Leben 
sprich im FPGA ja wieder zu LUTs zusammengefasst oder mit LUTs 
realisiert werden. Du müsstest dann also eine Zielarchitektur haben, wo 
du ein einzelnes AND auch als solche Komponente instantiieren kannst.

von FPGA zum Spass (Gast)


Lesenswert?

Ok, zurück zum Start:

Statt:
if  Latchchain > 256
machen wir
if Latchchain(8) = '1'

D.h. man muss nur ein Bit prüfen -> unproblemematisch.

Abgesehen davon wäre ja selbst ein kurzer Glitch auf der Resultleitung 
nicht so schlimm, prellt halt die Kaffeeausgabe kurz :)

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen ich habe den ersten Teil im Anhang... danach hänge ich 
aber und versuche es immer wieder neu...

Grüße

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite



Lesenswert?

Martin schrieb:
> ich habe den ersten Teil im Anhang...
Bitte VHDL-Sourcecode als VHDL-Dateie anhängen (oder kurze Schnipsel mit 
den [vhdl] Tags umrahmen). Und Screenshots als PNG.

> ich habe den ersten Teil im Anhang...
Warum hast du da integer als Ports?
Und warum heißen die Münzprüfereingänge a, b und c, wenn du einfach 
richtig lesbare Zeichenkombinationen vergeben könntest.

> danach hänge ich aber
Ganz offenbar "hängt" es da nicht nur am VHDL-Code, sondern weit vorher 
daran, dass du noch keine Vorstellung hast, WAS du da eigentlich mit 
VHDL beschreiben willst.
Es kamen hier schon einige Vorschläge, wie die Aufgabe gelöst werden 
könnte.
Zeichne deine Gedanken zu deiner Hardware mal als Blockdiagramm mit 
Steuersignalen auf ein Blatt Papier. Oder denk dir einen 
Zustandsautomaten aus, der die möglichen Einwurf- und 
Ausgabekombinationen einzeln durchläuft und beschreibe den. Das wird 
zwar etwas umfänglich, ist aber ganz einfach lehrbuchmäßig realisierbar, 
denn es kann nur 4 "Endzustände" geben.

> danach hänge ich aber
Wenn du selber diese Aufgabe zum Lernen realisieren willst, dann musst 
du da schon ein wenig mehr ranklotzen.
Es bringt nichts, wenn ich einfach meine Lösung(en) hier poste, denn 
dann hättest du ja nur was zum Angucken, aber selber nichts gelernt...

BTW: die Sache mit der blinkenden LED und dem Lauflicht usw. hast du 
schon selber schon mal inklusive Simulation und Implementierung 
realisiert? Oder ist dieser Kafee-Automat dein erster VHDL-Kontakt?

FPGA zum Spass schrieb im Beitrag #5880119:
> if  Latchchain > 256 machen wir
> if Latchchain(8) = '1'
> D.h. man muss nur ein Bit prüfen -> unproblemematisch.
Der Gedanke kam mir auch sofort, aber dadurch entschärft sich lediglich 
die Ermittlung der "Obergrenze". Es bleibt aber noch der zweite 
"Vergleicher auf 0" für den Clear, der in beiden Fällen über mehrere 
hintereinander geschaltete LUTs/Multiplexer realisiert ist. Ich würde 
nicht garantieren, dass das ohne störende Glitches abgeht und nicht 
zwischendurch mal "zufällig" ein paar der Latches auf zufällige Werte 
gesetzt werden. Man müsste das Design tatsächlich mal real 
implementieren und auf Hardware loslassen...

: Bearbeitet durch Moderator
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

nfet schrieb:
> Ich würde einfach die ganze statemachine malen und implementieren.
Auch das ist recht einfach. Allerdings muss man hier z.B. die eigentlich 
unnötige Überzahlung von z.B. 50C-50C-1E oder 50C-2E oder sogar 
50C-50C-2E auch berücksichtigen (siehe Screenshot). Trotzdem kommt man 
übersichtlich mit 7 Zuständen aus, wobei die Ausgabe mit 4 Zuständen 
"A..." eigentlich unnötig ausufernd beschrieben ist:
1
type zustaende is (warte, C50, E1, AK, AKC50, AKE1, AKE1C50);

Das lässt sich dann leicht (allerdings auf Kosten der Leserlichkeit) 
wieder auf die "unterbezahlten" 3 Zustände verkürzen:
1
type zustaende is (warte, C50, E1);

Auch wenn ich mich wiederhole: das ist eine nette Aufgabe und 
Fingerübung (gerade für die Frühstückspause), wobei und weil trotz der 
überschaubaren Anzahl von Signalen für ein einfaches Ergebnis schon 
vor der ersten VHDL-Zeile Gehirnschmalz eingesetzt werden muss...  ;-)

: Bearbeitet durch Moderator
von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Eine Kaffeeautomatensteuerung im FPGA. Wo bleibt die Münzenentprellung 
und Erkennung von Falschgeld?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite



Lesenswert?

Hier mal ein paar Lösungsansätze und die passende Testbench, nachdem vom 
Martin offenbar nichts mehr kommt...   ;-)

von Christophz (Gast)


Lesenswert?

Lothar M. schrieb:
> Aber jetzt muss erst mal jemand die simulierten 6 Kaffee trinken

Danke Lothar dass du den unerschöpflichen (simulierten) Kaffeenachschub 
mit uns allen teilst!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.