STD_LOGIC_VECTOR IF-Abrage (Syntax)

OP #2802516
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
OP #2802579
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
Gast #2803548
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;
Gast #2803555
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;
Gast #2803564
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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren