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

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.