Forum: FPGA, VHDL & Co. Konstanten in VHDL


von befro (Gast)


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?
1
  serialClkDivider: process (clkIn)
2
3
  begin
4
5
      if RISING_EDGE(clkIn) then
6
7
        if(clkDivider =  "11010000011") then -- divider = 1667 == 9600Baud@16MHz
8
          clkDivider <= "00000000000";
9
10
          shiftClk <= '1';
11
        else
12
          clkDivider <= clkDivider + 1;
13
14
          shiftClk <= '0';
15
        end if;
16
17
      end if;
18
19
  end process serialClkDivider;

von Klaus F. (kfalser)


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 :
1
 if (clkDivider =  1667) then  
2
     clkDivider <= to_unsigned(0, clkDivider'length);
3
  ....

von befro (Gast)


Lesenswert?

Ah, vielen Dank, ich werde das einbauen.

Gruß,
befro

von befro (Gast)


Lesenswert?

Interessant finde ich, dass man beim Vergleich scheinbar keine 
Typconversion braucht.

von Chef (Gast)


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.

von befro (Gast)


Lesenswert?

1
 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.

von Chef (Gast)


Lesenswert?

dan halt ein Zwischensignal, das ganz oben im Code steht oder gleich ein 
generic

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.