Hallo,
viele Leute die ich gefragt habe meinen ein normales Text Display (2x16)
mit HDxxx Controller sei per µC viel einfacher anzusteuern als mit einem
FPGA?
Das konnte ich nicht glauben...
Haber gerade mal geschaut.... Xilinxs Starterboard 3E verwendet einen
Softcore um das Display anzusteuern, es gibt aber auch VHDL Code im
Netz.
Ist das wirklich soooo schwierig? Was macht es schwieriger?
In VHDL ist ein sequenzieller Ablauf (auch mit Verschlachtelungen) sehr
einfach zu implementieren, wenn man sich einiger Hilfsmittel bedient.
Solche Sachen kann man leicht mit Excel machen, das als Codesynthesizer
fungiert und die Enumeration von states, die Abfragen und die Sprünge zu
den nächsten states automatisch deklariert und den Code erzeugt. Das hat
aber seine Grenzen, weil es früher oder später unübersichtlich wird und
nicht so gut pflegbar ist.
Alles, was langsam genug ist, sollte mit einer flexiblen state machine
bedient werden, die den Ablauf von der Generation des Timings trennt,
weil sich der Code sonst sehr schnell aufbläht und die Zusammenfassung
von Redundanz durch die Synthese zu oxorbtanten Synthesezeiten führt. In
der Ablaufsteuerung sitzen dann abstrakte Codes=Befehle, ihrerseits
sequenziell abgearbeitet werden und die durch den Einsprung in die
states der untergeordneten state machine den Ablauf regeln. Das bläht
zwar die Verwaltung auf, führt aber letztlich zu quantitav weniger Code.
Es wird quasi in code-Intelligenz investiert und nicht in die Menge.
Die Frage ist dann immer, ob man das alles selber implementieren muss,
oder ob die Komplexität soviele "Befehle" erfordert, dass man nicht
besser auf einen vorgefertigen Softcore zurückgreift.
Bei einem einfachen LCD Controller, der nur ein bischen was anzeigt,
würde ich es noch in VHDL machen. Aufwändige Init kann man mit einem
sequenziell ablaufenden ROM-zugriff erschlagen. Wenn aber ständig
unregelmässige Aktualisierungen vorkommen und auch noch unterschiedliche
Arten von Anzeigeoptionen (Fliesstext, blinkender Text, Rolltext),
verwendet werden, dann wird die Steuerung einfach zu komplex und man
muss irgendeine Art von Softcore implementieren.
Wenn man über dies noch mit virtuellen Datenstrukturen arbeitet und z.B.
String-Verarbeitung braucht, ist ein dedizierter Softcore unerlässlich,
weil man dann die Methoden- und Strukturunterstützung in Sachen
Variablen der jeweiligen Hochsprache verwenden kann.
J. S. schrieb:> die Enumeration von states, die Abfragen und die Sprünge zu> den nächsten states automatisch deklariert und den Code erzeugt.
Wie sieht denn das genau aus? Hast du mal ein Beispiel oder ein Template
dafür? Das würde mich echt interessieren, weil ich gerade an einem
ähnlichen Problem sitze.
Du machst Dir ein Excel in der vorne die Zeilennummern der Excelzeile,
dann die Quell- und die Ziel-states stehen. Mit Zahlen2Text-Konversion
kannst Du diese automatisch nummerieren. Oder schreibst die state namen
manuell vorne hin und adressierst den ausprung per "=XY".
Den gesamten VHDL Konstrukt baust du ein einer Zeile auf. Geht alles mit
Textsynthese.
dito schrieb:> oder ein Template
Mehrere. Die haben aber Zeit gekostet und stellen einen Teil meines
Knowhows dar, das ich den Kunden verkaufe :-)
J. S. schrieb:> Du machst Dir ein Excel in der vorne die Zeilennummern der Excelzeile,> dann die Quell- und die Ziel-states stehen. Mit Zahlen2Text-Konversion> kannst Du diese automatisch nummerieren. Oder schreibst die state namen> manuell vorne hin und adressierst den ausprung per "=XY".>> Den gesamten VHDL Konstrukt baust du ein einer Zeile auf. Geht alles mit> Textsynthese.
Ja, so ähnlich mache ich das auch. Dachte schon ich wäre damit alleine.
Schön zu sehen, dass andere das auch machen ;-)
J. S. schrieb:> Mehrere. Die haben aber Zeit gekostet und stellen einen Teil meines> Knowhows dar, das ich den Kunden verkaufe :-)
Na gut, dann will da mal nicht weiter nachbohren.
habichvergessen schrieb:> Ist das wirklich soooo schwierig? Was macht es schwieriger?
So schwer ist es nicht, außer man versucht es "stur nach Anleitung" wie
in einer Programmiersprache, es geht aber auch recht einfach über einen
Zustandsautomaten siehe: Beitrag "[VHDL] 16x2 LCD Textcontroller / HD44780"
(sehe gerade das Lothar ein ähnlichen Ansatz verfolgt hat). Wichtig
dabei ist nur sich klar zu machen, dass "mindestens 40µS" nicht bedeutet
dass man nicht auch länger warten könnte.
J. S. schrieb:> Solche Sachen kann man leicht mit Excel machen, das als Codesynthesizer> fungiert und die Enumeration von states, die Abfragen und die Sprünge zu> den nächsten states automatisch deklariert und den Code erzeugt.
Excelbasierter Spagetticode Generator? Seriously? Ich hoffe ich muss nie
an einem Projekt arbeiten, an dem du vorher gesessen hast ;-)
Klaus schrieb:> Excelbasierter Spagetticode Generator? Seriously? Ich hoffe ich muss nie> an einem Projekt arbeiten, an dem du vorher gesessen hast ;-)
Es geht darum, sich in den Fällen, in denen man normale FSMs nutzt, die
Tipperei und eventuelle Fehler zu ersparen. Das Einfügen um
Umnummerieren von states, geht einfacher und ohne Copy&paste-Fehler.
Dasselbe gilt bei rechnenden pipelines mit ihren verzögerten Werten, die
zwischengespeichert werden müssen, um sie in Folgetakten zu verarbeiten.
Da habe ich in 15 Jahren kein besseres Entwurfsystem gefunden.
dito schrieb:> Wenn er die Excel-Datei mitliefert, ist es doch die beste Dokumentation.
Eben, die ist aussagefähiger, als das Gewirr von Pfeilen in vielen state
diagrammen und eignet sich sehr gut, um die Übersicht zu behalten, weil
auf dem ersten Blatt nur die wesentlichen Dinge zu sehen sind, und
Code-Konstrukte nicht sichtbar sind.
> Excelbasierter Spagetticode Generator? Seriously
Also ich würde ja auch gern mal ein Beispiel dazu sehen.
Meine States in meinen FSM haben keine Nummern, sondern lesbare Namen.
Und bei rechnenden Pipelines, gibt es zu jedem Wert das passende
enable und es wird erst weitergerechnet, wenn das enable hinten
wieder rauskommt. Da ist es egal ob die Berechnung zwei, drei oder 100
Takte braucht.
Zum Originalposter:
Mit zwei aufeinander aufbauenden FSM läßt sich auch ein Textdisplay
relativ übersichtlich ansteuern. Das ist aber nur bedingt
Einsteigertauglich.