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


von Der A. (vimes_ankh)


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
1
signal <= signal + 8;
 erhöhe? Oder muss ich mir zunächst einen kleinen zähler 
"zusammenbauen".
Vielen Dank

von Gargamel (Gast)


Lesenswert?

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

Entweder du machst es so:
1
signal : unsigned (31 downto 0);
2
[...]
3
signal <= signal + conv_unsigned(8,32);
oder
1
signal : integer;
2
[...]
3
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

von Falk (Gast)


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

von Gargamel (Gast)


Lesenswert?

Prima - dann hab ich auch was dazugelernt :-)

gruß
Gargamel

von Rick Dangerus (Gast)


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
1
use IEEE.numeric_std.ALL;
mit den entsprechnden Konvertierungsfunktionen. (Die zugegebenermaßen in 
Verschachtelung nicht direkt lesefreundlich sind.)


Rick

von Der A. (vimes_ankh)


Lesenswert?

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

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.