VHDL: АБО-інші біти вектора разом


11

Я хочу АБО біти вектора разом. Так що скажіть, у мене є вектор, який називається, example(23 downto 0)і я хочу АБО всі біти в інший вектор, чи є якийсь спосіб зробити це, що не передбачає переходу example(0) or example(1) or ...example(23)?


Чи можете ви замість цього просто порівняти нуль? Це матиме той же ефект.
Девід

Щоб розширити коментар Девіда (використовуючи 32-бітний вектор): or_result <= '0' when input=X"00000000" else '1';Змініть кількість нулів, щоб відповідати довжині відповідного вектора.

Зниження логіки доступне в vhdl 2008, див. Stackoverflow.com/questions/20296276/…
Moberg

1
Також ви можете скористатися більш загальним способом:result <= '0' when (example=(example'range=>'0')) else '1';
Мігель Ріско

Відповіді:



5

Verilog має зручний "оператор скорочення", який робить саме те, що ви просите: |example[23:0]дає результат OR'ing всіх бітів exampleвектора.

На жаль, VHDL не має цього оператора. Згідно з поширеними питаннями comp.lang.vhdl , хоча

Немає заздалегідь заданого оператора VHDL, який би здійснював операцію скорочення всіх бітів вектора (наприклад, до "або" всіх бітів вектора). Однак операторів скорочення можна легко здійснити:

[пропуск прикладу, який не обробляє значення "X" та "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

Це синтезувати?
Йоханнес Шауб - ліб

@ JohannesSchaub-litb, звичайно, це може бути синтезовано до справді великих АБО воріт (або дерева менших). Можливо, версія в стандартній бібліотеці (у відповіді Аарона Д. Мараско) буде краще оптимізована, ніж щось, що генерується на льоту.
The Photon

VHDL-2008 має операторів одинарного скорочення. FAQ є застарілим. Крім того, представлена ​​функція викликає сумнівну синтезованість через ранній вихід, який деякі інструменти можуть задихнутися і не потрібен, крім мікрооптимізації для моделювання.
KevinThibedeau
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.