VHDL: OR-bitowe bity wektora razem

11

Chcę razem OR bitów wektora. Powiedzmy, że mam wektor o nazwie example(23 downto 0)i chcę OR wszystkie bity do innego wektora, czy jest jakiś sposób na to, który nie wymaga przejścia example(0) or example(1) or ...example(23)?

rowerzysta apokalipsy
źródło
Czy możesz po prostu porównać do zera? To miałoby ten sam efekt.
David,
Aby rozwinąć komentarz Davida (przy użyciu wektora 32-bitowego): or_result <= '0' when input=X"00000000" else '1';Zmień liczbę zer, aby dopasować długość danego wektora.
Redukcja logiki jest dostępna w vhdl 2008, patrz stackoverflow.com/questions/20296276/…
Moberg
1
Możesz także użyć bardziej ogólnego sposobu:result <= '0' when (example=(example'range=>'0')) else '1';
Miguel Risco

Odpowiedzi:

12

or_reducejest tym, czego chcesz i jest dostępny w std_logic_misc. Obsługiwane zarówno przez A, jak i X dla układów FPGA.

Aaron D. Marasco
źródło
and_reducejest drugim przydatnym.
Aaron D. Marasco,
5

Verilog ma wygodny „operator redukcji”, który robi dokładnie to, o co prosisz: |example[23:0]daje wynik OR'owania wszystkich bitów examplewektora.

Niestety VHDL nie ma tego operatora. Jednak zgodnie z comp.lang.vhdl FAQ

Nie ma predefiniowanego operatora VHDL do wykonania operacji redukcji na wszystkich bitach wektora (np. Do „lub” wszystkich bitów wektora). Operatory redukcji można jednak łatwo wdrożyć:

[pomijając przykład, który nie obsługuje wartości „X” i „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 ); 
The Photon
źródło
Ktokolwiek oddał głos, chciałby wyjaśnić, dlaczego?
Photon
Czy to można zsyntetyzować?
Johannes Schaub - litb
@ JohannesSchaub-litb, oczywiście, można go zsyntetyzować do naprawdę dużej bramki OR (lub drzewa mniejszych). Być może wersja w standardowej bibliotece (w odpowiedzi Aarona D. Marasco) będzie lepiej zoptymalizowana niż coś generowanego w locie.
Photon
VHDL-2008 ma jednoargumentowe operatory redukcji. FAQ jest nieaktualne. Ponadto prezentowana funkcja ma wątpliwą syntezę ze względu na wczesne wyjście, z którego niektóre narzędzia mogą się zadławić i nie jest konieczna inaczej niż jako mikrooptymalizacja do symulacji.
KevinThibedeau