VHDL: OR-ing bit di un vettore insieme


11

Voglio OR i bit di un vettore insieme. Quindi dire che ho un vettore chiamato example(23 downto 0)e voglio OR tutti i bit in un altro vettore, c'è un modo per farlo che non comporta andare example(0) or example(1) or ...example(23)?


Potresti semplicemente confrontare a zero invece? Ciò avrebbe lo stesso effetto.
David,

Per espandere il commento di David (usando un vettore a 32 bit): or_result <= '0' when input=X"00000000" else '1';modifica il numero di zeri in modo che corrisponda alla lunghezza del vettore in questione.

La riduzione della logica è disponibile nel vhdl 2008, vedere stackoverflow.com/questions/20296276/…
Moberg,

1
Inoltre puoi usare un modo più generale:result <= '0' when (example=(example'range=>'0')) else '1';
Miguel Risco,

Risposte:



5

Verilog ha un comodo "operatore di riduzione" che fa esattamente quello che stai chiedendo: |example[23:0]dà il risultato di OR tutti i bit del examplevettore.

Sfortunatamente VHDL non ha questo operatore. Tuttavia , secondo le FAQ di comp.lang.vhdl

Non esiste un operatore VHDL predefinito per eseguire un'operazione di riduzione su tutti i bit di vettore (ad esempio, su "o" tutti i bit di un vettore). Tuttavia, gli operatori di riduzione possono essere facilmente implementati:

[saltare un esempio che non gestisce i valori 'X' e '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 ); 

Chi ha effettuato il downvoting, desidera spiegare perché?
The Photon,

È sintetizzabile?
Johannes Schaub - lett.

@ JohannesSchaub-litb, ovviamente, può essere sintetizzato in un gate OR veramente grande (o in un albero di quelli più piccoli). Forse la versione nella libreria standard (nella risposta di Aaron D. Marasco) sarà ottimizzata meglio di qualcosa generato al volo.
Il fotone

VHDL-2008 ha operatori di riduzione unari. Le FAQ sono obsolete. Inoltre, la funzione presentata è discutibile sintetizzabilità a causa dell'uscita anticipata su cui alcuni strumenti potrebbero soffocare e non è necessario se non come una micro-ottimizzazione per la simulazione.
KevinThibedeau,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.