mikrocontroller.net

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


Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Falser (kfalser)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Machs so (concurrent):
  process 
  :
    if rising_edge(clk) then
      address <= address+1; 
    end if;
  end process;
  :
  data <= address(7 downto 0);

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist aber nicht dasselbe!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
  process 
  :
    if rising_edge(clk) then
      cnt <= cnt+1; 
    end if;
  end process;
  :
  address <= cnt; 
  data    <= cnt(7 downto 0);
Jetzt laufen die beiden synchron und auch bei 0 los.

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
data <= sram(to_integer(unsigned(address)));

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.