Modulo durch synthetisierbaren Algorithmus ersetzen

Gast #1073329
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
Moderator (Firma: Titel) Persönliche Seite #1073348
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"  ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren