mikrocontroller.net

Forum: FPGA, VHDL & Co. Adress Zähler in VHDL


Autor: Der Anfänger (vimes_ankh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,
ich will von einem IPCore Daten on the fly in einen Speicher streamen. 
Dazu benötige ich einen Adresszähler, der nach jedem Schreibvorgang um 8 
erhöht wird.
Funktioniert das mit einem signal, das ich innerhalb eines Prozesses mit
signal <= signal + 8;
 erhöhe? Oder muss ich mir zunächst einen kleinen zähler 
"zusammenbauen".
Vielen Dank

Autor: Gargamel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann VHDL normalerweise schon ... die Schreibweise
>> signal <= signal + 8;
wird aber so nicht funktionieren.

Entweder du machst es so:
signal : unsigned (31 downto 0);
[...]
signal <= signal + conv_unsigned(8,32);
oder
signal : integer;
[...]
signal <= signal + 8;
und musst signal dann noch nach unsigned oder std_logic_vector 
konvertieren.

Google mal nach conv_unsigned, to_integer usw ... da gibts ein Haufen 
Funktionen zum umwandeln und ich kann mir das auch nicht merken ohne was 
zu verdrehen

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Gargamel

>Das kann VHDL normalerweise schon ... die Schreibweise
>>> signal <= signal + 8;
>wird aber so nicht funktionieren.

Sagt wer?
Das geht wunderbar. Es werden ledigleich die Standardbibliotheken 
benötigt.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

>signal <= signal + conv_unsigned(8,32);

Viel zu umständlich.

>signal <= signal + 8;

>und musst signal dann noch nach unsigned oder std_logic_vector
>konvertieren.

Dito.

signal <= signal + 8;

Geht wunderbar. Lediglich direkte Zuweisungen brauchen die Umwandlung 
oder einen Trick.

signal = 0 + 123;    -- direkte Zuweisung

MFG
Falk

Autor: Gargamel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prima - dann hab ich auch was dazugelernt :-)

gruß
Gargamel

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk:
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

sind herstellerspezifische Erweiterungen und sind trotz des IEEE davor 
kein(!) IEEE Standard, bitte nicht empfehlen.

Wenn es auf allen Simulatoren/Synthesizern sauber laufen soll verwende
use IEEE.numeric_std.ALL;
mit den entsprechnden Konvertierungsfunktionen. (Die zugegebenermaßen in 
Verschachtelung nicht direkt lesefreundlich sind.)


Rick

Autor: Der Anfänger (vimes_ankh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für eure Antworten, ich werde es ausprobieren, sobald ich 
wieder vor meinem XUP-Board sitze. Super Forum übrigens!

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.