VHDL: bits OR-ing d'un vecteur ensemble


11

Je veux OU les bits d'un vecteur ensemble. Donc, disons que j'ai un vecteur appelé example(23 downto 0)et que je veux OU tous les bits dans un autre vecteur, y a-t-il un moyen de le faire qui n'implique pas d'aller example(0) or example(1) or ...example(23)?


Pourriez-vous simplement comparer à zéro à la place? Cela aurait le même effet.
David

Pour développer le commentaire de David (en utilisant un vecteur 32 bits): or_result <= '0' when input=X"00000000" else '1';Modifiez le nombre de zéros pour correspondre à la longueur du vecteur en question.

La réduction logique est disponible dans vhdl 2008, voir stackoverflow.com/questions/20296276/…
Moberg

1
Vous pouvez également utiliser de manière plus générale:result <= '0' when (example=(example'range=>'0')) else '1';
Miguel Risco

Réponses:



5

Verilog a un "opérateur de réduction" pratique qui fait exactement ce que vous demandez: |example[23:0]donne le résultat de OU sur tous les bits du examplevecteur.

Malheureusement, VHDL n'a pas cet opérateur. Cependant, selon la FAQ comp.lang.vhdl

Il n'y a pas d'opérateur VHDL prédéfini pour effectuer une opération de réduction sur tous les bits du vecteur (par exemple, "ou" tous les bits d'un vecteur). Cependant, les opérateurs de réduction peuvent être facilement mis en œuvre:

[sauter un exemple qui ne gère pas les valeurs «X» et «Z»]

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

Celui qui a voté en bas, veut expliquer pourquoi?
The Photon

Est-ce synthétisable?
Johannes Schaub - litb

@ JohannesSchaub-litb, bien sûr, il peut être synthétisé en une très grande porte OU (ou un arbre de plus petites). Il est possible que la version de la bibliothèque standard (dans la réponse d'Aaron D. Marasco) soit mieux optimisée que quelque chose généré à la volée.
The Photon

VHDL-2008 possède des opérateurs de réduction unaires. La FAQ est obsolète. De plus, la fonction présentée est d'une synthétisabilité douteuse en raison de la sortie précoce sur laquelle certains outils peuvent s'étouffer et n'est pas nécessaire autrement que comme une micro-optimisation pour la simulation.
KevinThibedeau
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.