Zahlenraum begrenzen

Gast #4569524
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...
Gast #4569533
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?
Moderator (Firma: Titel) Persönliche Seite #4569621
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?
Gast #4569701
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?
Gast #4569724
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 :-)
Moderator (Firma: Titel) Persönliche Seite #4569781
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

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