mikrocontroller.net

Forum: FPGA, VHDL & Co. Modulo durch synthetisierbaren Algorithmus ersetzen


Autor: Daniel H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin ein Neuling in der VHDL Programmierung.
Jetzt habe ich das Problem, das Operationen mit Modulo nicht 
synthetisierbar sind. Deshalb suche ich nach einer Möglichkeit, den 
Modulo Operator durch etwas anderes zu ersetzen, z.B. eine Schleife.
Meine Versuche das zu erstzen haben bisher noch zu keinem konkreten 
Ergebniss geführt.
In diesem konkreten Fall soll ich die einzelnen Stellen einer 6 
stelligen Integer Zahl auswerten und übergeben.

Mit Modulo soweit ja kein Problem:

  HT  <=  X /(10**5);
  ZT  <= (X mod (10**5))/(10**4);
  T   <= (X mod (10**4))/(10**3);
  H   <= (X mod (10**3))/(10**2);
  Z   <= (X mod (10**2))/(10**1);
  E   <= (X mod 10);

Wie kann ich das denn so, z.B. in eine while-Schleife, schreiben?
Ich habe daran gedacht, pro Stelle die dementsprechende Potenz 
abzuziehen und die Abzüge mitzuzählen. Also z.B. 321456 - 100000 solange 
x < 100000 ist.
Wie übergebe ich denn dan meine Zählvariable?

Vielen Dank an alle für ihre Mühen

Viele Grüße
Daniel

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

Bewertung
0 lesenswert
nicht lesenswert
Daniel H. wrote:
> ich bin ein Neuling in der VHDL Programmierung.
> Jetzt habe ich das Problem, das Operationen mit Modulo nicht
> synthetisierbar sind. Deshalb suche ich nach einer Möglichkeit, den
> Modulo Operator durch etwas anderes zu ersetzen, z.B. eine Schleife.
Modulo ist das Abfallprodukt einer Division.
Und Divisionen sind (so ohne weiteres) nicht synthetisierbar.

Wenn Zeit für dich kein Problem darstellt, dann machs doch über 
Subtraktionen:
nimm die Ausgangszahl, und zieh solang 100000 ab, bis die Zahl negativ 
wird (unterläuft) und zähl die HT mit. Nimm dann den letzten Wert vor 
dem Unterlauf und zieh 10000 ab, bis die Zahl negativ wird und zähl 
dabei die ZT mit. Nimm dann die letzte Zahl vor dem Unterlauf und...

Dazu ist natürlich eine Statemachine nötig, die das Ganze steuert. Aber 
die würdest du für eine Division auch brauchen. Da ist also nichts mit 
"einfach so hinschreiben"  ;-)

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das ein Zähler ist über den zu volle Kontrolle hast, dann könntest 
du ihn auch gleich im BCD-Format zählen lassen.

Ansonsten z.B. mal hier schauen:

Beitrag "Zahlenausgabe"

INT nach BCD geht auch ohne Modulo und Division.

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.