Forum: FPGA, VHDL & Co. Abfrage eines Std_Logic_Vectors


von Torben (Gast)


Lesenswert?

Moin,
hab ein Problem bei einer Abfrage von einem Bit innerhalb einer 
Bitfolge.

Der folgende Codeausschnitt, fragt eine Bitfolge auf ein Bit ab und 
setzt somit ein entsprechendes Signal.
Signale sind Set_Select, Set_Setzen, Set_Read, Set_Write, Set_Status 
jeweils std_logic
PWDATA ist die Bitfolge (std_logic_vector 31 downto 0)

Wie frage ich die einzelnen Bits ab? So wie ich es geschrieben habe 
funktioniert das irgendwie nicht. Denn ersten Teil (CLK) sowie die 
nächste IF-Abfrage (Set_Select and PADDR) funktionieren ohne Probleme.
1
If …
2
elsif (clk='1' and clk'event) then
3
   if (Set_Select = '1' and PADDR = "00000000000000000000001111101010") then
4
      if (PWDATA(0) = '0') then --normaler Betrieb
5
         Set_Setzen <= '0';
6
      elsif (PWDATA (0) ='1') then --Setzen
7
         Set_Setzen <= '1';
8
      elsif (PWDATA(1) = '0') then --Lesen
9
         Set_Read <= '1';
10
      elsif (PWDATA(1) = '1') then --Schreiben
11
         Set_Write <= '1';
12
      elsif (PWDATA(2) = '0') then --Stop
13
         Set_Status <= '0';
14
      elsif (PWDATA(2) = '1') then --Start
15
         Set_Status <= '1';
16
      end if;
17
   end if;
18
end if;


Ich hoffe, dass ihr mir weiterhelfen könnt.

Torben

von Michael N. (bigmike47)


Lesenswert?

naja, so wie du das in einem if gemacht hast, kann ja das nie 
funktionieren, schliesslich ist bit 0 immer entweder '1' oder '0', womit 
nie eine andere stelle des vektors abgefragt wird. ich nehme mal an, das 
das synthese-tool saemtliche anderen elsif's sogar komplett wegwerfen 
wird.

von Falk B. (falk)


Lesenswert?

@ Torben (Gast)

>Wie frage ich die einzelnen Bits ab?

Einfach abfragen?

>So wie ich es geschrieben habe
>funktioniert das irgendwie nicht.

Es ist auch ziemlich konfus. Warum einfach, wenns auch umständlich geht. 
;-)
Und ausserdem hast du die Bedingungen verkettet, was sicher nicht deine 
Absicht war.
1
elsif (clk='1' and clk'event) then
2
   if (Set_Select = '1' and PADDR = "00000000000000000000001111101010") then
3
         Set_Setzen <= PWDATA(0);
4
         Set_Read <= PWDATA(1);
5
         Set_Status <= PWDATA(2);
6
   end if;
7
end if;

Mfg
Falk

von Torben (Gast)


Lesenswert?

@ Falk
Danke Falk genau das Löst mein Problem :)

@ Michael
Das der so groß ist muss so sein, die restlichen Bits des Vektors werden 
für anderen Konfigurationen verwendet.

von Michael N. (bigmike47)


Lesenswert?

ich hab ja auch nichts dagegen gesagt, dass der vektor so gross ist, ich 
hab bemaengelt, dass du die anderen stellen abhaengig von der nullten 
stelle abfragst, was bloedsinn ist. und das wegzulassen ist nichts 
anderes als das was falk gemacht hat

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.