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


von Cihan K. (lazoboy61)


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:
1
...
2
signal Vector: std_logic_vector (9 downto 0);
3
...
4
process(clk)
5
begin
6
if rising_edge(clk) then
7
...
8
   if Vector = "0000000000" then -- <----- Vektorabfrage
9
      ...
10
   end if;
11
...
12
end if; 
13
...
14
end process;
15
...

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

von Marius W. (mw1987)


Lesenswert?

Cihan Kalayci schrieb:
> if Vektor = (others => '0') oder if Vektor = (others = '0')

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

von Stachele (Gast)


Lesenswert?

Dieses Thema wurde doch schon 100mal behandelt, einfach mal im forum 
suchen, bevor man fragt

von Cihan K. (lazoboy61)


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

von S. (Gast)


Lesenswert?

"If not vektor" müsste auch gehen, wenn es sich um Nullen dreht, oder 
"unsigned (vektor) = zahl"

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


Lesenswert?


von Cihan K. (lazoboy61)


Lesenswert?

Lothar Miller schrieb:
> Cihan Kalayci schrieb:
>> Danke Marius, hat super geklappt.
> Zum Hintergrund:
> http://www.lothar-miller.de/s9y/archives/28-Vektor-Vergleich.html

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

Danke dir.

Cihan

von Stachele (Gast)


Lesenswert?

Oder so:

1
signal vector : std_logic_vector(100 downto 0);
2
constant cNull : std_logic_vector(vector'range) := (others => '0');
3
4
5
process
6
begin
7
   if vector = cNull then
8
...
9
end process;

von Stachele (Gast)


Lesenswert?

Oder die Konstante lokal im Prozess, dann kann man den Konstanten-Namen
mehrfach verwenden ;-)

1
signal vector : std_logic_vector(100 downto 0);
2
signal vector2 : std_logic_vector(7 downto 0);
3
4
5
process
6
   constant cNull : std_logic_vector(vector'range) := (others => '0');
7
begin
8
   if vector = cNull then
9
...
10
end process;
11
12
13
process
14
    constant cNull : std_logic_vector(vector2'range) := (others => '0');
15
begin
16
   if vector2 = cNull then
17
...
18
end process;

von Stachele (Gast)


Lesenswert?

Oder noch eine kürzere Möglichkeit: Man verwendet eine Funktion.

1
function f_zeros ( vec : std_logic_vector) return std_logic_vector
2
   variable n : std_logic_vector(vec'range);
3
begin
4
    n := (others => '0');
5
    return n;
6
end f_zeros;
7
8
9
10
11
process
12
begin
13
   if vector = f_zeros(vector) then
14
...
15
end process;
16
17
18
process
19
begin
20
   if vector2 = f_zeros(vector2) then
21
...
22
end process;

von Klaus (Gast)


Lesenswert?

Stachele schrieb:
> Oder noch eine kürzere Möglichkeit: Man verwendet eine Funktion.

Na wenn schon eine Funktion, dann doch gleich so:
1
function isZero( vec : std_logic_vector) return boolean
2
   variable n : std_logic_vector(vec'range);
3
begin
4
    n := (others => '0');
5
    if vec = n then
6
       return true;
7
    else
8
       return false
9
10
11
end isZero;
12
13
14
15
16
process
17
begin
18
   ifisZero(vector) then
19
...
20
end process;

von Stachele (Gast)


Lesenswert?

Ja Klaus, gefällt mir

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.