VHDL: bits OR-ing de un vector juntos

11

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

motorista del apocalipsis
fuente
¿Podría simplemente comparar a cero en su lugar? Eso tendría el mismo efecto.
David
Para ampliar el comentario de David (usando un vector de 32 bits): or_result <= '0' when input=X"00000000" else '1';Cambie el número de ceros para que coincida con la longitud del vector en cuestión.
La reducción lógica está disponible en vhdl 2008, consulte stackoverflow.com/questions/20296276/…
Moberg
1
También puede usar de manera más general:result <= '0' when (example=(example'range=>'0')) else '1';
Miguel Risco

Respuestas:

12

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

Aaron D. Marasco
fuente
and_reduceEs el otro útil.
Aaron D. Marasco
5

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

Lamentablemente, VHDL no tiene este operador. Sin embargo, según las preguntas frecuentes de 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, "o" todos los bits de un vector). Sin embargo, los operadores de reducción pueden implementarse fácilmente:

[omitiendo un ejemplo que no maneja los valores '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 ); 
El fotón
fuente
Quien votó en contra, ¿quiere explicar por qué?
The Photon
¿Es esto sintetizable?
Johannes Schaub - litb
@ JohannesSchaub-litb, por supuesto, se puede sintetizar en una puerta OR realmente grande (o un árbol de otras más pequeñas). Posiblemente la versión en la biblioteca estándar (en la respuesta de Aaron D. Marasco) estará mejor optimizada que algo generado sobre la marcha.
The Photon
VHDL-2008 tiene operadores de reducción unarios. Las preguntas frecuentes no están actualizadas. Además, la función presentada es de sintetización cuestionable debido a la salida anticipada que algunas herramientas pueden ahogar y no es necesaria más que como una micro-optimización para la simulación.
KevinThibedeau 01 de