www.mikrocontroller.net

Forum: FPGA, VHDL & Co. STD_LOGIC_VECTOR IF-Abrage (Syntax)


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Cihan Kalayci (lazoboy61)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

habe mal wieder eine kleine Frage, diesmal geht es um die Syntax in 
VHDL.

Ich habe mehrere Vektoren in meinem Design und frage manche in einer 
IF-ELSE Verzweigung ab.

Als Beispiel:
...
signal Vector: std_logic_vector (9 downto 0);
...
process(clk)
begin
if rising_edge(clk) then
...
   if Vector = "0000000000" then -- <----- Vektorabfrage
      ...
   end if;
...
end if; 
...
end process;
...

Es geht um die Vektor Abfrage. Wenn man einen Vektor mit 10 Bit hat ist 
die IF Abfrage einfach. Aber wenn man nun beispielsweise einen Vektor 
100 Bits hat, wie sollte man dies am besten Abfragen?
Alle Bits in der Abfrage ist mühselig (if "0000...0000").

Habe versucht dieses zu machen:
if Vektor = (others => '0') oder if Vektor = (others = '0')
doch hat leider nicht funkioniert.

Hat jemand hier die Lösung?
Danke im voraus.
Gruß Cihan

Autor: Marius Wensing (mw1987)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Cihan Kalayci schrieb:
> if Vektor = (others => '0') oder if Vektor = (others = '0')

Mach es so:
if Vektor = (Vektor'range => '0')

Autor: Stachele (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Dieses Thema wurde doch schon 100mal behandelt, einfach mal im forum 
suchen, bevor man fragt

Autor: Cihan Kalayci (lazoboy61)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich habe natürlich schon vorher gesucht, das ist selbstverständlich.
Doch leider die Antwort nicht gefunden.

In der Suche hatte ich immer so nach "std_logic_vector if abfrage" 
gesucht, doch leider nicht die Antwort wie Marius es schrieb gefunden.

Danke Marius, hat super geklappt. Auch ein Danke an dir Stachele.

Cihan

Autor: S. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
"If not vektor" müsste auch gehen, wenn es sich um Nullen dreht, oder 
"unsigned (vektor) = zahl"

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

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Cihan Kalayci schrieb:
> Danke Marius, hat super geklappt.
Zum Hintergrund:
http://www.lothar-miller.de/s9y/archives/28-Vektor...

Autor: Cihan Kalayci (lazoboy61)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Cihan Kalayci schrieb:
>> Danke Marius, hat super geklappt.
> Zum Hintergrund:
> http://www.lothar-miller.de/s9y/archives/28-Vektor...

sehr interressanter Link, aufklärend und ganz einfach zum Verstehen.

Danke dir.

Cihan

Autor: Stachele (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oder so:

signal vector : std_logic_vector(100 downto 0);
constant cNull : std_logic_vector(vector'range) := (others => '0');


process
begin
   if vector = cNull then
...
end process;

Autor: Stachele (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oder die Konstante lokal im Prozess, dann kann man den Konstanten-Namen
mehrfach verwenden ;-)

signal vector : std_logic_vector(100 downto 0);
signal vector2 : std_logic_vector(7 downto 0);


process
   constant cNull : std_logic_vector(vector'range) := (others => '0');
begin
   if vector = cNull then
...
end process;


process
    constant cNull : std_logic_vector(vector2'range) := (others => '0');
begin
   if vector2 = cNull then
...
end process;

Autor: Stachele (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oder noch eine kürzere Möglichkeit: Man verwendet eine Funktion.


function f_zeros ( vec : std_logic_vector) return std_logic_vector
   variable n : std_logic_vector(vec'range);
begin
    n := (others => '0');
    return n;
end f_zeros;




process
begin
   if vector = f_zeros(vector) then
...
end process;


process
begin
   if vector2 = f_zeros(vector2) then
...
end process;



Autor: Klaus (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Stachele schrieb:
> Oder noch eine kürzere Möglichkeit: Man verwendet eine Funktion.

Na wenn schon eine Funktion, dann doch gleich so:
function isZero( vec : std_logic_vector) return boolean
   variable n : std_logic_vector(vec'range);
begin
    n := (others => '0');
    if vec = n then
       return true;
    else
       return false


end isZero;




process
begin
   ifisZero(vector) then
...
end process;

Autor: Stachele (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ja Klaus, gefällt mir

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net