Forum: FPGA, VHDL & Co. Abfragen von signalen unterschiedlicher Länge


von Thomas S. (tstoll)


Lesenswert?

Hallo -

ich habe folgendes Problem:

datain ist in einem package als std_logic_vector deklariert.
Die Länge von datain kann somit also im package geändert werden.


bisher war datain ein 16bit vector und ich konnte getrost folgendes 
abfragen:

if datain = (x"FFFF") then

wie schreibe ich das allgemein hin, um ebend nicht auf 16bit festgelegt 
zu sein, sondern ebend die Länges des datain auf F überprüft wird?

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


Lesenswert?

So
1
 if datain = (others=>'1') then
oder so
1
 if datain = (datain'range=>'1') then

Allerdings werden die Bits nicht auf x"F" geprüft, sondern auf '1'

von Thomas S. (tstoll)


Lesenswert?

Vielen Dank!

Thomas

von Thomas S. (tstoll)


Lesenswert?

Ich hätte noch eine weitere Frage was Deklarationen im package 
anbelangt:

Folgendes:

Ich habe folgende subtypes:

subtype tmp is std_logic_vector(15 downto 0);
subtype tmp2 is std_logic_vector(15 downto 0);

Ja nachdem wie groß tmp bzw. tmp1 gewählt werden
(also 15 downto 0 oder 7 downto 0 etc..)
soll ein subtype realisiert werden, der abhängig von den bit-breiten von
tmp und tmp1 ist..

Bsp:

subtype tmp is std_logic_vector(15 downto 0);
subtype tmp2 is std_logic_vector(15 downto 0);
subtype ergebnis is std_logic_vector(31 downto 0);

oder:

subtype tmp is std_logic_vector(7 downto 0);
subtype tmp2 is std_logic_vector(7 downto 0);
subtype ergebnis is std_logic_vector(15 downto 0);

wie kann ich für den subtype Ergebnis die Vectorlänge in Abhängigkeit 
von den Vectorlängen tmp und tmp1 angeben?

Grüße,
tOM

von Klaus F. (kfalser)


Lesenswert?

Das geht mit attributen :

subtype ergebnis is std_logic_vector((tmp'length*2)-1 downto 0);

von Thomas S. (tstoll)


Lesenswert?

Danke für die rasche Antwort!

von Thomas S. (tstoll)


Lesenswert?

Tschuldige..

Und wie fülle ich den Rest eines Vectors mit Nullen auf, wenn der Vector 
ein subtype ist?

subtype tmp is std_logic_vector(7 downto 0);


später im code:

signal a : std_logic_vector(10 downto 0);
..


a <= ('0' + tmp + "00");

die "00" muesste ich auch abhängig von der Vectorlänge von tmp machen..

von Gast (Gast)


Lesenswert?

a <= (others => '0') ?

von Klaus F. (kfalser)


Lesenswert?

a(10) <= '0';
a(9 downto 2) <= tmp;
a(1 downto 0) <= (others => '0');

Auch hier lassen sich die Indizes berechnen, z.B.:

a(9 downto 10-tmp'length) <= tmp;
a(9-tmp'length downto 0) <= (others => '0');

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.