mikrocontroller.net

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


Autor: Thomas Stoll (tstoll)
Datum:

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

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

Bewertung
0 lesenswert
nicht lesenswert
So
 if datain = (others=>'1') then
oder so
 if datain = (datain'range=>'1') then

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

Autor: Thomas Stoll (tstoll)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

Thomas

Autor: Thomas Stoll (tstoll)
Datum:

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

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht mit attributen :

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

Autor: Thomas Stoll (tstoll)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die rasche Antwort!

Autor: Thomas Stoll (tstoll)
Datum:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
a <= (others => '0') ?

Autor: Klaus Falser (kfalser)
Datum:

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

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.