mikrocontroller.net

Forum: FPGA, VHDL & Co. Abfrage eines Std_Logic_Vectors


Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
If …
elsif (clk='1' and clk'event) then
   if (Set_Select = '1' and PADDR = "00000000000000000000001111101010") then
      if (PWDATA(0) = '0') then --normaler Betrieb
         Set_Setzen <= '0';
      elsif (PWDATA (0) ='1') then --Setzen
         Set_Setzen <= '1';
      elsif (PWDATA(1) = '0') then --Lesen
         Set_Read <= '1';
      elsif (PWDATA(1) = '1') then --Schreiben
         Set_Write <= '1';
      elsif (PWDATA(2) = '0') then --Stop
         Set_Status <= '0';
      elsif (PWDATA(2) = '1') then --Start
         Set_Status <= '1';
      end if;
   end if;
end if;


Ich hoffe, dass ihr mir weiterhelfen könnt.

Torben

Autor: Michael Niegl (bigmike47)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.
elsif (clk='1' and clk'event) then
   if (Set_Select = '1' and PADDR = "00000000000000000000001111101010") then
         Set_Setzen <= PWDATA(0);
         Set_Read <= PWDATA(1);
         Set_Status <= PWDATA(2);
   end if;
end if;

Mfg
Falk

Autor: Torben (Gast)
Datum:

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

Autor: Michael Niegl (bigmike47)
Datum:

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

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.