VHDL: ODER-Verknüpfung von Bits eines Vektors


11

Ich möchte die Bits eines Vektors zusammen ODER-verknüpfen. Angenommen, ich habe einen Vektor namens example(23 downto 0)und möchte alle Bits in einen anderen Vektor ODER verknüpfen. Gibt es eine Möglichkeit, dies zu tun, bei der es nicht darum geht, zu gehen example(0) or example(1) or ...example(23)?


Könnten Sie stattdessen einfach mit Null vergleichen? Das hätte den gleichen Effekt.
David

So erweitern Sie Davids Kommentar (unter Verwendung eines 32-Bit-Vektors): or_result <= '0' when input=X"00000000" else '1';Ändern Sie die Anzahl der Nullen entsprechend der Länge des betreffenden Vektors.

Logikreduzierung ist in vhdl 2008 verfügbar, siehe stackoverflow.com/questions/20296276/…
Moberg

Sie können auch allgemeinere Methoden verwenden:result <= '0' when (example=(example'range=>'0')) else '1';
Miguel Risco

Antworten:



5

Verilog verfügt über einen praktischen "Reduktionsoperator", der genau das tut, wonach Sie fragen: Er |example[23:0]gibt das Ergebnis der ODER-Verknüpfung aller Bits derexample Vektors an.

Leider hat VHDL diesen Operator nicht. Nach dem comp.lang.vhdl FAQ , obwohl

Es gibt keinen vordefinierten VHDL-Operator, der eine Reduktionsoperation für alle Vektorbits ausführt (z. B. für "oder" alle Bits eines Vektors). Die Reduktionsoperatoren können jedoch leicht implementiert werden:

[Überspringen eines Beispiels, das keine 'X'- und' Z'-Werte verarbeitet]

    function or_reduce( V: std_logic_vector )
                return std_ulogic is
      variable result: std_ulogic;
    begin
      for i in V'range loop
        if i = V'left then
          result := V(i);
        else
          result := result OR V(i);
        end if;
        exit when result = '1';
      end loop;
      return result;
    end or_reduce;
    ...
    b <= or_reduce( b_vec ); 

Wer auch immer herabgestimmt hat, möchte erklären, warum?
Das Photon

Ist das synthetisierbar?
Johannes Schaub - litb

@ JohannesSchaub-litb, natürlich kann es zu einem wirklich großen ODER-Gatter (oder einem Baum kleinerer) synthetisiert werden. Möglicherweise wird die Version in der Standardbibliothek (in der Antwort von Aaron D. Marasco) besser optimiert als etwas, das im laufenden Betrieb generiert wird.
Das Photon

VHDL-2008 hat unäre Reduktionsoperatoren. Die FAQ ist veraltet. Darüber hinaus ist die vorgestellte Funktion aufgrund des frühen Ausstiegs, an dem einige Tools möglicherweise ersticken, fraglich und nur als Mikrooptimierung für die Simulation erforderlich.
KevinThibedeau
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.