mikrocontroller.net

Forum: FPGA, VHDL & Co. Rechnen im Hex-Dezimalsystem mit Dezimalanzeige


Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Dezimalanzeige mit vier Stellen. Rechnen tue ich aber im
Hex-Dezimalsystem...

z.B. habe ich das Ergebnis BB8 ... anzeigen möchte ich aber die Zahl
3000

Wie kann ich das Problem lösen, wie macht es ein Taschenrechner?

Gruß
Bustle

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst die Zahl manuell zerlegen. Andere Möglichkeiten gibts nicht.

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaub ich bin zu blöd... wie kann ich das in VHDL lösen? Hätte auch
Multipliziereinheiten zur Verfügung, da ich ein XC3S400 verwende...

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moment mal...Da Du nichts von VHDL oder Ähnlichem erwähnt hast habe ich
vermutet, dass Du eigentlich ins uC Forum posten wolltest...
Wenns nun doch VHDL sein soll wird die Sache schon einfacher:
Im FPGA sind sowieso alle Zahlen binär. Nur in der Sprache VHDL gibts
verschiedene Datentypen. D.h. Dein Signal muss wohl std_logic_vector
sein, oder??
Dieses könnte man jetzt über einige Rechnerei und Zählerei in die
gewünschte Form bringen...

Verrate mir doch bitte mal, um was es geht. Ich vermute mal irgend ein
Zähler über 7-Segment Anzeigen, oder? Wenn das der Fall ist kann ich
Dir eine super Lösung ohne rumrechnen anbieten.

Daniel

Autor: T.M. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das kann man über Zähler lösen, für jede Dezimalstelle einen. Schau mal
in das File im Anhang, so hab ich das vor ner Weile mal gemacht. Ist
nicht perfekt, funktioniert aber. Man muss nur bedenken, dass das je
nach Größe der Zahl unterschiedlich lange dauert...


T.M.


=============================
http://editthis.info/freefpga
=============================

Autor: Juergen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit den Zählern scheint mir zwar recht schlau programmiert, aber die
konventionelle Methode über MUL/DIV scheint mir die schnellere, zumal
die Resourcen an MULs und DIVs geswitched werden können, wenn man es
stufenweise über eine FSM realisiert. Ausserdem dürfte eine solche
Anzeige ständig aktualisiert werden, wodurch sich pipelined divider
anbieten.

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin da nicht so führend drin. Zu dem Zeitpunkt des Codes hatte ich
auch nicht soviel Zeit mich mit Alternativen zu beschäftigen ;-) Welche
konventionelle Methode ist denn damit gemeint? Divisionen in VHDL sind
ja auch so ne Sache, wenn sie nicht grad durch Vielfache von 2 sind.


T.M.


=============================
http://editthis.info/freefpga
=============================

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, klar. Du meinst die Standardmethode mit den Wertigkeiten der
Binärzahl. Da hat man dann zwar eine Dezimalzahl, nur die müsste man
dann auch noch zerlegen für die Anzeige. Das macht die Methode mit den
Zählern schon automatisch. Deshalb hatte ich das auch so gemacht, wenn
ich mich nicht irre, ist fast schon wieder nen Jahr her... Bei meiner
Anwendung kam es auch nicht so auf Schnelligkeit drauf an, zumal das
Display ja eh nur aller paar ms neue Daten verträgt.


T.M.


=============================
http://editthis.info/freefpga
=============================

Autor: Juergen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich meinte einfach, an der n.-ten Stelle durch 10hoch n zu dividieren
und den Rest weiter zu berechnen. Ja nach Resorurcen im FPGA werden
Divider als LUTs realisiert und die nötigen Resourcen automatisch
multiplexed. Ansonsten kann man es auch als 4 stufige Schleife
definieren, die 2 Register, einen DIV, einen MUL und einen SUB hat.

Stelle 1 = HEX / 10000 (mit REST1 = HEX - 10.000 x Stelle1)
Stelle 2 = REST1 / 1000 ...
etc ...

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der letzte Lösungweg habe ich noch nicht ganz verstanden... z.B. hab ich
die Zahl 8B1...

Stelle 1 = 0
Stelle 2 = 0
Stelle 3 = 8 ... aber den Dezimalwert habe ich damit doch noch nicht.

Oder wie stellst du dir das dann weiter vor?

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In konventioneller Schaltungstechnik habe ich mal einen BCD zu
Binär-Wandler gebaut, nur mit einigen Binär-Addierern. Für jedes Bit
des BCD-Eingangs braucht man eine weitere Addiererstufe. Dasselbe
könnte man für die umgekehrte Richtung mit BCD-Addierern aufbauen. Zum
Beispiel für das Bit der Wertigkeit "16" wird die Konstante 16
addiert.
Das wäre die "massiv parallele" Variante. Das Gegenteil dazu wäre die
rein serielle Verarbeitung, wie es ein Mikrocontroller machen müßte. Im
FPGA gibt es noch beliebige Zwischenstufen.

Autor: schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde es so machen, wenn du auf drei Hex-Stellen begrenzt bist:
Beispiel 0xAB8

Nibbleweis dein Ergebnis betrachten:

A x 256 + B x 16 + 8

Braucht zwei Multiplizierer und zwei Addierer und die meisten FPGAs
haben sowas ja on Chip

Autor: schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, das war völliger quatsch!

Autor: schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Lösung mit den Zählern find ich klasse! Sehr schlau gemacht, da es
sehr ressourcenschonend ist.
Und ich denk, für ne Anzeige auch allemal schnell genug.
Die Wandlung für ne 3 Stellige Hexzahl dauert im Schlimmsten fall ja
nur ca. 80 us bei nem Systemtakt von 50 MHz

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie siehts mit dem package txt_util.vhd aus?
da gibts zb. folgende funktion,

-- converts integer to string, using base 10
function str(int: integer) return string;

erst hex nach int,
dann int nach string,
und dann die einzelnen charakter des strings auswerten und innen
std_logic_vector oder signed/unsigned konvertieren...

(wenn du bei deiner berechnung in hex bleiben möchtest)

gruß

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Steffen

hört sich interessant an. Was ist "txt_util.vhd" für ein Package? Ist
das bei der Xilinx-Software dabei? Finde es nämlich nicht...

Gruß
Bustle

Autor: Steffen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
nein, nicht bei der xilinx-software dabei... keine ahnung wer das mal
geschrieben hat, ich habe es mal hier gefunden
http://www.stefanvhdl.com/vhdl/vhdl/txt_util.vhd,
ist eine super ergänzung zur textio...

gruß

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...umfangreich... das muss ich mir mal ansehen, wenn ich wieder Zeit
hab. Vielen Dank, kann ich sicherlich brauchen. Sieht professionell
aus.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.