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)?

Biker der Apokalypse
quelle
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:

12

or_reduceist, was Sie wollen, und es ist verfügbar in std_logic_misc. Unterstützt von A und X für FPGAs.

Aaron D. Marasco
quelle
and_reduceist der andere nützliche.
Aaron D. Marasco
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 ); 
Das Photon
quelle
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