mikrocontroller.net

Forum: FPGA, VHDL & Co. Dezimalzahl zerschneiden


Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

gibt es eine Möglichekeit eine Dezimalzahl zu "zerhacken"? Also z.B. 
würde gerne eine zweistellige Zahl in 2 verschiende Signale legen.

45 z.B. => Z1 = 4, Z2 = 5.

Gibt es da einen Befehl in VHDL? Bisher habe ich nichts gefunden.

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich würde es über einfache rechnungen machen. je nach anzahl der 
stellen halt erstmal z.B. -100 rechnen und einen zähler mitlaufen 
lassen, so oft diese operation geht bis die zahl <100 ist. anschließend 
das gleiche mit -10 machen und einen weiteren zähler mitlaufen lassen 
und dann mit -1. und die werte der zähler is dann die "zerhackte" 
dezimalzahl.

so zumindest mein erster gedanke.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robert T. wrote:
> Gibt es da einen Befehl in VHDL? Bisher habe ich nichts gefunden.
Jein.
Was du willst ist eine Division durch 10.
Die Division an sich gibt es in VHDL (das ist das '/').
Aber der Haken an der Sache: die ist nicht synthetisierbar :-(

Am einfachsten ist die Zählermethode, wie von Nephilim beschreiben. 
Allerdings ist die Laufzeit u.U. recht lang :-/

Deterministischer ist da eine Radix-2 Division, allerdings ist die 
Komplexität schon deutlich höher.

Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, danke für die Antwort. Diesen Ansatz hatte ich 2 Minuten nach dieser 
Frage im Forum entdeckt. Andere Idee:

Könnte ich meinen Zähler als std_logic_vector(7 downto 0) laufen lassen 
und von diesem dann Z1 <= xy_std_logic_vector(7 downto 4) und Z2 <= 
yx_std_logic_vecotor(3 downto 0) "cutten".

Oder macht man sowas nicht?

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Z1 und Z2 jeweils nur Ziffern von 0 bis 9 enthalten sollen, dann 
nennt man das BCD Codierung.

Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also eigentlich will ich eine ganz einfache Anzeige auf einem 7-Segment 
Display haben. Und da dachte ich mir (ohne Überlauf und Instanzierungen 
usw.) könnte ich einfach meinen Zähler zerschneiden und dann auf meine 
beiden (oder eventuell mehr) Anzeigen bringen.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also da gibt es zwei einfache Moeglichkeiten:

a) Du zeigst die Zahl nicht dezimal sondern hexadezimal an, dann kannst 
du direkt jeweils vier Bit breite Stuecke deines Zaehlers auf die 
Anzeige legen

b) Du verwendest mehrere Counter, die jeweils von 0 bis 9 zaehlen, dann 
zurueckgesetzt werden und den jeweils hoeherwertigen um eins erhoehen 
(das ist dann das BCD-Format)

und eine kompliziertere:

c) Einen grossen Counter und dann eine mehr oder weniger aufwendige 
Logik die den grossen Vektor in die einzelnen Ziffern zerlegt wie oben 
beschrieben.

Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank. Ich denke ich werde jetzt mit die Variante mit den 2 
Zählern ausprobieren.

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.