Hallo, warum kommt hier bitte kein Wahrheitswert raus bei IF mit AND : signal wertu: unsigned(7 downto 0):="00010000"; signal data: unsigned(7 downto 0):="00010000"; if (data and wertu)=1 then led_g)<='1'; end if; Danke.
unabhängig davon das deine klammerung falsch ist und ich grad nicht die genaue VHDL-syntax im Kopf hab: 00010000 != 1
Hmm.., danke. Es kommt auch ohne Klammer keine Fehlermeldung. Es ist doch ein And-Vergleich der stimmt, da müsste doch Logisch 1 rauskommen? Gruss
du kennst in C den Unterschied zwischen und und undund? Also & und &&?
Jup, danke. ge-nka (Gast) es funktioniert mit deinem Vorschlag. Also & und &&? Mit & werden Werte zusammengesetzt , nicht auf Logik untersucht. && gibt einen Error. Gruss
---------------------- if (data = wertu) then led_g <='1'; end if; --------------------- Nein, es geht darum ein bestimmtes Bit im Byte auf gleichheit mit AND abzufragen. Gruss
Ich kann zwar kein VHDL, aber nach dem was hier steht: http://www.gmvhdl.com/operator.htm > The logical operators NOT, AND, OR, NAND, NOR, and XOR can be used > with any bit type or bit_vector. When used as operators on bits they > have their usual meaning. When used with bit_vectors, the bit_vectors > must have the same number of elements, and the operation is performed bitwise. ... > Also predefined are the normal relational operators. > They are =, /=, <, <=, > and >= and have their usual meanings > (/= denotes the not equal operator). The result of all these operators > is a boolean value (TRUE or FALSE) Ziehe ich folbende schlussfolgerungen: Das if statement braucht einen boolean als condition. Somit braucht man einen vergleich auf nicht null also: x /= 0 Prüfen, ob irgendein bit bei beiden gesetzt ist:
1 | if ( data and wertu ) /= 0 then |
Prüfen, ob bei beiden irgendein bit gesetzt ist:
1 | if ( data /= 0 ) and ( wertu /= 0 ) then |
Peter Bierbach schrieb: > Nein, es geht darum ein bestimmtes Bit im Byte auf gleichheit mit AND > abzufragen. Was ist das eigentliche Problem? Im ersten Post steht schon wieder so halbgarer C-Code. Woher kommen die beiden Bits, die da verglichen werden sollen? Wenn ich in einem Vektor gezielt ein Bit abfragen will, dann mache ich das über den Index: if a(3) = b(3) then...
Der Vector ändert sich mit den unteren 3 Bit einer Adresse von 13 Bit. Die unteren 3 Bit Shiften dann eine 1 nach links und dann kommt die Bitabfrage mit data, ob da auch das Bit gesetzt ist welches gemäss der unteren 3 Bit von der Adresse geschoben wurde. --------------------------------- Prüfen, ob bei beiden irgendein bit gesetzt ist: -------------------------------- Es wird wie oben beschrieben immer nur 1 bestimmte Bit im Vector auf gleichheit geprüft, welches von den unteren 3 Bit der Adresse abhängt welches dann eine 1 von 0-7 links shiftet. Gruss
:
Bearbeitet durch User
Peter Bierbach schrieb: > Nein, es geht darum ein bestimmtes Bit im Byte auf gleichheit mit AND > abzufragen. Auf Gleichheit mit AND prüfen? Auf Gleichheit prüft man mit "=" Mit "AND" kann man nur prüfen, ob beide Bits "1" sind. Schreibe dir doch mal die Wahrheitstabelle für ein AND auf, dann wirst du es sehr schnell selbst sehen, dass die Bedingung nur dann erfüllt ist, wenn beide Bits "1" sind. Was willst du denn genau erreichen? Prüfen, ob in zwei Vektoren die Bits an mindestens einer Stelle identisch sind? Oder prüfen, ob in zwei Vektoren die Bits an mindestens einer Stelle in beiden Vektoren "1" sind? Prüfen, ob die gesamten Vektoren identisch sind?
Sorry Peter, ich verstehe echt nicht, was du vor hast.. Du shiftest irgendwie eine "1" an eine bestimmte Stelle und willst schauen, ob die "1" auch dann an der Stelle ist? Wenn du einfach nur wissen willst, ob Bit Nummer drei in deinem Vektor "1" ist, dann schreibe das einfach so: if wertu(3) = '1' then
Schumpf schrieb: > Auf Gleichheit mit AND prüfen? Ich tippe, das ist die Maskiererei von C... Peter Bierbach schrieb: > Es wird wie oben beschrieben Ich kapiere diese Beschreibung nicht. Du beschreibst da keine HARDWARE. Sondern du beschreibst, wie du das mit C machen würdest. Diese Denkweise ist FALSCH. Für diese Denkweise ist eine Hardwarebeschreibungssprache wie VHDL oder Verilog NICHT geeignet. > Es wird wie oben beschrieben immer nur 1 bestimmte Bit im Vector auf > gleichheit geprüft, welches von den unteren 3 Bit der Adresse abhängt > welches dann eine 1 von 0-7 links shiftet. Was könnte das in der Hardware sein? Zwei 8:1 Multiplexer, die auf ein XOR gehen. > Es wird wie oben beschrieben immer nur 1 bestimmte Bit im Vector auf > gleichheit geprüft Auf Gleichheit mit was? > signal wertu: unsigned(7 downto 0):="00010000"; > signal data: unsigned(7 downto 0):="00010000"; > > if (data and wertu)=1 then Ich tippe, da ist tendenziell sowas gemeint:
1 | if data(adresse(2 downto 0)) = '1' then... |
Falls das so ist: du musst natürlich den Index noch vom 3 Bit Vektor zum Integer konvertieren. Das geht über unsigned() und to_integer()...
Lothar Miller schrieb: > Ich tippe, das ist die Maskiererei von C... Denke ich auch. Aber damit ist er hier auf dem Holzweg. Lothar Miller schrieb: > Du beschreibst da keine HARDWARE. Schön wäre ja schon, wenn er beschreiben würde, was er will. Und zwar so, dass man es verstehen kann. Wie das dann geschickt in Hardware abzubilden ist und somit in VHDL zu beschreiben ist, könnte dann die "Aufgabe" an das Forum sein.
----------------------------------- Mit "AND" kann man nur prüfen, ob beide Bits "1" sind. ----------------------------------- Das meine ich. Bei den unteren 3 Bits(Wert 0-7) von der Adresse weiss ich ja vorher nicht welche kommt, darum das Shiften einer 1 nach links und dann den Vergleich mit AND zu Data. Gruss
Peter Bierbach schrieb: > ----------------------------------- > Mit "AND" kann man nur prüfen, ob beide Bits "1" sind. > ----------------------------------- > > Das meine ich. > > Bei den unteren 3 Bits(Wert 0-7) von der Adresse weiss ich ja vorher > nicht welche kommt, darum das Shiften einer 1 nach links und dann den > Vergleich mit AND zu Data. > > Gruss Drücke dich doch bitte mal ein bisschen präziser aus. Was shiftest du wohin? Oder noch besser, beschreibe, WAS du machen möchtest und nicht, WIE du es machen möchtest. Was ist die Adresse? Was soll mit dieser geschehen? Was willst du? Es ist echt wahnsinnig schwer, anhand deiner unvollständiger Sätze und Beschreibungen zu erraten, was du meinen könntest.
Und benutze doch bitte zum zitieren die "Markierten Text zitieren"-Funktion unten rechts in jedem einzelnen Beitrag. Den Text, den du zitieren möchtest markieren, auf "Markierten Text zitieren" klicken und schwupps, erscheint das Zitat in deinem Feld, in dem du schreibst.
Danke. Das ist es: if data(adresse(2 downto 0)) = '1' then... Danke. Gruss
Peter Bierbach schrieb: > Das ist es: > if data(adresse(2 downto 0)) = '1' then... Also, dann so:
1 | if data(to_integer(unsigned(adresse(2 downto 0)))) = '1' then... |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.