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


von Daniel H. (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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"  ;-)

von Mike (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.