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


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:



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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.