mikrocontroller.net

Forum: FPGA, VHDL & Co. Konstanten in VHDL


Autor: befro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

wie kann ich den Vorteilerwert (1667) in folgendem VHDL Code als 
Konstante Dezimalzahl definieren, damit man nicht jedesmal den Wert in 
das Binärsystem umrechnen muss?
  serialClkDivider: process (clkIn)

  begin

      if RISING_EDGE(clkIn) then

        if(clkDivider =  "11010000011") then -- divider = 1667 == 9600Baud@16MHz
          clkDivider <= "00000000000";

          shiftClk <= '1';
        else
          clkDivider <= clkDivider + 1;

          shiftClk <= '0';
        end if;

      end if;

  end process serialClkDivider;

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Indem Du die Typen "signed" oder "unsigned" aus dem numeric_std package 
verwendest.
Der Compiler kann nämlich nicht schmecken, welche Bedeutung die Bits in 
clkDivider haben.
Dann kannst Du schreiben :
 if (clkDivider =  1667) then  
     clkDivider <= to_unsigned(0, clkDivider'length);
  ....

Autor: befro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, vielen Dank, ich werde das einbauen.

Gruß,
befro

Autor: befro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interessant finde ich, dass man beim Vergleich scheinbar keine 
Typconversion braucht.

Autor: Chef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur scheinbar nicht! Die Typconversion laeuft implizit ueber 
Deklararion, sonst musst Du eben zu Fuss:

clkDivider <= conv_std_logic_vector(unsigned(clkDivider) + 1,16);

Das ist aber dumm, wenn man spaeter mal die Aufloesung der Bits aendern 
will.

Autor: befro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 if (clkDivider =  1667) then 

Bei der Methode scheint es mir allerdings etwas als Nachteil, dass der 
Wert im Queltext steht, Da wäre so was ähnliches wie ein #define in C 
besser, bei dem man am Anfang vom Quelltext den Wert definieren kann.

Autor: Chef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dan halt ein Zwischensignal, das ganz oben im Code steht oder gleich ein 
generic

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.