Forum: FPGA, VHDL & Co. Zahlenraum begrenzen


von Peter Z. (Gast)


Lesenswert?

Hi, ich habe mal eine Frage zu so vhdl variablen
Würde in C so was schreiben:
1
A = (A + B) % 100;
Konnte ich den Zahlenbereich in vhdl auf 0..99 begrenzen indem ich A 
definiere als
Int(0..99) ?
Ich hoffe man kann das verstehen, ich sehe mich in vhdl als absoluten 
Anfänger...

von Frank (Gast)


Lesenswert?

Peter Z. schrieb:
> Würde in C so was schreiben:A = (A + B) % 100;

Die Frage die ich mir stelle, ist das wirklich das was du haben 
möchtest? Möchtest du, wenn ein zu großes Ergebnis drin steht, dass 
einfach modulo gerechnet wird? Dann schau mal wie sie bei einer Division 
den Rest bilden.

Oder möchtest du dass Saturiert wird?

von Peter Z. (Gast)


Lesenswert?

Nein, ich will wirklich Modulo 100.

von Timmo H. (masterfx)


Lesenswert?

variable x: integer range 0 to 100;
??

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


Lesenswert?

Timmo H. schrieb:
> variable x: integer range 0 to 100;
Diese "Begrenzung" interessiert aber ausschließlich den Simulator zur 
Bereichsüberwachung. Der Synthesizer braucht hier sowieso 7 Bit. Und 
zudem wäre hier "0 to 99" richtig...

Peter Z. schrieb:
> Nein, ich will wirklich Modulo 100.
Ein Modulo ist eine Division. Und eine Division in Hardware ist teuer. 
Siehe da auch den Beitrag "Division in VHDL"

Was mich interessiert:
Wofür brauchst du sowas? Kannst du das mich anders lösen?

: Bearbeitet durch Moderator
von Peter Z. (Gast)


Lesenswert?

Soll eine Art DDS fuer Arme (mich) werden. Die Sinustabelle soll 100 
Werte haben. Wenn die Tabelle 2 ^ n Werte hat, stimmen die erzeugten 
Frequenzen nicht so ganz exakt!
Eigentlich braucht's auch keine exakte Modulo sondern dieser C Code tuts 
auch:
1
uint8_t A,B;
2
//* dies und das
3
4
{
5
    A += B;
6
    if(A > 99) A -= 100;
7
}
Das wollte ich jetzt in vhdl realisieren...
Würde
1
variable A:integer range 0 to 99;
das machen was ich will?

von Peter Z. (Gast)


Lesenswert?

Lothar M. schrieb:
> Timmo H. schrieb:
> variable x: integer range 0 to 99;
>
> Diese "Begrenzung" interessiert aber ausschließlich den Simulator zur
> Bereichsüberwachung. Der Synthesizer braucht hier sowieso 7 Bit.

@Lothar M. :Danke jetzt habe ich das kapiert.
Dein vhdl code in
" vhdl duty cycle 10%"
 hat mir sehr geholfen :-)

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


Lesenswert?

Peter Z. schrieb:
> Die Sinustabelle soll 100 Werte haben.
Denk doch nicht so menschlich, sondern so, dass diese Denkweise einfach 
in Hardware umsetzbar ist. Also immer in Zweierpotenzen: ...32, 64, 
128, 256, 512...
Das sind ideale Größen, denn dann ergibt sich der Wraparound ganz 
automatisch durch simples Immerweiterzählen...

> Soll eine Art DDS fuer Arme (mich) werden.
Sieh dich mal auf meiner HP um, dort wird der Überlauf der DDFS genau so 
gemacht wie eben beschrieben:
http://www.lothar-miller.de/s9y/categories/31-DDFS

: Bearbeitet durch Moderator
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.