Forum: FPGA, VHDL & Co. VHDL Zähler inkrementieren


von Manuel (Gast)


Lesenswert?

Hallo!

Ich möchte mit einem Zähler die Adresse eines SRAMs erzeugen.

mit

...
if (risign_edge(clk) ) then
  address <= address + 1;
  data <= address (7 downto 0);
end if;
...

habe ich ja das Problem das der Prozess die erste Adresse auslässt da 
sich ja die Adresse schon beim eintreten der ersten Clockedge erhöht.

Gibt es eine eine einfache möglichkeit das die Adresse erst beim 
nächsten Durchlauf erhöht wird? Ich habe schon überlegt mit -1 
anzufangen; gefallt mir aber irgendwie nicht...

Viele Grüße
  Manuel

von Klaus F. (kfalser)


Lesenswert?

Die Adresse address wird zwar erhöht, aber data bekommt noch die nicht 
erhöhte Adresse !
Das ist bei VHDL so.

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


Lesenswert?

Machs so (concurrent):
1
  process 
2
  :
3
    if rising_edge(clk) then
4
      address <= address+1; 
5
    end if;
6
  end process;
7
  :
8
  data <= address(7 downto 0);

Oder so (durch die Brust ins Auge):
1
  process 
2
  :
3
    if rising_edge(clk) then
4
      address <= address+1; 
5
      data    <= address(7 downto 0)+1;
6
    end if;
7
  end process;
8
  :

von Gast (Gast)


Lesenswert?

Das ist aber nicht dasselbe!

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


Lesenswert?

Gast wrote:
> Das ist aber nicht dasselbe!
Was ist nicht das selbe wie was?

Also gut.
Manuel hat noch ein anderes Problem, darauf wir er später noch kommen. 
Helfen wir ihm erst mal mit dem Zähler. richtig schön wäre es doch, wenn 
da ein Zähler wäre, und aus dem die Adresse und die Daten erzeugt 
würden:
1
  process 
2
  :
3
    if rising_edge(clk) then
4
      cnt <= cnt+1; 
5
    end if;
6
  end process;
7
  :
8
  address <= cnt; 
9
  data    <= cnt(7 downto 0);
Jetzt laufen die beiden synchron und auch bei 0 los.

von Der Besucher (Gast)


Lesenswert?

Was soll diese Zeile eigentlich bewirken?

data <= address (7 downto 0);

Da wird den 8 Bit Vektor Data die unteren 8 Bit des Adressvektors 
zugewiesen.
Also das ist kein Speicherzugriff. Der müsste irgendwie so ausssehen:

data <= sram[address];

Ich denke damit ergibt sich dann das ganze rumgewurschtel.

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


Lesenswert?

> Was soll diese Zeile eigentlich bewirken?
>>>> Ich möchte mit einem Zähler die Adresse eines SRAMs erzeugen.
Offenbar will er an die Adresse 0 das Datum 0 schreiben,
an die Adresse 1 den Wert 1 uswusf.
Nach der originalen Lösung waren die Daten und die Adressen um 1 
versetzt.

> data <= sram[address];
angenommen, sram wäre ein std_logic_vector Array
1
data <= sram(to_integer(unsigned(address)));

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.