VHDL: OR-ingiriendo bits de un vector juntos

9

Quiero O los bits de un vector juntos. Entonces, digamos que tengo un vector llamado example(23 downto 0) y quiero O O todos los bits en otro vector, ¿hay alguna forma de hacer esto que no implique pasar example(0) or example(1) or ...example(23) ?

    

2 respuestas

11

or_reduce es lo que quieres, y está disponible en std_logic_misc . Compatible con A y X para FPGA.

    
respondido por el Aaron D. Marasco
3

Verilog tiene un "operador de reducción" conveniente que hace exactamente lo que estás pidiendo: |example[23:0] da el resultado de OR'ing todos los bits del vector example .

Lamentablemente, VHDL no tiene este operador. Sin embargo, de acuerdo con las comp.lang.vhdl

  

No hay un operador VHDL predefinido para realizar una operación de reducción en todos los bits del vector (por ejemplo, a "o" todos los bits de un vector). Sin embargo, los operadores de reducción se pueden implementar fácilmente:

     

[omitir un ejemplo que no maneja los valores de 'X' y '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 ); 
    
respondido por el The Photon

Lea otras preguntas en las etiquetas