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.