Hallo Max,
deinem Code zufolge kommst du von der Software-Seite und schreibst so
ziemlich den erster VHDL-Code. Macht nix, so ähnlich habe ich auch vor
einiger Zeit angefangen.
Daher erst mal zu deinem Code:
Was du in deinem Code beschrieben hast, ist ein Wandler, der in EINEM
Takt aus einer n-bit Binärzahl eine m-Digit Dezimalzahl berechnen soll.
Selbst wenn dein Syntheseprogramm Dividierer bauen könnte, würde das die
Kapazität deines FPGAs wahrscheinlich sprengen.
Bei der Hardware-Beschreibung musst du dir eine völlig neue
Vorgehensweise angewöhnen - deshalb auch Hardware-BESCHREIBUNG und
nicht Hardware-PROGRAMMIERUNG. Hardware-Kenntnisse sind unbedingt
erforderlich. Also im Zweifelsfall erst mal ein Buch über die Hardware
der Digitaltechnik lesen, bevor du dich weiter mit VHDL befasst.
Nun zum Vorgehen:
1. Kann man Software in Hochsprachen nahezu unabhängig vom Prozessor
schreiben, so stellt sich bei der Hardware-Beschreibung erst einmal die
Frage, welche Ressourcen der zu verwendende Baustein hat bzw. welchen
Baustein man sinnvollerweise einsetzt (ich weiß, da beißt sich die
Katze schon in den Schwanz...). Z. B. D-Flip-Flops mit synchronem oder
asynchronem Set/Preset/Clear/Reset, Funktionsgeneratoren (LUTs) mit
max. 4 Eingängen, RAM-Blöcke, Multiplizierer und noch ein paar
Spezialitäten => Unbedingt Datenblatt lesen!
Du wirst sehen, einen Dividierer hat dein FPGA nicht (meines Wissens
kein FPGA), außerdem bräuchtest du bei deinem Code gleich 4 davon.
VHDL ist zwar prinzipiell portierbar, aber du wirst bald feststellen,
dass du einige Module doch für jede Hardware anpassen musst, um Größe
und Geschwindigkeit zu optimieren.
2. Wie schnell muss eine Operation ausgeführt werden? Sehr schnell =>
parallele Verarbeitung, i. A. hoher Resourcenbedarf (insbes. viele
LUTs), langsam => Aufteilung der Operation auf mehrere Takte (i. A.
wesentlich weniger LUTs, vielleicht ein paar zusätzliche FFs zur
Speicherung von Zwischenergebnissen).
3. Ggf. Algorithmus überlegen oder suchen. Division z. B.
http://www.ingorohloff.de/tgi3/node7.html, Binär zu BCD z. B.
http://www2.informatik.uni-jena.de/~ct_mgr/a1/vhdl/binbcdn.vhd
Zugegeben, das ist nicht wirklich primitiv - aber so ist die
Hardware-Welt. Für dein Problem ist das von T. M. angesprochene
Verfahren sicher einfacher zu codieren und weniger resourcenintensiv,
allerdings eben relativ langsam (s. 2.): Es benötigt bei 4 Digits max.
10000 Takte für eine Wandlung.
Gruß,
Thomas