Vektor mit sich selbst verunden in VHDL

Gast #1770144
Ist das in der IEEE library inkludiert?
Zumindest kann es nicht in IEEE.STD_LOGIC_1164.ALL, 
IEEE.STD_LOGIC_ARITH.ALL
oder IEEE.STD_LOGIC_UNSIGNED.ALL gefunden werden.
Gast #1770177
Sagt mal, was heisst "mit sich selbst verunden"?

A UND A ist doch A! Und "wenn alle 1 sind" heisst einfach IF A=255 (für 
einen 8bit-Vektor).

Was ist hier denn gemeint?
Gast #1770222
>Das erste Bit verundet mit dem zweiten Bit, dieses Ergebnis verundet
> mit dem dritten Bit

Bitte??? Das läuft doch auf darauf hinaus, daß das Ergenis nur dann 1 
ist, wenn alle 1 sind, also das Maximum des Vektors erreicht war.

Irgendwie meint ihr etwas anderes. Ich hätte gerne mal das Ergebnis für 
den Vektor 240

11110000 -> ???
Gast #1770235
Und warum?  Weil die ersten 4 Verundungen noch eine 1 ergeben, während 
die 5. die 0 ergibt und bleibt, da 0 und irgendwas immer 0 ergibt.

Oder braucht man auch die Zwischenergebnisse für irgendwas?
Moderator (Firma: Titel) Persönliche Seite #1770252
Hier mal 2 Schleifen zum Thema.
1. Variante entsprechend der Aufgabe
1
   variable result std_logic := '1';
2
   for i in vektor'range loop
3
      result := vektor(i) AND result;
4
   end loop;

2. Variante
> Das läuft doch auf darauf hinaus, daß das Ergenis nur dann 1
> ist, wenn alle 1 sind, also das Maximum des Vektors erreicht war.
Invertiert bedeutet das: wenn keine 0 drin ist
1
   variable result std_logic := '1';
2
   for i in vektor'range loop
3
      if  vektor(i)='0' then 
4
         result:='0'; 
5
      end if;
6
   end loop;
#1770297
Ich verstehe das Problem auch nicht ganz.
Die Schleifen von Lothar sind logisch und nachvollziehbar.
Aber das Ergebnis ist 1, wenn keine 0 im Vektor vorkommt.
Wieso kann man dann nicht direkt den Maximalwert des Vectors abfragen?
1
result <= '1' when A = 2**"Anzahl der Bits" else '0'
Moderator (Firma: Titel) Persönliche Seite #1770330
> Aber das Ergebnis ist 1, wenn keine 0 im Vektor vorkommt.
Das ist eine VerUNDung...

> Wieso kann man dann nicht direkt den Maximalwert des Vectors abfragen?
Weil ein Vektor per Definition eigentlich keinen Wert hat. Er ist nur 
eine Aneinanderreihung von einzelnen Bits. Das ist z.B. bei einem 
Statusregister der Fall.

Wenn du also einen Vektor mit einer Zahl vergleichen willst, mußt du vor 
dem Vergleich erst mal entweder den Vektor in eine Zahl oder die Zahl in 
einen Vektor umwandeln.
Und 2**"Anzahl der Bits" ist eins zu viel...  :-o
1
result <= '1' when A = std_logic_vector(to_unsigned(2**Anzahl_der_Bits-1),A'length)) else '0'
2
-- oder
3
result <= '1' when to_integer(unsigned(A))) = 2**Anzahl_der_Bits-1 else '0'

EDIT:
>> 2**"Anzahl der Bits"
> 2**("Anzahl der Bits" - 1)
Auch falsch... ;-)
Persönliche Seite #1771751
> Wenn du also einen Vektor mit einer Zahl vergleichen willst, mußt du
> vor dem Vergleich erst mal entweder den Vektor in eine Zahl oder die
> Zahl in einen Vektor umwandeln.

In Computersprachen ist das so und dort kostet es Rechenzeit.

In VHDL wird es elementar aufgebaut und zwar unabhängig davon, ob man es 
in einer Loop-Schleife fromuliert oder mit dem direkten Vergleich. Es 
sind n elementare Und-Gatter, die in LUTs gemapped werden.

Es ist faktisch vollkommen Wurscht, wie man es beschreibt. Ich tendiere 
zur expliziten Lösung mit dem Maximalwertvergleich. Das gilt auch, wenn 
ein Bit irgendwo in diesem ominösen Vektor auf "Aus" geprüft werden 
sollte.

Einfach ein Not davor und Ende.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.